3段階の可視化アプローチ整理
| 段階 | 視点 | ツール・手法 | 得られる情報 | 主なユースケース |
|---|---|---|---|---|
| ① 構造 | Class関連図 | ASM / JavaParser PlantUML / Mermaid |
継承・実装・集約・依存の関係構造 | 設計レビュー・DIP確認・レガシー解析 |
| ② 振る舞い | Method Call Graph | ASM(静的) Java Agent(動的) |
誰がどのメソッドを呼ぶか | デバッグ・影響範囲分析・テスト設計 |
| ③ 俯瞰 | Jarviz 3Dマップ | jarviz-lib + jarviz-graph | システム全体のホットスポット・クラスタ構造 | アーキテクチャ評価・マイクロサービス化設計 |
3段階は排他的ではなく、実際には組み合わせて使う。 「3Dマップでホットスポットを発見 → Call Graph で呼び出し経路を追う → Class図で設計を確認」 というボトムアップの分析が特に有効だ。
JSONLフォーマットの汎用性が持つ意味
このシリーズで最も重要な発見は Jarviz の3Dマップは JSONL の可視化エンジンであるという事実だ。
{"appSetName":"System","appName":"service-A","sourceClass":"...","sourceMethod":"...","targetClass":"...","targetMethod":"..."}
6フィールドのこのフォーマットさえ生成できれば、
Java・Python・Kotlin・TypeScript・Go ——どの言語のコードも同じ3Dマップで俯瞰できる。
さらに appName を使えば異なる言語で書かれたマイクロサービスを
一つのマップに統合することも可能だ。
💡 マルチ言語マイクロサービスの統合可視化
Java の order-service、Python の analytics-service、
Kotlin の notification-service の JSONL を1ファイルに結合して
jarviz-graph に渡すと、言語の壁を超えたシステム全体の依存マップが生成される。
これは既存のIDEツールでは難しい視点だ。
シリーズ習得チェックリスト
- Javaクラス間の5種類の関係(継承・実装・コンポジション・集約・依存)を説明できる
- ASM を使って JAR からクラス関係を抽出するコードを書ける
- JavaParser を使ってソースコードからコンポジションと集約を区別して抽出できる
- INVOKE系バイトコード命令(invokevirtual・invokeinterface 等)の違いを説明できる
- ASM の MethodVisitor を使って Call Graph を生成できる
- 静的解析と動的解析のトレードオフを理解し、使い分けられる
- CallEdge を JSONL 形式で出力するコードを書ける
- Jarviz の JSONL フォーマットの6フィールドの意味を説明できる
- Python(ast)または他言語で JSONL を生成して3Dマップを表示できる
- 3Dマップからホットスポット・孤立ノード・モジュール間依存を読み取れる
次のステップ
✅ シリーズを振り返って
PART 01 から PART 06 まで、「コードを眺める」から「コードを可視化する」へのアプローチを体系的に解説した。 中でも JSONL フォーマットという共通言語を使うことで、 特定の言語やツールに縛られない汎用的な可視化基盤が作れるという発見は、 多言語が混在するモダンなシステム開発において特に価値があると考えている。 ぜひ手元のプロジェクトで試してみてほしい。