ブログ

AnthropicのCOBOL近代化プラグイン vs Codegiant

AnthropicのCOBOL近代化プラグインは、実際のCOBOLには耐えられません。62の要件でプラグインとCodegiantを比較し、その理由を示します。

公開日
読了時間
47分

AnthropicによるCOBOL近代化の構想は、製品が出る前から市場を動かしました。2026年2月23日、IBMの株価は13.2%下落し、2000年10月以来で最大の1日の下げ幅となりました。きっかけは、Claude CodeがCOBOL近代化の中心にある調査と分析を引き受け、数年ではなく数四半期でやり遂げられるとAnthropicが主張したことです。CrowdStrikeとDatadogも同じ日に下落しました。

この主張はその後、現実味を帯びてきました。Anthropicがcode-modernizationと呼ぶプラグインは、新しいコードが古いコードと同じ動作をすることの証明として文書化されており、COBOLからJavaへのライブデモを軸にしたウェビナーも公開されています。私たちはこのプラグインを実際のCOBOLに対して実行し、プラグインとCodegiantを62の要件で採点しました。

このプラグインはシステムを理解していると主張しますが、基本的なミスを犯します。コード量を誤って報告し、業務ルールを見落とし、夜間オペレーターが頼りにするメッセージを削除し、ジョブが触れていないレコードまで変更します。失敗したジョブを再実行すると、顧客に二重請求する可能性があります。

このプラグインは、自分で作った試験を自分で受けて合格してもいます。自分が書いていない問題でテストすると、答えが正しいことを証明できませんでした。

これが危険なギャップです。大きな音を立てて失敗するツールなら、失うのは週末だけです。しかし、動き続け、もっともらしい結果を出しながら静かにコードやデータを書き換えるツールは、顧客を失う原因になります。

以下では、調査結果の要約、テストの基準、2分で確認できる比較表、そしてすべてのポイントの根拠を示す詳細な分析を順に紹介します。

要約

  • カバレッジ。222のエージェントを使っても、正しく変換できたプログラムは1本もありませんでした。Codegiantは、すべてのプログラムを同じパイプラインと同じチェックで一度に処理します。
  • データモデル。変換されたプログラムごとに、レコードを読むための独自コードとテーブルの独自コピーが作られます。Codegiantはファイルごとに共通の定義を1つコンパイルします。
  • ディスカバリー。プラグインのインベントリーはAIが書いたもので、誤りがあります。VSAMファイルは11本なのに9本、実行時に拒否されたトランザクションは38件なのに13件としています。Codegiantはパーサーで数え、すべての事実を元の行に結び付けます。
  • ルールと計画。ルール抽出は、新しいルールを見つけている途中で上限に達して止まり、2つのルールは自ら書いたJavaと矛盾します。Codegiantはすべてのルールを、それが説明するコードに照らしてテストします。
  • データの忠実性。数値の扱い、空のバイト、コードページ、領域共有のレイアウト、未使用領域はいずれもメインフレームと食い違います。Codegiantはお客様自身のコンパイラーと実行時の設定から読み取ります。
  • バッチとJCL。再開ポイントも、ファイルの世代も、ステップ条件も、ファイルロックもなく、26件のオペレーターメッセージのうち14件が消えています。CodegiantはJCLをコンパイルするので、ジョブはメインフレームと同じように動きます。
  • 難しいプログラム。プラグインは、システム内で最も難しいプログラムを「翻訳できない」と述べ、メモから書き直す計画を立てました。Codegiantはそれを変換します。
  • 証明。プラグインの検証は、コードを書いたのと同じセッションで実行されました。自分で選んでいない入力を与えると、判定はNOT PROVENになりました。Codegiantの証明は変換から切り離されています。
  • アーキテクチャ。1つのAIセッションが計画を作業メモリーに保持して何度も自分自身を要約し、どのプログラムも、引き継ぎ先のプログラムに対してテストされません。Codegiantはすべての事実を保存し、各段階で読み直します。
  • 満たした要件。両製品を同じ62の要件で採点しました。ベンダー固有のランタイムなしでコードがコンパイルできるかどうかから、再実行で二重に転記されないかどうかまで含みます。プラグインが満たしたのは1つ、Codegiantは62すべてです。


テスト内容

AWS CardDemoのバッチ環境(78ファイル)で、Claude Code用のAnthropic code-modernizationプラグイン(バージョン1.0.0)を実行しました。パイロットには、ジョブPOSTTRANの夜間転記ステップであるCBTRN02Cを使いました。出力はすべて、COBOL、JCL、そしてプラグイン自身のファイルと照合して確認しています。

Anthropicのプラグインに対するCodegiantのスコア

Claude code-modernization

Codegiant

62のうち1

62のうち62 ✅

Anthropicのcode-modernization vs Codegiant:比較一覧

どちらも同じCOBOLを対象にしています。一方は、システムについての自分のメモをもとに作業し、そのメモからJavaを書きます。もう一方はコンパイルします。各ポイントをクリックすると詳細な比較に移動します。


Claude code-modernization

Codegiant

1. カバレッジ:どこまで変換できるか

2項目中0項目

2項目中2項目

変換できる範囲

222のAIエージェントを使っても、15本中1本のプログラムしか変換されませんでした。

システム内のすべてのプログラムが、同じパイプラインと同じチェックを通り、1回の実行で処理されます。

欠落を防ぐ

