「動いているが誰も全体を把握していない」——保守を任されたCOBOLシステムでまさにこの状態に直面し、まず地図を作ることから始めるしかないと痛感しました。このシリーズはその時の試行錯誤がベースになっています。

COBOLを可視化する背景

COBOLコード可視化の全体フロー図

図1: COBOLコード可視化の全体フロー — DIVISION構造図・PARAGRAPHコールグラフ・実装抽出・Jarviz/JSONL出力

金融・保険・官公庁システムを中心に、今なお数百億行ものCOBOLコードが世界中で稼働しています。 これらのシステムは長年の改修を経て、元の設計者も去り、「動いているが誰も全体を把握していない」状態に陥りがちです。

モダナイゼーション(Javaへの移行・クラウドリフトなど)を進める際、最初の壁となるのが 「現行コードの構造理解」です。ソースを逐行読むだけでは全体像は見えません。 可視化ツールを活用して、まず依存関係の地図を作ることが出発点になります。

💡 本シリーズの対象読者

COBOLのソースが手元にあり、「どこで何を呼び出しているか」「どのプログラムが中心的な役割を担っているか」を把握したいエンジニア・アーキテクト向けです。COBOL自体の文法知識は基礎レベルで構いません。

COBOLプログラムの基本構造

COBOLプログラムは4つの Division で構成されます。 Javaのクラス構造に相当する「ひな型」を把握しておくことが可視化の前提となります。

IDENTIFICATION DIVISION
プログラム名・作成者・作成日など識別情報を記述。Javaのクラス宣言に相当。
ENVIRONMENT DIVISION
動作環境・ファイル割り当て(SELECT〜ASSIGN)を定義。I/O接続の入口。
DATA DIVISION
変数・ファイルレコード・共有領域(WORKING-STORAGE)を定義。Javaのフィールド宣言に相当。
PROCEDURE DIVISION
処理ロジックを記述。Paragraph(段落)の集合体で、PERFORMによる呼び出しが連鎖する。

可視化の主な対象は PROCEDURE DIVISION です。 ParagraphをJavaのメソッドと対応させると、Call Graphの概念をそのまま適用できます。 また、COPY句(外部コピーブックのインクルード)とCALL文(外部プログラム呼び出し)が プログラム間依存の核心です。

COBOL概念Java対応概念可視化での役割
Divisionクラスのセクションプログラム骨格の把握
Sectionクラス内グループParagraphの論理まとまり
ParagraphメソッドCall Graphのノード
PERFORM文メソッド呼び出しCall Graphのエッジ
CALL文外部クラス呼び出しプログラム間依存エッジ
COPY句import文コピーブック依存エッジ

3段階の可視化アプローチ

本シリーズでは以下の3段階で可視化を進めます。 各段階は独立して使えますが、順に進めることで「全体→構造→詳細」の理解が積み重なります。

① Division構造図 ② Paragraph Call Graph ③ Jarviz 3Dマップ
① Division構造図
プログラム内の4 Divisionとそこに含まれるSection・Paragraphの一覧図。COPY句・CALL依存も表示。プログラム単位の構造把握に使う。
② Paragraph Call Graph
PERFORMの呼び出し関係を有向グラフで表現。入口Paragraphから末端までの呼び出し連鎖を追う。影響範囲調査・デッドコード検出に使う。
③ Jarviz 3Dマップ
JSONL形式に変換したCall Graph情報をJarvizに読み込み、3Dの力線グラフで表示。複数プログラムを横断した全体俯瞰ができる。

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 02Division構造図4 Divisionの可視化・COPY句・CALL依存図
PART 03Paragraph Call GraphPERFORM解析・静的解析・限界と対策
PART 04実践:JSONL変換パーサー選定・抽出スクリプト・JSONL出力
PART 05Jarviz 3D可視化JSONLフォーマット詳解・Java版との差異
PART 06まとめ3段階整理表・モダナイゼーションへの展望

COBOL可視化でよくある誤り

COBOL構造の可視化プロジェクトは、ツール選定と解析範囲の設定を誤ると期待する成果が得られません。代表的な誤りを整理します。

誤り/失敗パターン何が起きるか正しい対処/防止策
最初からすべてを可視化しようとするDivision図・Call Graph・CRUD図を同時に作ろうとしてスコープが広がり、何も完成しないまずDivision構造図だけを完成させてフィードバックを得てから、Call Graph・CRUD図の順に段階的に拡張する
動的CALLも静的解析で完全に把握できると思うCALL identifierの動的呼び出しが依存グラフに含まれず、実際より疎な構造図になる静的解析の対象はCALL literalに限定し、動的CALLは「未解決」として図に明示してレビュー時に手動補完する
可視化を目的とせず成果物の活用方法を決めない図が完成しても「何のために使うか」が不明で、関係者への説明や移行計画への接続ができない可視化の目的(移行優先度の判定・影響調査・引き継ぎ資料)を最初に定義し、その目的に合った粒度と形式で可視化する