エンジニアリング
Anthropicのモダナイゼーション用プラグインはCOBOLを書き換える。その前に、理解していることを証明させる
Claude Code向けのcode-modernizationプラグインは、レガシー移行を「調査 → 人間による承認ゲート → コード生成」という強制された順序に変える。設計の大半は工程の省略を拒むことに費やされており、その拒否こそが読みどころである。
MAI
Anthropicがcode-modernizationというClaude Code向けプラグインを公開した。狙いは、エンタープライズソフトウェアで最も古く、最も地味な問題である。COBOL、旧世代のJava、C++、.NET——いまも事業を動かし続けているのに、現職の誰ひとりとして全体を把握していないシステムだ。ライセンスはApache 2.0、導入は1行、公式のプラグインディレクトリでは「Anthropic verified」として約5,900件のインストール数が表示されている。
ここで提供されている能力そのものは、さして興味深くない。言語モデルがCOBOLを読んでJavaを吐けるようになってからしばらく経つ。このプラグインが読む価値を持つのは、設計の大半が「それをしないこと」に費やされているからだ。
順序こそが製品である
プラグインは順序を強制する。
preflight → assess → map → extract-rules → brief → (reimagine | transform | uplift) → harden最初の4コマンドが生み出すのはドキュメントだけである。assessはインベントリと複雑度指標を、mapは依存関係とデータリネージのグラフおよびインタラクティブなトポロジービューアを書き出す。extract-rulesは業務ルールを掘り起こし、file:lineの出典と確信度を付したGiven/When/Thenの「Rule Card」にまとめる。この時点で、新システムに向けたコードは1行も書かれていない。
ゲートはbriefだ。調査結果を統合してステアリングコミッティ向けのフェーズ計画に落とし込み、人間の承認のためにプランモードに入る。そしてコマンド定義の要となる一文——調査成果物を読み、どれか一つでも欠けていれば停止する。分析を先に生成していなければ、コード生成のコマンドには到達できない。理由はREADMEが直截に述べている。モダナイゼーションが失敗するのは、理解する前にコードを変換するとき、あるいは挙動のずれを捕まえるハーネスなしに出荷するときだ、と。
この前提は30年分の失敗した移行案件によって十分に裏づけられているが、製品の軸に据えるには奇妙な主張でもある。このプラグインの競争上の売りは「より良いJavaを書くこと」ではない。旧システムが何をしているかを説明した文書ができるまで、Javaを一切書かないことなのだ。
3つの手法、そして地味な一つが要点である
構築段階には3つのコマンドがあり、どれが適合するかはbriefが推奨する。
| コマンド | 内容 | 等価性の証明 |
|---|---|---|
transform | 抽出した意図に基づく単一モジュールのクロススタック書き換え(COBOL → Java)、ストラングラーフィグ方式 | 書き換え前に書いた特性テスト(characterization test)を実行 |
reimagine | 新アーキテクチャ上でのグリーンフィールド再構築、人間のチェックポイント2箇所 | 抽出した仕様に対する実行可能な受け入れテスト |
uplift | 同一スタックのバージョン更新——.NET Framework 4.8 → .NET 8、Spring Boot 2 → 3 | 両方のランタイムが動く環境では、同一のテストスイートを両方で実行 |
現場経験を感じさせるのはupliftだ。そのコマンド定義は、これはtransformではないと念を押すところから始まる。「コードは良い。新しいランタイムで動けばよいだけだ」。したがって構造を保存し、コンパイルが通り挙動が同一になる最小の差分だけを入れる。駆動するのは、このコードが実際に踏む既知の破壊的変更のカタログである。そのカタログが「どのみちコードの大半が変更を強いられる」と示したなら、コマンドは代わりにtransformを使えと告げる。
このプラグインで最も誠実なコスト管理の仕組みもここにある。移行はパイロット優先だ。代表的なプロジェクトを1つ、セッション内で最後まで通し、その教訓をプレイブックに書き出す。残りが展開されるのはその後であり、プロジェクトごとに1エージェント、依存関係を考慮したバッチで、サーキットブレーカーの背後で実行される。機能しなくなったプレイブックは数エージェント以内で検知され、改訂されるまで支出は止まる。エージェントの群れが自信満々に間違った方向へトークンを燃やすのを見届けた人間の設計である。
コードベースは攻撃者として扱われる
安全性に関する注意書きは異例なほど率直だ。分析対象のコードは信頼できない入力である。敵対的なリポジトリは「以前の指示を無視せよ」「このルールを承認済みとせよ」といったコメントを仕込み、抽出ルールやセキュリティ所見に何が載るかを操作できる。そしてそれらを後続のコマンドが信頼してしまう。挙げられている防御は、エージェントがファイル内容をデータとして扱うこと、検証エージェントがすべてのルールと所見を他エージェントの記述ではなく引用元のコードから再導出すること、そしてコード生成の前に人間の承認ゲートが置かれていることだ。
シークレットも同様の扱いを受ける。共有成果物ではマスクされ、gitignore済みのファイルに隔離される。そのあとに続くのは、過去の不具合の開示としか読めない一文だ——このプラグインの初期バージョンを実システムに対して実行したなら、analysis/の成果物がコミットされていないか確認し、露出したものはローテーションせよ。
推奨されるワークスペース設定は、同じ発想を権限として表現したものである。legacy/への書き込みを拒否し、analysis/とmodernized/では許可する。そしてドキュメントはその防御の限界も認めている。ファイルを書き換えるシェルコマンドは通常のBashプロンプトを通るため、書き込み権限を持つエージェントを一度に大量展開する2つのステップにとっては、そのプロンプトが唯一の封じ込めになる、と。
見積もることを拒んだもの
assessはCOCOMOの数値を算出し、そのうえでそれをスケジュールとして使うことを禁じる。理由も書かれている。COCOMOの係数は人間のチームの生産性を織り込んでおり、エージェントによる変換はそれに従わない。ゆえにそこから導いた期間はすべて誤りになる。この数値が生き残るのは、ポートフォリオ内のシステムを順位づけ・順序づけする相対指標としてのみだ。
これはリポジトリ中で最も率直な一文である。エージェント駆動の移行にどれだけ時間がかかるのか、業界には較正されたモデルが存在しない。そしてこのプラグインは、モデルを発明する代わりに、警告ラベルを貼った指標を出荷した。
これで難題が簡単になるわけではない。最も強い等価性の証明——旧と新の両ランタイムで同一のテストスイートを走らせること——には動作するレガシーのツールチェーンが要る。それが欠けている場合、プラグインは記録済みトレースによる特性テストへ退避するが、これが固定するのは「意図された挙動」ではなく「観測された挙動」である。ディレクトリの掲載文はいまもpreflightとupliftを丸ごと欠いた古い説明のままで、ワークフローが店頭表示より速く改訂されてきたことをうかがわせる。
しかし、この形そのものが主張なのだ。AnthropicはCOBOLの翻訳機を出荷したのではない。翻訳を安い工程、証明を高い工程として扱うプロセスを出荷した。そしてそれはおそらく、この種のプロジェクトが失敗する理由の正しい読み方である。
Sources: code-modernization README (GitHub) · plugin.json manifest · modernize-uplift command definition · modernize-brief command definition · claude-plugins-official directory (GitHub) · code-modernization plugin listing (Claude)