Javaはプログラムそのものではなく、プログラムの説明から書き直されるため、何が抜け落ちたのかを確認する方法がありません。プログラムのエラー報告ルーチンと7つのエラーチェックが消えましたが、何の警告もありませんでした。

読みやすいJavaと、COBOLのすべての行がJavaのどこかに反映されていることを証明する台帳を提供します。

2. データモデル:レコードとテーブル

2項目中0項目

2項目中2項目

レコードの読取り

メインフレームのレコードをJavaの値に変えるコードは、この1本のプログラム専用に手書きされています。次のプログラムとの共有は未完了の作業として残されています。

1つのコンパイラーが、同じレイアウトから、Javaレコード、その読取り・書込みコード、データベーステーブルを、すべてのプログラムについて生成します。相互に食い違うことはありません。

データベース設計

変換されたプログラムごとに、使用するテーブルの独自バージョンが作られます。

ファイルごとに1つのテーブル設計を一度だけ作り、バージョン管理します。

3. ディスカバリー:現状を把握する

5項目中0項目

5項目中5項目

構成要素を数える

AIがインベントリーを書き、誤りました。VSAMファイルは11本なのに9本、世代グループ(GDG)は7つなのに8つと数え、拒否トランザクションは実行時に38件だったのに13件と予測しました。

インベントリーはAIではなくパーサーから作られ、すべての事実が元のコード行を指します。推測ではなく集計です。

検証できる事実

プログラムについて述べる内容は、誰も検証できる形式で保存されていません。

プログラム内のすべてのステートメント、フィールド、パスが行番号付きで記録されます。この1本だけで339のステートメントと128のフィールドがあります。

共有レイアウト

システムのマップには、コピーブック(共有レコードレイアウト)がまったく含まれていません。

17本すべてのコピーブックと44か所の使用箇所がマップに載っています。レイアウトを変更すると、影響を受けるすべてのプログラムが分かります。

信頼できるマップ

システムのマップは自己矛盾しています。どのジョブも実行しないプログラムにファイルリンクを描き、トランザクションファイルを読むプログラムを、ある箇所では5本、別の箇所では7本としています。さらに、触れていないファイルを更新するプログラムがあるとしています。

マップ上のすべてのリンクはJCLまたはプログラムの実際の行に由来し、クリックしてその行を確認できます。

ジョブ間の引継ぎ

マップでは、各ジョブが読み書きするファイル世代と、前のステップが成功した場合にのみ動くステップが失われています。

世代とステップ条件を、すべてのジョブステップについて保持します。

4. ルールと計画

4項目中0項目

4項目中4項目

すべてのルールを見つける

ルール抽出は、まだ新しいルールを見つけている途中で、組込みの上限に達して停止しました。

各プログラムの証明済みの事実からルールを作成し、上限による打切りはありません。

コードと一致するルール

2つのルールは、実行開始時に毎回トランザクションファイルを消去するとしています。生成されたJavaは逆で、ファイルがすでに空でなければ開始を拒否します。

独立したチェッカーが、すべてのルールをそれが説明するコードと照合してテストします。不一致のルールは出荷されません。

特有の動作を保持する

読取りに失敗するとCOBOLが前のレコードで処理を続けることを発見して記録したのに、代わりに停止するJavaを作りました。

プログラムの出力から業務機能を逆向きに追跡するため、COBOLが通るすべてのパスが保持されます。

計画

移行計画は、AIがセッションについての自分の記憶から作成します。

保存されたシステムのマップから計画を算出するため、誰でも再生成して同じ結果を得られます。

5. データの忠実性:数値、バイト、レイアウト

9項目中0項目

9項目中9項目

変更されていないレコードをそのまま保つ

レコードの保存時に、プログラムが触れていないフィールドを含むすべてのフィールドを書き直し、符号の保存形式まで変えます。自身の検証でこれが証明されました。

プログラムが実際に変更したフィールドだけを書き戻します。それ以外はバイト単位で同じままです。

メインフレームの数値設定

お客様の環境設定に関係なく、数値の保存方法は1つに固定されています。

数値処理はお客様自身のコンパイラー設定に従います。

特殊な「空」のバイト

メインフレームのLOW-VALUESは、コードとデータベースでUnicodeのプレースホルダー文字に変えられます。

実際のバイトを保持し、実際に現れる列だけに生のバイトとして保存します。

文字と言語

米国向けEBCDIC用の手作り文字テーブルが1つだけです。

文字セットはお客様の設定から取得し、ユーロ記号や日本語の2バイト文字も含みます。

領域を共有するフィールド

プログラムは同じ2バイトを2通りに読んでVSAMエラーコードを表示します。その仕組みは削除されました。

領域を共有するすべてのレイアウト(REDEFINES)を、同じバイトに対する2つのビューとして保持します。

レコードの未使用領域

未使用領域の初期値は空白だと仮定しています。ノートPC上のテスト環境も同じ仮定なので、テストは自分自身と一致しました。

お客様の実行時設定から取得し、実際のレコードと照合します。

数値の桁数制限

メインフレームで桁あふれして循環するカウンターが、Javaでは循環しません。

すべての数値フィールドで、メインフレームの桁数制限と演算規則を保持します。

不正データの読込み

1件のレコードの1バイトが不正だと、どのレコードかを示さずにデータ読込み全体を停止します。

すべてのレコードを先に検証します。不正な値は安全に保存され、何もスキップせず、問題をフィールドごとに報告します。

ソート順

データベースはメインフレームの順序ではなく辞書順にキーを並べます。

