CRUD図とは
CRUD図(CRUD Matrix / CRUD Diagram)とは、システム内の各機能・クラス・モジュールが、どのテーブルに対して Create(挿入)・Read(参照)・Update(更新)・Delete(削除) のどの操作を行うかを一覧化した図です。
縦軸に機能/クラス、横軸にテーブルを並べた行列(マトリクス)形式が最も一般的で、各セルに
C / R / U / D を組み合わせた記号を書き入れます。
| クラス / テーブル | users | orders | products | order_items |
|---------------------|-------|--------|----------|-------------|
| UserService | CR | | | |
| OrderService | R | CRU | R | CRD |
| ProductService | | | CRUD | |
| ReportService | R | R | R | R |
上表から「OrderService は order_items テーブルの Create・Read・Delete を行う」「ReportService はすべてのテーブルに対して Read のみ」といった依存関係が一目でわかります。
なぜCRUD図が必要か
CRUD図は次のような場面で特に力を発揮します。
既存ツールの限界
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 動的解析・ツール選定 |
| 03 | SQL抽出の実装 | JavaParserでASTを走査しSQL文字列を取り出す |
| 04 | テーブル名・操作種別の判別 | JSqlParserでCRUD分類 |
| 05 | CRUD行列の構築 | クラス横断集約とデータ構造設計 |
| 06 | CRUD図の出力 | Markdownテーブル・Mermaid・PlantUML |
| 07 | 動作デモ | サンプルプロジェクトで実際に動かす |
| 08 | まとめ | 限界と改善点・Gradle/Mavenプラグイン化 |
使用技術スタック
✅ 次の章では…
PART 02 では静的解析と動的解析のトレードオフを整理し、なぜ今回静的解析を選ぶのか、そして JavaParser と JSqlParser を選定した理由を詳しく解説します。