Jarvizのセットアップ

Jarvizはブラウザで動作するWebアプリです。Node.jsが必要です。 Javaシリーズ(PART 05)のセットアップと同一手順なので、 すでにセットアップ済みの場合はスキップしてください。

Shell — Jarvizのインストールと起動
# 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の読み込み手順

  1. ブラウザで http://localhost:3000 を開く
  2. 「Upload JSONL」ボタンをクリック
  3. PART 04 で生成した cobol-callgraph.jsonl を選択
  4. 3Dの力線グラフが描画される

💡 ファイルサイズの目安

1万エッジ程度まではブラウザで快適に表示できます。数十万行規模のCOBOLシステムでは、プログラム単位でJSONLを分割してロードするか、フィルタリングして対象を絞ることを推奨します。

Java版JSONLとの差異

フィールドJava版COBOL版影響
artifactFileNamemyapp.jarSAMPLE-PGM.cblJarvizのノードグループに影響
packageNamecom.example.servicePROCEDURE(固定)パッケージフィルターが効かない
classNameOrderServiceSAMPLE-PGM(PROGRAM-ID)ノード名として表示される
methodNameplaceOrderPROCESS-PARAエッジのラベルとして表示

⚠️ packageName が固定値の影響

Java版は packageName でパッケージ単位のフィルタリングができますが、COBOL版では packageName を全件「PROCEDURE」にしているため、パッケージフィルターは機能しません。代わりに className(PROGRAM-ID)でフィルタリングしてください。

Java・COBOL混在グラフ

JavaシリーズのJSONLとCOBOL版のJSONLを統合することで、 言語をまたいだ全体依存グラフを1つの3Dマップで確認できます。

Shell — JSONLの統合
# 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 フィールドで対象プログラムを指定するのが最も有効です。

Python — 特定プログラムのみ抽出
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が深くネストしているプログラムは密なクラスターを形成します。これがシステムの「核心ロジック」を示すことが多いです。

次の章では…

PART 06(最終回)では3段階の可視化アプローチを整理表でまとめ、モダナイゼーション(Java移行・クラウドリフト)への展望を解説します。

→ PART 06 まとめへ