キーはメインフレームとまったく同じ順序で並ぶため、キー順に読むプログラムは同じ順序で取得します。

6. バッチとJCL

11項目中0項目

11項目中11項目

失敗後の再開

データベーストランザクションで囲まず、再開機能もなく、トランザクションを1件ずつ書き込みます。再実行すると、転記済みの内容をもう一度転記します。

処理を再開ポイントとともにバッチで保存するため、再実行しても二重転記は起こりません。

ファイル世代

データベースには世代という概念がありません。

すべてのテーブルで世代を保持するため、今日と昨日のバージョンを共存させられます。

すべての種類のVSAMファイル

1種類(キー付きファイル)だけです。

キー付き、順次(ESDS)、相対レコード番号付き(RRDS)、可変長、代替索引のすべてに対応します。

プログラムが使用するファイル

JCLのファイル割当ては、1つのデータベースと2つのファイルパスになります。入力ミス1つで、テストと本番のデータを取り違えかねません。

JCLをコンパイルするため、すべてのファイル割当てはメインフレームと同じように機能します。

出力の世代

メインフレームが自動で番号を付けて5世代を保持する拒否レコードファイルは、オペレーターが入力するファイル名になります。

メインフレームと同様に、世代の採番、保持、古い世代の削除を自動で行います。

同時実行

同じ転記ジョブを同時に2回実行することを防ぐ仕組みがありません。自身のレビュアーもそう指摘しています。

メインフレームと同じ方法でファイルをロックし、同じジョブを二重に実行できません。

ジョブ内のステップ

ジョブは1つのJavaアプリケーションになり、「前のステップが失敗したらこのステップをスキップする」といったルールは消えます。

すべてのステップを保持し、戻りコードで次の実行を決定します。ユーティリティーステップ(IDCAMS、SORT)も実行します。

ステップ後のファイル処理

プログラムが自分で出力ファイルの名前を変更します。

メインフレームと同様に、各ステップの終了時にジョブがファイルを保持、カタログ登録、または削除します。

ファイルエラー

3つのファイルがオープンに失敗した場合や4つがクローズに失敗した場合の処理がなく、1つのクローズはまったくチェックされません。

すべてのファイル操作で、COBOLがチェックするものと同じIBMステータスコードを返します。

夜間オペレーターへのメッセージ

26件のメッセージのうち14件が消えています。どのエラーが発生したかや、プログラムの停止を伝えるメッセージも含まれます。

すべてのメッセージを一字一句そのまま保持します。1つでも欠けるとビルドを停止します。

スケジューラーから見た障害

メインフレームの異常終了コード(U0999)が終了コード16になり、スケジューラーのルールでは認識されません。

スケジューラーには、従来と同じ異常終了コードが返されます。

7. 難しいプログラム、レイアウト、動作の正確性

7項目中0項目

7項目中7項目

存在しない動作の追加

COBOLでは起こり得ない異常終了、COBOLにはないチェック、COBOLが出さない警告、新しいメッセージ文を追加しました。

Javaの中でCOBOLに対応する元がないものは、自動で検出されます。Claudeはこれをまったくチェックしません。

特異な動作もそのまま保持

COBOLが特定のエラーの後も処理を続ける箇所で、Javaは停止します。

特異な部分も含めて同じ動作を保持します。それが「同じ」という意味だからです。

コンパイラー設定

プログラムがどの設定でコンパイルされたかを尋ねません。5つの初期設定質問のどれにも含まれず、IBMの既定値を仮定します。

同じコードの動作を変えるため、コンパイルリストと実行時設定(16項目)を読み取ります。

コード外の要素

システム外から来るファイルに気付いたのに、それについて質問しませんでした。

ソース外からプログラムの動作に影響する125の要素を考慮します。ファイルカタログ、データ、サイト設定、スケジューラー、メインフレームサービスです。

最も難しいプログラム

あるプログラムは実行中に制御フローを変更し(ALTER)、メインフレームのジョブテーブルを直接読みます。Claudeは「変換できない」と述べ、代わりにルールから書き直す計画を立てました。

それを変換します。ジャンプを再構成し、読み取るジョブ情報は実際の実行から提供します。

複雑なレコードレイアウト

可変サイズのテーブル(OCCURS DEPENDING ON)と境界合わせしたフィールド(SYNC)には、まったく言及していません。

すべてのレイアウトでIBMの規則に従い、すべてのフィールドをメインフレームと同じ位置に置きます。

テストで実行できないプログラム

15本のうち4本はノートPCのCOBOL環境でコンパイルできず、比較自体ができません。

すべてのプログラムを処理し、メインフレームの動作はノートPCのコンパイラーではなくIBMの規則から取得します。

8. 証明:何を何と照合するか

7項目中0項目

7項目中7項目

比較対象

出力ファイルとジョブログの3行だけです。ログ全体は保存されましたが、比較されませんでした。

すべての出力ファイル、戻りコード、ファイルステータス、ログ行を比較します。

照合の基準

ノートPC上のオープンソースCOBOLで、メインフレームの異常終了ルーチンは代替実装です。

お客様のメインフレームで実際に記録した実行結果です。

テストデータ

最大のバグを検出できないサンプルデータと、自分で選んだテストケースです。不正データのテストでは、バグが起こる前に拒否されるレコードにしか当たりませんでした。

各フィールドの限界値とお客様の実データからテストデータを作り、ファイルの欠落やロックも含めます。

作業の検証者

自身のレポートによると、検証はコードを書いたのと同じセッションで実行されました。

