クラフト 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を苦手とし、多くは受け付けない。Malykhinの最初の試みは、直接LLMに修正を依頼することだったが、その結果は「plausible」な回答でありながら「did not hold up in the codebase」だった。見た目は良いJava 1.5のコードだが、実際のリポジトリには合わなかった。
転機は方法論にあった。MalykhinはLLMを執筆者としてではなく、解析者・検証者として活用した。各ステップをリポジトリに根ざして進めた:既存コードの丁寧な読み込み、テストや実行トレースに基づく仮説の検証、コード自体が示す以上の早急な判断を拒否する。記事のメッセージはシンプルだ:レガシーの近代化にLLMを使っても、考古学者のように速くは進まない。しかし、その過程で証明の穴は少なくなる。
このパターンは現代のエージェントツールではevidence-first prompting、grounded reasoning、retrieval-firstなど複数の名前で呼ばれるが、共通するルールがある:LLMの主張は必ずリポジトリの成果物(ファイル、行、テスト)に紐づけなければならない。この制約がないと、レガシーにLLMを使った際の最もコストのかかる「偽陽性」を生む:ターゲットバージョンより後のAPI、存在しないメソッド、架空のインポートなどだ。
レガシーコードに取り組むチームにとって、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