CRUD図とは

CRUD図(CRUD Matrix / CRUD Diagram)とは、システム内の各機能・クラス・モジュールが、どのテーブルに対して Create(挿入)・Read(参照)・Update(更新)・Delete(削除) のどの操作を行うかを一覧化した図です。

縦軸に機能/クラス、横軸にテーブルを並べた行列(マトリクス)形式が最も一般的で、各セルに C / R / U / D を組み合わせた記号を書き入れます。

CRUD図 — Markdownテーブル例
| クラス / テーブル    | users | orders | products | order_items |
|---------------------|-------|--------|----------|-------------|
| UserService         | CR    |        |          |             |
| OrderService        | R     | CRU    | R        | CRD         |
| ProductService      |       |        | CRUD     |             |
| ReportService       | R     | R      | R        | R           |

上表から「OrderServiceorder_items テーブルの Create・Read・Delete を行う」「ReportService はすべてのテーブルに対して Read のみ」といった依存関係が一目でわかります。

なぜCRUD図が必要か

CRUD図は次のような場面で特に力を発揮します。

影響調査
テーブルの列追加・削除・リネームを行うとき、どのクラスに修正が波及するかを即座に把握できる。
引き継ぎ・レビュー
新メンバーへの説明資料として、システムのデータアクセス全体像を短時間で伝えられる。
設計検証
「このテーブルを Delete できるクラスが多すぎる」「参照専用のはずのクラスが Update している」などの設計崩れを発見できる。
移行計画
マイクロサービス分割やDB移行の際、テーブルを参照しているクラスを漏れなく特定できる。

既存ツールの限界

CRUD図を自動生成するツールはいくつか存在しますが、多くは特定フレームワークに依存しています。

ツール / アプローチ依存するもの問題点
MyBatis Generator MyBatis JDBCやSpring JdbcTemplateで書かれたコードには対応しない
Hibernate SchemaExport Hibernate / JPA ネイティブSQLクエリは解析対象外
ER図ツール(DBスキーマ解析) DB接続 テーブル構造はわかるが「どのクラスがアクセスするか」は不明
手動作成 コード変更のたびに陳腐化し、メンテナンスコストが高い

⚠️ レガシーシステムでは特に困る

古いシステムほど独自ユーティリティやプレーンJDBC、SQL文字列連結が多く、フレームワーク依存ツールが使えないケースが多くあります。このシリーズはそのような環境を主なターゲットにしています。

このシリーズのアプローチ

本シリーズでは Javaソースコードの静的解析 によるアプローチを採ります。 ソースコードをASTに変換して文字列リテラルを走査し、SQL文を取り出してテーブル名と操作種別を判別します。 ORMやフレームワークに関係なく、SQLが文字列として現れるコードであればすべてが対象です。

💡 対応できるSQLパターン

単一文字列リテラル、定数フィールドに格納されたSQL、メソッド内ローカル変数への代入——これらはすべて解析対象です。動的に組み立てるSQL(StringBuilder + 条件分岐)は部分的に対応し、PART 08で限界と対策を解説します。

シリーズ全体構成

PARTタイトル内容
01はじめに(本記事)CRUD図の目的・シリーズ概要
02アプローチの設計静的解析 vs 動的解析・ツール選定
03SQL抽出の実装JavaParserでASTを走査しSQL文字列を取り出す
04テーブル名・操作種別の判別JSqlParserでCRUD分類
05CRUD行列の構築クラス横断集約とデータ構造設計
06CRUD図の出力Markdownテーブル・Mermaid・PlantUML
07動作デモサンプルプロジェクトで実際に動かす
08まとめ限界と改善点・Gradle/Mavenプラグイン化

使用技術スタック

JavaParser
JavaソースコードをASTに変換するライブラリ。文字列リテラル・フィールド・変数宣言を走査してSQL候補を抽出する。
JSqlParser
SQL文字列を解析してAST(Statement)に変換するライブラリ。SELECT/INSERT/UPDATE/DELETEのテーブル名を安全に取得できる。
Mermaid
Markdown内で図を描くためのDSL。GitHub・Notion・Confluenceで直接レンダリングされ、CRUD図の出力先として最適。
PlantUML
テキストからUMLを生成するツール。より高機能な表現が必要な場合のオプション出力先。

次の章では…

PART 02 では静的解析と動的解析のトレードオフを整理し、なぜ今回静的解析を選ぶのか、そして JavaParser と JSqlParser を選定した理由を詳しく解説します。

→ PART 02 — アプローチの設計へ