証明は変換から完全に独立しています。

判定

最初は「20件中20件が同一」と報告しました。新しい入力を与えると、自身の判定はNOT PROVENになりました。

すべての入力を対象に1つの判定を出し、証明できないものは出荷しません。

金額とテストの強さ

2つの件数の一致は確認しますが、金額は確認しません。テストが気付くかを確認するために意図的にコードを壊すのも2回だけです。

ファイル別・口座別の件数と金額合計を確認し、すべての条件を意図的に壊してテストします。

変更の承認者

元のコードからの変更は、名前なしで「承認済み」とされています。あるスキーマの選択は、AIが自身の計画に反して行いました。

すべての変更に、実名の承認者、日付、根拠があります。

9. 規模、決定性、お客様のデータ

2項目中0項目

2項目中2項目

実際の銀行への適用

自身の数値に基づくと、大手銀行では150以上の別々の実行で約155,000から215,000のAIエージェントが必要になり、結果は手作業で統合することになります。

コードを小さな単位に分割するまではAIを使わず、規模の上限はありません。

繰り返しても同じ結果

自身のREADMEは、同じコマンドを再実行すると異なる結果になり得ると述べています。

毎回まったく同じ結果になります。

10. アーキテクチャ:記憶と引継ぎ

5項目中0項目

5項目中5項目

部分ごとに見る補助エージェント

分析は97の補助エージェントに分けられ、それぞれが一部分を読み、要約を返しました。部分間のリンクは、要約にたまたま言及された場合にしか残りません。その結果、最終マップではすべてのコピーブックが失われ、トランザクションファイルを読むプログラムの数も誤りました。

プログラム間のリンクはパーサーとJCLコンパイラーから取得し、システム全体を一度に扱います。途中に要約は介在しません。

変換後にプログラム間の関係が失われる

各プログラムは個別に変換され、レコード読取りコードとテーブルのコピーもそれぞれ独自に持ちます。次のプログラムが知るべき内容は、テキストファイルに未完了の作業メモとして書かれます。

ファイルごとに1つの共有定義を持ち、それにアクセスするすべてのプログラムが使用します。読み手のプログラムが、書き手と異なる方法でレコードを読むことはできません。

プログラム間の引継ぎが検証されない

各プログラムは、自分で作ったテストデータを使い、自身のCOBOLと照合して証明されます。転記プログラムの出力が翌晩に利息計算プログラムが読む内容と完全に一致するかは誰も検証しません。トランザクションファイルを読むプログラムは7本あります。

ジョブチェーン全体を最初から最後まで証明の中で実行し(バックアップ、転記、利息計算、統合の順)、すべての引継ぎを比較します。

相互に呼び出すプログラム

呼び出されるプログラムと受け渡すデータは、一緒に変換されません。今回の実行では、明細プログラムと、それが呼び出すプログラムは、どちらもまったく変換されませんでした。

呼び出されるプログラム、相互に受け渡すデータ、共有記憶域を1つの単位としてコンパイルします。

限られた記憶を持つ1つの頭脳

1つのAIセッションが移行全体を実行し、計画を作業メモリーに保持します。この小さなシステムですら、分析ファイルを読み直さずに、その記憶から計画が書かれました。銀行のシステムは数千倍大きいため、セッションは何度も自分自身を要約する必要があり、後の判断は要約の要約に基づいて行われます。

重要な情報はAIの記憶に置きません。すべての事実、判断、リンクを保存し、各段階で読み直します。

11. プラットフォーム

8項目中1項目

8項目中8項目

ワンクリックデプロイ

どこにもワンクリックでデプロイしません。変換は、フォルダー内にJavaができた時点で終わります。

AWS、Google Cloud、Azure、Oracle Cloud、DigitalOcean、Cloudflare、Fly.io、オンプレミス、またはお客様が運用するあらゆるKubernetes基盤にワンクリックでデプロイします。

データベース

データは変換時に選ばれたデータベースに置かれ、変換された各プログラムがテーブルの独自コピーを持ちます。

テーブルはお客様自身のマネージドデータベースに配置され、アプリと一緒にデプロイされます。

DevSecOps

プラグインはフォルダー内のJavaを渡すだけで、残りは自分で組み立てます。

ツールチェーン全体が含まれ、組み立てる必要はありません。

本番稼働後

コードを変換した時点で提供範囲は終わります。

AI運用アシスタントが24時間体制でシステムを監視し、インシデントを修復してコストを最適化します

連携

MCPとコネクターを通じて、すでに使っているツールを業務に取り込めます。Google Drive、Gmail、Slack、Microsoft 365、Notion、Figma、HubSpotなどです。

Codegiant独自のLLMであるKronos Automateは3,000以上のサービスと連携し、モダナイゼーション後の環境の上に自動化やワークフローを構築できます。モダナイズされた各アプリに専用の自動化テナントが用意されます。

構築

なし。

変換後のコード上に新しいアプリ、エージェント、ワークフローを構築でき、アプリビルダー、ワークフロービルダー、自動化エンジンが含まれます。

ガバナンス

なし。

ロールおよび属性ベースのアクセス制御、監査証跡、ポリシーの適用です。

専用設計モデル

実行できるのはClaudeだけで、ソースコードはAIプロバイダーに送信され、使用状況の報告は既定で有効です。

Kronosモデルは、メインフレームのモダナイゼーションと自動化に特化して設計されており、安全性を高めるためにお客様の管理境界内でセルフホストできます。

1. カバレッジ:どこまで変換できるか

