TL;DR
WordPress 4.0のPHPファイル100個を対象に、5つのLLMが単一ファイルをPHP 8.3へ移行する設定を、未変更原本とRectorに比較した研究。630個の隠し挙動チェックでは、未変更原本が83ファイル全合格、最良LLMは59、Rectorは82。LLMは32–51ファイルを壊し、修復は1–10ファイル。必須変更は511 findings中37件のみで、必須変更がないファイルでもLLMは36–60%を壊した。実務では「未変更ベースライン」と「必須/任意変更」を分けて評価すべき、という結論。
既存手法との違い
比較対象は、(1)未変更原本、(2)ルールベースのRector。全出力を同じ630個の隠し挙動チェックで評価し、ソース近代化は511個のRector findingsで別に評価する。条件は同一100ファイル、単一ファイル変換、実行フィードバックなし。LLMは固定プロンプトへの初回完全回答を無編集で採用し、Rectorも手動修正なしで1ファイルずつ変換する。結果は、未変更原本83互換、Rector82(原本と有意差なし)、LLMは最大59互換。Rectorは12回帰・62修復、LLMは122–215回帰・58–68修復(4モデル; Llamaはより低い)。ファイル単位ではLLMが32–51破壊・1–10修復、Rectorが7破壊・6修復。Rectorのresolutionは循環回避のため採点せず、これは挙動保全の比較である。論文は、未変更を基準に必須/任意変更を分離した点を新規性として主張する。
使える条件
原論文の評価対象はWordPress 4.0のPHP 482ファイルから、サイズ層別にパターン豊富な100ファイルを目的抽出したもの。入力は完全な単一PHPファイルのみで、呼び出し元・依存関係・テスト・実行時エラーは与えない。指示はPHP 8.3への移行と、入出力・副作用・呼び出し互換の保持を同時に要求し、コードのみ出力させる。モデルはClaude Sonnet 4、Gemini 2.5 Flash、Gemini 2.5 Pro、GPT-5 Codex、Llama 3.3 70B Instruct。温度0.2(GPT-5 CodexはAPIが非公開)、最大64,000出力トークン・600秒、初回完全回答を無編集で採用。評価はPHP 8.3・E_ALLで630個の隠しPHPUnitチェック、deprecationも失敗扱い。511 findingsをRectorで検出する。適用可能なのは、単一ファイルの同一言語移行を初回回答・実行フィードバックなしで比較する条件。他言語・リポジトリ全体・エージェント反復は提示本文からは確認できない。
限界と未検証の範囲
100ファイルはWordPress 4.0から目的抽出した標本であり、WordPress全体やPHP一般に一般化できない。単一ファイル・プロジェクト文脈なし・初回回答のみで、呼び出し元依存や実行フィードバックを使う設定は未検証。隠しチェックは各ファイルの選択経路を対象とし、完全な挙動ではない。80個のfingerprint checksを除いても結論は同じだが、実装詳細に敏感な検査を含む。Rectorのresolutionは循環回避で未採点。出力の再生成回数は記録されず、モデル/API版・設定に依存する。3–12ファイル/モデルはRectorが解析不能で未解決扱い。他モデル・他言語・大規模リポジトリ・エージェント反復は提示本文から確認できない。
解説
ねえ智也、LLMにレガシーPHPを丸ごと貼って『モダンにして』って頼むの、楽そうでいいよね。
それが落とし穴。論文は単一ファイルで、プロジェクト文脈も実行フィードバックもなしの初回回答を、未変更原本とRectorに比べてる。
え、何もしない方が強いってこと?
WordPress 4.0の482ファイルから目的抽出した100ファイルをPHP 8.3へ移行する設定で、5つのLLMを630個の隠し挙動チェックで評価すると、未変更原本は83ファイル全部合格。最良のLLMでも59。Rectorは82で原本と有意差なし。
83対59はけっこう差あるじゃん。LLMは直すより壊す方が多い?
そう。LLMは32–51ファイルを壊して、修復は1–10。Rectorは7壊して6修復。LLMは最大でも59だから、原本より互換なファイルが少ない。
なんでそんなに壊れるの?
原因の多くはロード時拒否。PHPが受け付けない型宣言を入れたりして、ファイルがそもそも動かなくなる。あと実行時型エラーやインターフェース変更もある。
でもモダン化スコアが高いモデルならマシなんじゃない?
そこが面白い。Gemini 2.5 Proは511 findingsの72.8%を解消して一番だけど、互換ファイルは55で、Claude Sonnet 4の59やGPT-5 Codexの58より少ない。近代化スコアと挙動保全は一致しない。
必須の変更ってそんなに多いの?
511 findingsのうち必須は37だけ。必須変更がないファイルでもLLMは36–60%を壊す。Rectorは8%。つまり余計な変更で壊してる部分が大きい。
へえ。じゃあ『未変更ベースライン』と『必須/任意変更』を分けて評価しようってのが論文の結論?
そう。あと限界もあって、100ファイルはWordPress 4.0からの目的抽出で一般化はできない。単一ファイル・初回回答・実行フィードバックなしの設定だけ。隠しチェックも選択経路だけだし、Rectorのresolutionは循環回避で採点してない。
他の言語やリポジトリ全体、エージェント反復はこの論文では確認できないんだね。
提示された本文からは確認できない。まあ、研究の主張はこの条件の中での話。
つまりLLMは『冷蔵庫の残り物でいい感じに』って頼むと、余計な調味料足して味壊すコックさん?
例えはいいけど、まず冷蔵庫の電源確認しろよ。