「動いているが誰も全体を把握していない」——保守を任されたCOBOLシステムでまさにこの状態に直面し、まず地図を作ることから始めるしかないと痛感しました。このシリーズはその時の試行錯誤がベースになっています。
COBOLを可視化する背景
図1: COBOLコード可視化の全体フロー — DIVISION構造図・PARAGRAPHコールグラフ・実装抽出・Jarviz/JSONL出力
金融・保険・官公庁システムを中心に、今なお数百億行ものCOBOLコードが世界中で稼働しています。 これらのシステムは長年の改修を経て、元の設計者も去り、「動いているが誰も全体を把握していない」状態に陥りがちです。
モダナイゼーション(Javaへの移行・クラウドリフトなど)を進める際、最初の壁となるのが 「現行コードの構造理解」です。ソースを逐行読むだけでは全体像は見えません。 可視化ツールを活用して、まず依存関係の地図を作ることが出発点になります。
💡 本シリーズの対象読者
COBOLのソースが手元にあり、「どこで何を呼び出しているか」「どのプログラムが中心的な役割を担っているか」を把握したいエンジニア・アーキテクト向けです。COBOL自体の文法知識は基礎レベルで構いません。
COBOLプログラムの基本構造
COBOLプログラムは4つの Division で構成されます。 Javaのクラス構造に相当する「ひな型」を把握しておくことが可視化の前提となります。
可視化の主な対象は PROCEDURE DIVISION です。
ParagraphをJavaのメソッドと対応させると、Call Graphの概念をそのまま適用できます。
また、COPY句(外部コピーブックのインクルード)とCALL文(外部プログラム呼び出し)が
プログラム間依存の核心です。
| COBOL概念 | Java対応概念 | 可視化での役割 |
|---|---|---|
| Division | クラスのセクション | プログラム骨格の把握 |
| Section | クラス内グループ | Paragraphの論理まとまり |
| Paragraph | メソッド | Call Graphのノード |
| PERFORM文 | メソッド呼び出し | Call Graphのエッジ |
| CALL文 | 外部クラス呼び出し | プログラム間依存エッジ |
| COPY句 | import文 | コピーブック依存エッジ |
3段階の可視化アプローチ
本シリーズでは以下の3段階で可視化を進めます。 各段階は独立して使えますが、順に進めることで「全体→構造→詳細」の理解が積み重なります。
JavaシリーズとのJSONL共通化
本シリーズはJavaコード可視化シリーズの姉妹版です。 Jarvizが要求するJSONLフォーマット(6フィールド)はJava・COBOLを問いません。 「呼び出し元プログラム名」「呼び出し元Paragraph名」「呼び出し先プログラム名」「呼び出し先Paragraph名」の4情報をマッピングするだけで、 同じ3Dビューで表示できます。
これにより、JavaとCOBOLが混在する既存システム全体を1つのJSONLにまとめ、 言語をまたいだ依存関係を可視化することも可能です。
✅ JSONL共通フォーマットのメリット
言語依存のツールを使わずに済むため、COBOLパーサーが生成するデータとJavaのASM抽出データを同一のパイプラインで処理できます。PART 04・05 で詳述します。
シリーズ全体の構成
| 回 | タイトル | 内容 |
|---|---|---|
| PART 01 | はじめに(本記事) | シリーズ概要・COBOL構造とJava対応関係 |
| PART 02 | Division構造図 | 4 Divisionの可視化・COPY句・CALL依存図 |
| PART 03 | Paragraph Call Graph | PERFORM解析・静的解析・限界と対策 |
| PART 04 | 実践:JSONL変換 | パーサー選定・抽出スクリプト・JSONL出力 |
| PART 05 | Jarviz 3D可視化 | JSONLフォーマット詳解・Java版との差異 |
| PART 06 | まとめ | 3段階整理表・モダナイゼーションへの展望 |
COBOL可視化でよくある誤り
COBOL構造の可視化プロジェクトは、ツール選定と解析範囲の設定を誤ると期待する成果が得られません。代表的な誤りを整理します。
| 誤り/失敗パターン | 何が起きるか | 正しい対処/防止策 |
|---|---|---|
| 最初からすべてを可視化しようとする | Division図・Call Graph・CRUD図を同時に作ろうとしてスコープが広がり、何も完成しない | まずDivision構造図だけを完成させてフィードバックを得てから、Call Graph・CRUD図の順に段階的に拡張する |
| 動的CALLも静的解析で完全に把握できると思う | CALL identifierの動的呼び出しが依存グラフに含まれず、実際より疎な構造図になる | 静的解析の対象はCALL literalに限定し、動的CALLは「未解決」として図に明示してレビュー時に手動補完する |
| 可視化を目的とせず成果物の活用方法を決めない | 図が完成しても「何のために使うか」が不明で、関係者への説明や移行計画への接続ができない | 可視化の目的(移行優先度の判定・影響調査・引き継ぎ資料)を最初に定義し、その目的に合った粒度と形式で可視化する |