変換できる範囲

Claude code-modernization: 222のAIエージェントを使っても、15本中1本のプログラムしか変換されませんでした。


Codegiant: システム内のすべてのプログラムが、同じパイプラインと同じチェックを通り、1回の実行で処理されます。

欠落を防ぐ

Claude code-modernization: Javaはプログラムそのものではなく、プログラムの説明から書き直されるため、何が抜け落ちたのかを確認する方法がありません。プログラムのエラー報告ルーチンと7つのエラーチェックが消えましたが、何の警告もありませんでした。


Codegiant: 読みやすいJavaと、COBOLのすべての行がJavaのどこかに反映されていることを証明する台帳を提供します。

2. データモデル:レコードとテーブル

レコードの読取り

Claude code-modernization: メインフレームのレコードをJavaの値に変えるコードは、この1本のプログラム専用に手書きされています。次のプログラムとの共有は未完了の作業として残されています。


Codegiant: 1つのコンパイラーが、同じレイアウトから、Javaレコード、その読取り・書込みコード、データベーステーブルを、すべてのプログラムについて生成します。相互に食い違うことはありません。

データベース設計

Claude code-modernization: 変換されたプログラムごとに、使用するテーブルの独自バージョンが作られます。


Codegiant: ファイルごとに1つのテーブル設計を一度だけ作り、バージョン管理します。

3. ディスカバリー:現状を把握する

構成要素を数える

Claude code-modernization: AIがインベントリーを書き、誤りました。VSAMファイルは11本なのに9本、世代グループ(GDG)は7つなのに8つと数え、拒否トランザクションは実行時に38件だったのに13件と予測しました。


Codegiant: インベントリーはAIではなくパーサーから作られ、すべての事実が元のコード行を指します。推測ではなく集計です。

検証できる事実

Claude code-modernization: プログラムについて述べる内容は、誰も検証できる形式で保存されていません。


Codegiant: プログラム内のすべてのステートメント、フィールド、パスが行番号付きで記録されます。この1本だけで339のステートメントと128のフィールドがあります。

共有レイアウト

Claude code-modernization: システムのマップには、コピーブック(共有レコードレイアウト)がまったく含まれていません。


Codegiant: 17本すべてのコピーブックと44か所の使用箇所がマップに載っています。レイアウトを変更すると、影響を受けるすべてのプログラムが分かります。

信頼できるマップ

Claude code-modernization: システムのマップは自己矛盾しています。どのジョブも実行しないプログラムにファイルリンクを描き、トランザクションファイルを読むプログラムを、ある箇所では5本、別の箇所では7本としています。さらに、触れていないファイルを更新するプログラムがあるとしています。


Codegiant: マップ上のすべてのリンクはJCLまたはプログラムの実際の行に由来し、クリックしてその行を確認できます。

ジョブ間の引継ぎ

Claude code-modernization: マップでは、各ジョブが読み書きするファイル世代と、前のステップが成功した場合にのみ動くステップが失われています。


Codegiant: 世代とステップ条件を、すべてのジョブステップについて保持します。

4. ルールと計画

すべてのルールを見つける

Claude code-modernization: ルール抽出は、まだ新しいルールを見つけている途中で、組込みの上限に達して停止しました。


Codegiant: 各プログラムの証明済みの事実からルールを作成し、上限による打切りはありません。

コードと一致するルール

Claude code-modernization: 2つのルールは、実行開始時に毎回トランザクションファイルを消去するとしています。生成されたJavaは逆で、ファイルがすでに空でなければ開始を拒否します。


Codegiant: 独立したチェッカーが、すべてのルールをそれが説明するコードと照合してテストします。不一致のルールは出荷されません。

特有の動作を保持する

Claude code-modernization: 読取りに失敗するとCOBOLが前のレコードで処理を続けることを発見して記録したのに、代わりに停止するJavaを作りました。


Codegiant: プログラムの出力から業務機能を逆向きに追跡するため、COBOLが通るすべてのパスが保持されます。

計画

Claude code-modernization: 移行計画は、AIがセッションについての自分の記憶から作成します。


Codegiant: 保存されたシステムのマップから計画を算出するため、誰でも再生成して同じ結果を得られます。

5. データの忠実性:数値、バイト、レイアウト

変更されていないレコードをそのまま保つ

Claude code-modernization: レコードの保存時に、プログラムが触れていないフィールドを含むすべてのフィールドを書き直し、符号の保存形式まで変えます。自身の検証でこれが証明されました。


Codegiant: プログラムが実際に変更したフィールドだけを書き戻します。それ以外はバイト単位で同じままです。

メインフレームの数値設定

Claude code-modernization: お客様の環境設定に関係なく、数値の保存方法は1つに固定されています。


Codegiant: 数値処理はお客様自身のコンパイラー設定に従います。

特殊な「空」のバイト

Claude code-modernization: メインフレームのLOW-VALUESは、コードとデータベースでUnicodeのプレースホルダー文字に変えられます。


Codegiant: 実際のバイトを保持し、実際に現れる列だけに生のバイトとして保存します。

文字と言語

Claude code-modernization: 米国向けEBCDIC用の手作り文字テーブルが1つだけです。


Codegiant: 文字セットはお客様の設定から取得し、ユーロ記号や日本語の2バイト文字も含みます。

領域を共有するフィールド

Claude code-modernization: プログラムは同じ2バイトを2通りに読んでVSAMエラーコードを表示します。その仕組みは削除されました。


