COBOLを可視化する背景

金融・保険・官公庁システムを中心に、今なお数百億行もの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段階整理表・モダナイゼーションへの展望