Jarvizのセットアップ
Jarvizはブラウザで動作するWebアプリです。Node.jsが必要です。 Javaシリーズ(PART 05)のセットアップと同一手順なので、 すでにセットアップ済みの場合はスキップしてください。
# Node.js 18以上が必要
node --version
# jarviz-graph をクローン
git clone https://github.com/ExpediaGroup/jarviz.git
cd jarviz/jarviz-graph
# 依存パッケージをインストール
npm install
# 開発サーバーを起動
npm start
# → http://localhost:3000 でブラウザが開く
JSONLの読み込み手順
- ブラウザで
http://localhost:3000を開く - 「Upload JSONL」ボタンをクリック
- PART 04 で生成した
cobol-callgraph.jsonlを選択 - 3Dの力線グラフが描画される
💡 ファイルサイズの目安
1万エッジ程度まではブラウザで快適に表示できます。数十万行規模のCOBOLシステムでは、プログラム単位でJSONLを分割してロードするか、フィルタリングして対象を絞ることを推奨します。
Java版JSONLとの差異
| フィールド | Java版 | COBOL版 | 影響 |
|---|---|---|---|
artifactFileName | myapp.jar | SAMPLE-PGM.cbl | Jarvizのノードグループに影響 |
packageName | com.example.service | PROCEDURE(固定) | パッケージフィルターが効かない |
className | OrderService | SAMPLE-PGM(PROGRAM-ID) | ノード名として表示される |
methodName | placeOrder | PROCESS-PARA | エッジのラベルとして表示 |
⚠️ packageName が固定値の影響
Java版は packageName でパッケージ単位のフィルタリングができますが、COBOL版では packageName を全件「PROCEDURE」にしているため、パッケージフィルターは機能しません。代わりに className(PROGRAM-ID)でフィルタリングしてください。
Java・COBOL混在グラフ
JavaシリーズのJSONLとCOBOL版のJSONLを統合することで、 言語をまたいだ全体依存グラフを1つの3Dマップで確認できます。
# Java版とCOBOL版を単純結合
cat java-callgraph.jsonl cobol-callgraph.jsonl > combined.jsonl
# 確認
wc -l combined.jsonl
# Jarvizにアップロードして統合グラフを表示
統合グラフのメリット
JavaフロントエンドからCOBOLバッチまで、システム全体の呼び出し連鎖を1画面で把握できる。
識別のコツ
artifactFileNameが .jar ならJava、.cbl ならCOBOLと判別できるため、色分け表示に使える。
注意点
混在グラフではノード数が急増するため、最初はプログラム単位で絞り込んで確認することを推奨。
フィルタリングと絞り込み
Jarvizのフィルター機能でノード・エッジを絞り込む方法です。
COBOLの場合は className フィールドで対象プログラムを指定するのが最も有効です。
import json, sys
from pathlib import Path
target_programs = {'BILLING-MAIN', 'BILLING-SUB1', 'BILLING-SUB2'}
with open('cobol-callgraph.jsonl') as fin, open('filtered.jsonl', 'w') as fout:
for line in fin:
d = json.loads(line)
if d['className'] in target_programs or d['callerClassName'] in target_programs:
fout.write(line)
print('filtered.jsonl を Jarvizにアップロードしてください')
表示のコツと注意点
- ノード名が長い: COBOL の Paragraph名は最大30文字で長くなりがちです。Jarvizのラベルオフセットを調整すると読みやすくなります。
- 孤立ノード: デッドコード(到達不能Paragraph)はエッジを持たない孤立ノードとして表示されます。一目でわかるので、削除候補の確認に便利です。
- クラスタ構造: PERFORMが深くネストしているプログラムは密なクラスターを形成します。これがシステムの「核心ロジック」を示すことが多いです。