Codegiant: 領域を共有するすべてのレイアウト(REDEFINES)を、同じバイトに対する2つのビューとして保持します。

レコードの未使用領域

Claude code-modernization: 未使用領域の初期値は空白だと仮定しています。ノートPC上のテスト環境も同じ仮定なので、テストは自分自身と一致しました。


Codegiant: お客様の実行時設定から取得し、実際のレコードと照合します。

数値の桁数制限

Claude code-modernization: メインフレームで桁あふれして循環するカウンターが、Javaでは循環しません。


Codegiant: すべての数値フィールドで、メインフレームの桁数制限と演算規則を保持します。

不正データの読込み

Claude code-modernization: 1件のレコードの1バイトが不正だと、どのレコードかを示さずにデータ読込み全体を停止します。


Codegiant: すべてのレコードを先に検証します。不正な値は安全に保存され、何もスキップせず、問題をフィールドごとに報告します。

ソート順

Claude code-modernization: データベースはメインフレームの順序ではなく辞書順にキーを並べます。


Codegiant: キーはメインフレームとまったく同じ順序で並ぶため、キー順に読むプログラムは同じ順序で取得します。

6. バッチとJCL

失敗後の再開

Claude code-modernization: データベーストランザクションで囲まず、再開機能もなく、トランザクションを1件ずつ書き込みます。再実行すると、転記済みの内容をもう一度転記します。


Codegiant: 処理を再開ポイントとともにバッチで保存するため、再実行しても二重転記は起こりません。

ファイル世代

Claude code-modernization: データベースには世代という概念がありません。


Codegiant: すべてのテーブルで世代を保持するため、今日と昨日のバージョンを共存させられます。

すべての種類のVSAMファイル

Claude code-modernization: 1種類(キー付きファイル)だけです。


Codegiant: キー付き、順次(ESDS)、相対レコード番号付き(RRDS)、可変長、代替索引のすべてに対応します。

プログラムが使用するファイル

Claude code-modernization: JCLのファイル割当ては、1つのデータベースと2つのファイルパスになります。入力ミス1つで、テストと本番のデータを取り違えかねません。


Codegiant: JCLをコンパイルするため、すべてのファイル割当てはメインフレームと同じように機能します。

出力の世代

Claude code-modernization: メインフレームが自動で番号を付けて5世代を保持する拒否レコードファイルは、オペレーターが入力するファイル名になります。


Codegiant: メインフレームと同様に、世代の採番、保持、古い世代の削除を自動で行います。

同時実行

Claude code-modernization: 同じ転記ジョブを同時に2回実行することを防ぐ仕組みがありません。自身のレビュアーもそう指摘しています。


Codegiant: メインフレームと同じ方法でファイルをロックし、同じジョブを二重に実行できません。

ジョブ内のステップ

Claude code-modernization: ジョブは1つのJavaアプリケーションになり、「前のステップが失敗したらこのステップをスキップする」といったルールは消えます。


Codegiant: すべてのステップを保持し、戻りコードで次の実行を決定します。ユーティリティーステップ(IDCAMS、SORT)も実行します。

ステップ後のファイル処理

Claude code-modernization: プログラムが自分で出力ファイルの名前を変更します。


Codegiant: メインフレームと同様に、各ステップの終了時にジョブがファイルを保持、カタログ登録、または削除します。

ファイルエラー

Claude code-modernization: 3つのファイルがオープンに失敗した場合や4つがクローズに失敗した場合の処理がなく、1つのクローズはまったくチェックされません。


Codegiant: すべてのファイル操作で、COBOLがチェックするものと同じIBMステータスコードを返します。

夜間オペレーターへのメッセージ

Claude code-modernization: 26件のメッセージのうち14件が消えています。どのエラーが発生したかや、プログラムの停止を伝えるメッセージも含まれます。


Codegiant: すべてのメッセージを一字一句そのまま保持します。1つでも欠けるとビルドを停止します。

スケジューラーから見た障害

Claude code-modernization: メインフレームの異常終了コード(U0999)が終了コード16になり、スケジューラーのルールでは認識されません。


Codegiant: スケジューラーには、従来と同じ異常終了コードが返されます。

7. 難しいプログラム、レイアウト、動作の正確性

存在しない動作の追加

Claude code-modernization: COBOLでは起こり得ない異常終了、COBOLにはないチェック、COBOLが出さない警告、新しいメッセージ文を追加しました。


Codegiant: Javaの中でCOBOLに対応する元がないものは、自動で検出されます。Claudeはこれをまったくチェックしません。

特異な動作もそのまま保持

Claude code-modernization: COBOLが特定のエラーの後も処理を続ける箇所で、Javaは停止します。


Codegiant: 特異な部分も含めて同じ動作を保持します。それが「同じ」という意味だからです。

コンパイラー設定

Claude code-modernization: プログラムがどの設定でコンパイルされたかを尋ねません。5つの初期設定質問のどれにも含まれず、IBMの既定値を仮定します。


Codegiant: 同じコードの動作を変えるため、コンパイルリストと実行時設定(16項目)を読み取ります。

コード外の要素

Claude code-modernization: システム外から来るファイルに気付いたのに、それについて質問しませんでした。


Codegiant: ソース外からプログラムの動作に影響する125の要素を考慮します。ファイルカタログ、データ、サイト設定、スケジューラー、メインフレームサービスです。

最も難しいプログラム

Claude code-modernization: あるプログラムは実行中に制御フローを変更し(ALTER)、メインフレームのジョブテーブルを直接読みます。Claudeは「変換できない」と述べ、代わりにルールから書き直す計画を立てました。


