レガシーコードモダナイゼーションを支えるAI活用パース技術
レガシーモダナイゼーションのボトルネックはなぜパース作業なのか。COBOL・JCL・PL/Iなどメインフレーム世代の言語向けAST解析ツールが、コスト構造をどう変えるか解説します。
レガシーモダナイゼーションの本当のボトルネック
レガシーモダナイゼーションのプロジェクトは、いつも同じところから始まります。誰かが実際にコードを読まなければならない。それも斜め読みではなく、理解しなければなりません。1980年代に書かれたCOBOLプログラム、誰も触れていないJCLジョブ制御スクリプト、ドキュメントの一切ないPL/Iの業務ロジック、Accessデータベースに接続されたVB6フォーム。1行も書き換える前に、既存システムが実際に何をしているのかを把握する必要があります。
これがパース作業です。そして通常、プロジェクト全体の中で最も時間がかかり、最もミスが起きやすい工程です — 時間単価で稼働するコンサルタントが、自分のキャリアより古いコードを手作業で読み解いています。
汎用ツールでは対応しきれない理由
現代の静的解析ツールは、現代の言語向けに作られています。COBOLのコピーブック、CICSのトランザクション、REXXのExecファイルを渡すと、多くのツールはエラーを出すか、そのファイルを無視します。メインフレーム世代の言語には、独自の文法、独自のエンコーディングの癖、独自の実行モデル(バッチジョブ、画面ベースのトランザクション、固定カラムレイアウトなど)があり、JavaScriptやPythonのリンターが理解できる枠組みには収まりません。
このギャップを埋めるために開発したのがLegacy Dragonです。実際に世界のレガシー資産を動かしている言語 — COBOL、JCL、PL/I、VB6、VB.NET、PowerBuilder、アセンブリ、SQL/DB2、CICS、REXX — の10言語を1つのツールで解析します。
速度が変える「可能なこと」
1,200行のCOBOLプログラムは約6ミリ秒で解析できます。これは手作業レビューに対するわずかな改善ではなく、まったく別次元の作業です。パースがほぼ瞬時になると、次のようなことが可能になります。
- 数百のプログラムを抜粋確認するのではなく、コードベース全体を一度にパースする
- プロジェクト開始時に一度きりではなく、ソースが変わるたびに依存関係グラフを再生成する
- 印刷物をgrepするのではなく、「このパラグラフを呼び出しているのはどこか」をエンジニアが対話的に探索する
テキストではなく構造を見る
生のソースコードは、大規模になるほど理解が難しくなります。1つのCOBOLプログラムだけでも、数十のPERFORM呼び出し先、ネストした条件分岐、展開して初めて意味が分かるコピーブックのincludeが存在します。Legacy Dragonは解析したプログラムごとにインタラクティブなASTグラフを構築するため、コールグラフ全体を頭の中に保持する代わりに、制御フローとデータ依存関係を視覚的に追跡できます。
これは、「Javaに変換すればよい」だけでなく「40年前のバグをそのまま再実装しないために、実際に何をしているかを理解する」ことが目的のモダナイゼーションプロジェクトで、特に重要です。
エンコーディングは後回しにできない
日本国内でメインフレームシステムを扱ったことがある人なら、エンコーディングのバグがスプリントを丸ごと飲み込むことを知っています。固定長のCOBOLレコードにShift-JISやDBCS(2バイト文字セット)が混在し、EBCDICの数値・パック10進数フィールド特有の癖も加わります。ここを間違えてもエラーにはならず、静かにデータが破損します。Legacy DragonはShift-JIS、EBCDIC、DBCSのエンコーディングをネイティブに処理します。ディスク上の実際のバイト列を読めないパーサーは、本番環境では役に立たないからです。
デプロイは環境に合わせる必要がある
レガシーモダナイゼーションの作業は、閉域網や制限の多いメインフレーム隣接サーバーなど、ロックダウンされたインフラで行われることが多く、ランタイムのインストール自体がセキュリティ審査を伴う数週間がかりの作業になることもあります。だからこそLegacy Dragonはシングルバイナリとして配布されます。依存関係ツリーも、用意すべきランタイムも、セキュリティレビューと交渉が必要なパッケージマネージャーもありません。
これによって何ができるようになるか
これはビジネスロジックを理解しているエンジニアの判断力に取って代わるものではありません。取り除けるのは、どのプログラムがどのプログラムを呼び出しているか、どのフィールドがどこで読まれているか、あるファイルが実際にどのエンコーディングを使っているかを何週間もかけて手作業でマッピングする、単純作業の部分です。判断力は、固定カラムのCOBOLを手でパースすることではなく、本当に重要な意思決定に使うべきです。
理解してから初めてモダナイズできるレガシー資産を前にしているなら、それはまさにLegacy Dragonが縮小しようとしている問題です。
Legacy DragonはAityTechポートフォリオの一部です。dragon.aitytech.comで実際にご覧いただくか、具体的なコードベースについてご相談は[email protected]までお気軽にどうぞ。
実績を見る
MinuteAIからAgentKitsまで — 私たちが提供した製品とプロジェクトをご覧ください。
ポートフォリオを見る関連記事
AgentKits Memoryのハイブリッド検索は「日本語」を二度解決しなければならない
BM25は意味を取りこぼし、ベクトル検索は正確なエラー文字列を取りこぼす。AgentKits Memoryは両方を融合させているが、日本語・中国語・韓国語のクエリではキーワード検索側にもう一段の判断が必要になる。
ガイドCOBOLモダナイゼーションツールの多くは「プログラム」で止まっている。実際に移行が壊れるのは、それを呼び出す「バッチジョブ」の側だ。
COBOL中心の依存関係マッピングツールは、JCLを「ジョブ名といくつかのDD文」程度の薄いラッパーとして扱いがちだ。しかし条件コード分岐、PROCのネスト、GDGの世代管理は、それ自体が独立した制御フローを持っており、依存関係グラフから日常的に抜け落ちている。Legacy Dragonが、後付けのメタデータとしてではなく、JCLを同じASTの中の第一級言語としてパースしている理由。
ガイド322種の声、142言語、サーバーなし — ブラウザタブにそれだけの音声を収める方法
PrivateAIの音声合成ツールは322以上の声、142言語をすべてオンデバイスでカバーする。速度ではなく「声と言語のカバー範囲」こそがブラウザ型TTSの本当の難所である理由と、オープンソース勢・有料クラウドAPIとの比較。