クラフト Jul 16, 2026 at 17:457ブックマークに追加

Nik MalykhinはJava 1.5のベースを最新のハードウェアで動かす必要があった。彼のLLMからの最初の回答はもっともらしく見えたが、リポジトリにうまく適合しなかった。解決策:彼の言葉を鵜呑みにせず、根拠に基づいたアプローチを強制することだった。
レガシーコードにLLMを投入すると、正しそうに聞こえるがプロジェクトに合わない回答が生まれる。効果的な方法は、LLMにメモリではなくコード、テスト、成果物といった証拠に基づいて作業させることだ。
2026年7月16日、martinfowler.comにてNik MalykhinはJava 1.5から最新環境へのモダナイゼーションについて語った。特殊な状況下で行われた作業:最新の分析・リファクタリングツールはJava 1.5を好まず、多くは受け付けない。彼の最初の反応は、直接LLMに修正を依頼することだったが、Malykhinが「plausible」と表現する回答は「did not hold up in the codebase」だった。見た目は良いJava 1.5だが、実際のリポジトリには合わない。
転機は方法論にあった。MalykhinはLLMを執筆者ではなく分析者・検証者として使用し、各ステップをリポジトリに根差して行った:既存コードの丁寧な読み込み、テストや実行トレースからの仮説検証、コード自体が示す以上の早急な判断の拒否。記事のメッセージはシンプルだ:レガシーのモダナイゼーションにLLMを使っても、考古学者のように速くは進まないが、証明の穴は少なくなる。
このパターンは現代のエージェントツールでは「evidence-first prompting」「grounded reasoning」「retrieval-first」など複数の名前で呼ばれるが、共通するルールがある:アシスタントの各主張はリポジトリの成果物(ファイル、行、テスト)に裏付けられていなければならない。この制約がないと、レガシーにLLMを使った際の最も高くつく「偽陽性」が生まれる:ターゲットバージョンより後のAPI、存在しないメソッド、架空のimportsなどだ。
レガシーコードに取り組むチームにとって、LLM「コパイロット」は執筆に使うのではなく、検索に使うべきだ。真の生産性はLLMに読ませることから生まれ、推測させることではない。CTOにとっての教訓:AI支援によるモダナイゼーションプロジェクトの良い指標は「生成された行数」ではなく「コード自体によって否定された仮説の数」だ。この違いは、レガシープロジェクトが成果を上げるか、再び負債を抱えるかの分かれ目となる。
本記事は人工知能により作成され、人間の編集管理のもとで校閲されています。
Interesting approach. Does this method also work for other legacy systems, or is it specific to Java 1.5?
Est-ce qu'on peut vérifier les suggestions du LLM avant de les implémenter, surtout sur un vieux système comme Java 1.5 ?
On pourrait tester les propositions du LLM dans un environnement isolé avant de les appliquer au système principal ?
Est-ce que ça marche aussi sur des gros projets Java 1.5 ?
Est-ce que ça marche aussi sur des gros projets Java 1.5 ? Les LLM ont du mal avec le code ancien très imbriqué, leurs suggestions sont moins fiables.
Est-ce que ça marcherait aussi pour d'autres vieux systèmes ?
Intéressant, mais comment ça se passe avec d'autres langages anciens ?
Les LLMs pourraient-ils vraiment sauver nos vieux systèmes ?
Harness Ops : post-mortems et bench des agents en prod