Codegiant: それを変換します。ジャンプを再構成し、読み取るジョブ情報は実際の実行から提供します。

複雑なレコードレイアウト

Claude code-modernization: 可変サイズのテーブル(OCCURS DEPENDING ON)と境界合わせしたフィールド(SYNC)には、まったく言及していません。


Codegiant: すべてのレイアウトでIBMの規則に従い、すべてのフィールドをメインフレームと同じ位置に置きます。

テストで実行できないプログラム

Claude code-modernization: 15本のうち4本はノートPCのCOBOL環境でコンパイルできず、比較自体ができません。


Codegiant: すべてのプログラムを処理し、メインフレームの動作はノートPCのコンパイラーではなくIBMの規則から取得します。

8. 証明:何を何と照合するか

比較対象

Claude code-modernization: 出力ファイルとジョブログの3行だけです。ログ全体は保存されましたが、比較されませんでした。


Codegiant: すべての出力ファイル、戻りコード、ファイルステータス、ログ行を比較します。

照合の基準

Claude code-modernization: ノートPC上のオープンソースCOBOLで、メインフレームの異常終了ルーチンは代替実装です。


Codegiant: お客様のメインフレームで実際に記録した実行結果です。

テストデータ

Claude code-modernization: 最大のバグを検出できないサンプルデータと、自分で選んだテストケースです。不正データのテストでは、バグが起こる前に拒否されるレコードにしか当たりませんでした。


Codegiant: 各フィールドの限界値とお客様の実データからテストデータを作り、ファイルの欠落やロックも含めます。

作業の検証者

Claude code-modernization: 自身のレポートによると、検証はコードを書いたのと同じセッションで実行されました。


Codegiant: 証明は変換から完全に独立しています。

判定

Claude code-modernization: 最初は「20件中20件が同一」と報告しました。新しい入力を与えると、自身の判定はNOT PROVENになりました。


Codegiant: すべての入力を対象に1つの判定を出し、証明できないものは出荷しません。

金額とテストの強さ

Claude code-modernization: 2つの件数の一致は確認しますが、金額は確認しません。テストが気付くかを確認するために意図的にコードを壊すのも2回だけです。


Codegiant: ファイル別・口座別の件数と金額合計を確認し、すべての条件を意図的に壊してテストします。

変更の承認者

Claude code-modernization: 元のコードからの変更は、名前なしで「承認済み」とされています。あるスキーマの選択は、AIが自身の計画に反して行いました。


Codegiant: すべての変更に、実名の承認者、日付、根拠があります。

9. 規模、決定性、お客様のデータ

実際の銀行への適用

Claude code-modernization: 自身の数値に基づくと、大手銀行では150以上の別々の実行で約155,000から215,000のAIエージェントが必要になり、結果は手作業で統合することになります。


Codegiant: コードを小さな単位に分割するまではAIを使わず、規模の上限はありません。

繰り返しても同じ結果

Claude code-modernization: 自身のREADMEは、同じコマンドを再実行すると異なる結果になり得ると述べています。


Codegiant: 毎回まったく同じ結果になります。

10. アーキテクチャ:記憶と引継ぎ

部分ごとに見る補助エージェント

Claude code-modernization: 分析は97の補助エージェントに分けられ、それぞれが一部分を読み、要約を返しました。部分間のリンクは、要約にたまたま言及された場合にしか残りません。その結果、最終マップではすべてのコピーブックが失われ、トランザクションファイルを読むプログラムの数も誤りました。


Codegiant: プログラム間のリンクはパーサーとJCLコンパイラーから取得し、システム全体を一度に扱います。途中に要約は介在しません。

変換後にプログラム間の関係が失われる

Claude code-modernization: 各プログラムは個別に変換され、レコード読取りコードとテーブルのコピーもそれぞれ独自に持ちます。次のプログラムが知るべき内容は、テキストファイルに未完了の作業メモとして書かれます。


Codegiant: ファイルごとに1つの共有定義を持ち、それにアクセスするすべてのプログラムが使用します。読み手のプログラムが、書き手と異なる方法でレコードを読むことはできません。

プログラム間の引継ぎが検証されない

Claude code-modernization: 各プログラムは、自分で作ったテストデータを使い、自身のCOBOLと照合して証明されます。転記プログラムの出力が翌晩に利息計算プログラムが読む内容と完全に一致するかは誰も検証しません。トランザクションファイルを読むプログラムは7本あります。


Codegiant: ジョブチェーン全体を最初から最後まで証明の中で実行し(バックアップ、転記、利息計算、統合の順)、すべての引継ぎを比較します。

相互に呼び出すプログラム

Claude code-modernization: 呼び出されるプログラムと受け渡すデータは、一緒に変換されません。今回の実行では、明細プログラムと、それが呼び出すプログラムは、どちらもまったく変換されませんでした。


Codegiant: 呼び出されるプログラム、相互に受け渡すデータ、共有記憶域を1つの単位としてコンパイルします。

限られた記憶を持つ1つの頭脳

Claude code-modernization: 1つのAIセッションが移行全体を実行し、計画を作業メモリーに保持します。この小さなシステムですら、分析ファイルを読み直さずに、その記憶から計画が書かれました。銀行のシステムは数千倍大きいため、セッションは何度も自分自身を要約する必要があり、後の判断は要約の要約に基づいて行われます。


Codegiant: 重要な情報はAIの記憶に置きません。すべての事実、判断、リンクを保存し、各段階で読み直します。

11. プラットフォーム

ワンクリックデプロイ

Claude code-modernization: どこにもワンクリックでデプロイしません。変換は、フォルダー内にJavaができた時点で終わります。


Codegiant: AWS、Google Cloud、Azure、Oracle Cloud、DigitalOcean、Cloudflare、Fly.io、オンプレミス、またはお客様が運用するあらゆるKubernetes基盤にワンクリックでデプロイします。

データベース

Claude code-modernization: データは変換時に選ばれたデータベースに置かれ、変換された各プログラムがテーブルの独自コピーを持ちます。


Codegiant: PostgreSQLのテーブルはお客様自身のマネージドデータベースに配置され、アプリと一緒にデプロイされます。

DevSecOps

Claude code-modernization: プラグインはフォルダー内のJavaを渡すだけで、残りは自分で組み立てます。


Codegiant: 組み立て不要の独自ツールチェーンを備えています。Git、CI/CD、Terraform、オブザーバビリティー、エラー監視とパフォーマンス監視、稼働監視、ステータスページ、ドキュメント、コードレビューが含まれます。

本番稼働後

Claude code-modernization: コードを変換した時点で提供範囲は終わります。


Codegiant: AI SRE、24時間365日。稼働中のシステムを監視し、インシデントを修復し、コストとスケーリングを最適化し、セキュリティードリフトを検出して、ランブックを最新の状態に保ちます。

連携

Claude code-modernization: MCPとコネクターを通じて、すでに使っているツールを業務に取り込めます。Google Drive、Gmail、Slack、Microsoft 365、Notion、Figma、HubSpotなどです。


Codegiant: Codegiant独自のLLMであるKronos Automateは3,000以上のサービスと連携し、モダナイゼーション後の環境の上に自動化やワークフローを構築できます。モダナイズされた各アプリに専用の自動化テナントが用意され、月に数億件のイベントを処理できるエンタープライズ級のエンジンが稼働します。

構築

Claude code-modernization: なし。


Codegiant: 変換後のコード上に新しいアプリ、エージェント、ワークフローを構築できます。アプリビルダー、エージェント向けワークフロービルダー、自動化エンジンはすべて含まれ、アドオンも後付けも不要です。

ガバナンス

Claude code-modernization: なし。


Codegiant: ロールおよび属性ベースのアクセス制御、監査証跡、ポリシーの適用を、全体にわたって提供します。

専用設計モデル

Claude code-modernization: 実行できるのはClaudeだけで、ソースコードはAIプロバイダーに送信され、使用状況の報告は既定で有効です。


Codegiant: Kronosモデルは、メインフレームのモダナイゼーションと自動化に特化して設計されており、安全性を高めるためにお客様の管理境界内でセルフホストできます。

結論

Claude code-modernizationは、本番COBOLを任せられるツールではありません。メインフレームをJavaに置き換えるわけではなく、Javaの入ったフォルダーと、システムの動作について自分が理解した内容の要約を渡します。そして、その要約は誤っています。インベントリーはファイル数を誤り、マップは自己矛盾し、ルールは自ら書いたコードと矛盾し、動作すると判断した試験は自分で採点したものです。失敗は表面に現れません。コードはコンパイルできてジョブは動く一方で、レコードが変わり、再実行で顧客に二重請求します。規模にも対応できません。私たちのテストに基づくと、実際の本番コードベースでは途方もない数のエージェントが必要になり、結果を手作業で統合しなければなりません。CardDemoのテストでは、上の比較にある62のチェックのうち1つしか満たしませんでした。それはコネクターでした。

Codegiantはすべてのプログラムを1つのパイプラインで処理し、お客様のメインフレームの記録済み実行結果と照合して証明します。そして、お客様自身のデータベース上で動き、お客様のクラウドにデプロイできるJavaを提供します。違いは、ノートPCでコンパイルできるデモと、夜間オペレーターが実際に運用できるシステムの違いです。

関連記事


CodegiantのエンタープライズAIプラットフォームを今すぐお試しください

Codegiantは、エンタープライズAIプラットフォームです。コードを完全に管理できます。変換で生成されたものはお客様の所有物です。ベンダーのランタイム、独自バイナリー、その下で動くエンジンはありません。コードを読み、変更し、好きな場所で実行できます。

後から何かを組み込む必要はありません。DevSecOpsツールチェーン、CI/CD、Terraform、オブザーバビリティー、稼働監視、AI SREが変換に含まれ、完成したアプリはAWS、Google Cloud、Azure、Oracle Cloud、DigitalOcean、Cloudflare、Fly.io、オンプレミス、またはお客様が運用するあらゆるKubernetes基盤にワンクリックでデプロイされます。

私たち独自のLLMであるKronos Automateは、モダナイズされたシステムを3,000以上のサービスと連携させ、その上に自動化やワークフローを構築できます。モダナイズされた各アプリには専用の自動化テナントが用意され、月に数億件のイベントを処理できるエンタープライズ級エンジンが稼働します。厳格なモダナイゼーション要件が実際に求めるのはこれであり、多くのプラットフォームが提供しきれていない部分です。お客様のポリシーが認めるすべての移行先、手元にあるツールチェーン全体、そして次のプロジェクトに持ち越すバイナリーもランタイムもロックインもないことです。

今日から構築を始めましょう。

エンタープライズグレードのAIと数千のコネクターの力を活用し、次に必要なものを構築できます。