【設計支援】画面を操作するだけでCRUD図を自動作成するツールを作ってみた
はじめに
システムの規模が大きくなってきたけど、影響範囲が把握しづらい・・・。
リリースするたびに、想定外のバグが発生してしまう・・・。
そんな経験はありませんか?
そんなときに、CRUD図を作成すると、機能追加や修正時の影響範囲を把握しやすくなります。
しかし・・・CRUD図を作成するのって、割と手間ですよね。
みなさんはどのようにしてCRUD図を作成していますか?
CRUD図を作成していないプロジェクトも少なくないのではないでしょうか。
そのような場合は、コードを読んだり、ログを確認したり、手作業で作成するのが一般的かと思います。
でも、SQLがどこで実行されているのかよくわからない・・・。
ネストも深くて泣きたくなる・・・。
お手上げ状態になることもあるかもしれません。
そこで、RailsでCRUD図を自動作成する方法をご紹介します。
画面を操作するだけで、CRUD図を自動的に埋めてくれるライブラリを作成しました。
その名もrails-crud-toolsです。
この記事では、rails-crud-toolsの使い方を紹介します。
CRUD図とは
CRUD図とは、Create(作成)、Read(読み取り)、Update(更新)、Delete(削除)の頭文字をとったものです。
データベースの操作を表す図です。
CRUD図を作成することで、機能追加や修正したときの影響範囲を把握しやすくなります。
具体例
例えば、以下のようなテーブル構造を持つアプリケーションがあるとします。
テーブル構造
- ユーザー(users)
- 投稿(posts)
- コメント(comments)
CRUD図の例
以下のようなCRUD図を作成することで、各操作がどのテーブルに対して行われるかを視覚的に把握できます。
操作/テーブル | users | posts | comments |
---|---|---|---|
ユーザー作成 | C | ||
ユーザー情報閲覧 | R | ||
ユーザー情報更新 | U | ||
ユーザー削除 | D | ||
投稿作成 | C | ||
投稿とコメント閲覧 | CR | CR |
このように、CRUD図を作成することで、どの操作がどのテーブルに対して行われるかを一目で確認することができます。
これにより、機能追加や修正時の影響範囲を把握しやすくなり、開発効率が向上します。
rails-crud-toolsとは
rails-crud-toolsは、CRUD図を自動作成するためのライブラリです。
まず、ExcelのCRUD図を自動生成します。
CRUD図は、縦軸がrailsのルーティング、横軸がテーブル名となっています。
Web画面の操作だけでなく、API、ジョブにも対応しています。
railsサーバーを起動して画面を操作するだけで、CRUD図を自動的に埋めてくれます。
またsidekiqを使っている場合、ジョブのCRUD図も自動的に埋めてくれます。
Verb | URI | Controller#Action | users | posts | comments |
---|---|---|---|---|---|
GET | /users | users#index | R | ||
POST | /users | users#create | C | ||
GET | /posts | posts#index | R | ||
PUT | /posts/:id | posts#update | U | ||
DELETE | /comments/:id | comments#destroy | D | ||
GET | /dashboard | dashboard#index | R | R | R |
POST | /bulk_create | bulk#create | CU | CR | |
DELETE | /cleanup | cleanup#destroy | D | D | D |
UserJob | C | R | U | ||
PostJob | R | U | D | ||
CommentJob | U | C | R |
ただ、機能数やテーブル数が多い場合は、CRUD図を見るのが大変になるかもしれません。
この問題を解決するために、CRUD図を折りたたむ機能を追加したマクロも用意しています。
マクロでは、選択したアクションを絞り込んで表示することができます。
Verb | URI | Controller#Action | posts | comments |
---|---|---|---|---|
POST | /bulk_create | bulk#create | CU | CR |
それだけでなく、アクションに関連するテーブルのみに絞り込むこともできます。
また、テーブル名を選択すると、そのテーブルに関連するアクションのみに絞り込むこともできます。
例えば、下記はusersテーブルをクリックした例ですが、usersテーブルに関連するアクションのみが表示されます。
このようにして、CRUD図を見やすくする工夫をしています。
Verb | URI | Controller#Action | users | posts | comments |
---|---|---|---|---|---|
GET | /users | users#index | R | ||
POST | /users | users#create | C | ||
GET | /dashboard | dashboard#index | R | R | R |
DELETE | /cleanup | cleanup#destroy | D | D | D |
UserJob | C | R | U | ||
PostJob | R | U | D | ||
CommentJob | U | C | R |
rails-crud-toolsのインストール方法
Gemfileの編集
developmentグループに追加します。
gem 'rails-crud-tools'
インストール
$ bundle install
初期化
下記のコマンドを実行します。
.crudconfig.ymlとdoc/crud.xlsxが生成されます。
$ bundle exec crud init
コマンドでは内部的にrails routesコマンドを実行して、ルーティング情報を取得します。
また、データベースからテーブル名を取得してExcelの表を作成します。
設定ファイルを個別に出力することもできます。
.crudconfig.yml
$ bundle exec crud gen config
Excelファイルを個別に出力することもできます。
doc/crud.xlsx
$ bundle exec crud gen crud
設定ファイル
enabled: true # CRUDツールの機能を有効もしくは無効にする
base_dir: doc # CRUDファイルが格納されるベースディレクトリ
crud_file:
file_name: crud.xlsx # CRUD Excelファイルの名前
sheet_name: CRUD # CRUD Excelファイルのシート名
header_bg_color: 00FFCC # CRUD Excelファイルのヘッダの背景色
font_name: Arial # CRUD Excelファイルで利用されるフォント名
method_col: Verb # HTTPメソッドを示すカラム
action_col: Controller#Action # コントローラとアクションを示すカラム
table_start_col: your_first_table # テーブルの開始位置を示すカラム
sql_logging_enabled: true # CRUD操作のSQLロギングを有効もしくは無効にする
railsサーバーの起動
railsサーバーを起動します。
$ rails s
画面を操作すると、CRUD図が自動的に埋められていきます。
ログの確認
CRUD操作のSQLログを確認することができます。
$ tail -f log/crud.log
.crudconfig.ymlのsql_logging_enabledをfalseにすることで、CRUD操作のSQLログ出力を無効にすることができます。
sql_logging_enabled: false
Excelマクロの使い方
CRUD図を折りたたむマクロを使うことで、CRUD図を見やすくすることができます。
機能一覧
- アクション名を選択すると、関連するテーブルのみ表示されます。
- テーブル名を選択すると、そのテーブルに関連するアクションのみ表示されます。
※マクロはバージョンによっては動作しないことがあります。
2025-01-09現在、Microsoft office 365のExcelで動作確認しています。
マクロのダウンロード
マクロはこちらからダウンロードできます。
crud_macro.xlsmをダウンロードして、Excelで開いてください。
マクロの有効化
ファイルをダウンロードしたら、マクロを有効化します。
ファイルを右クリックして、プロパティを選択します。
「全般」タブのセキュリティの「許可する」を選択します。
使い方
crud.xlsxを開いて、シートをマクロにコピーします。
「URI」、「Controller#Action」列を選択すると、選択した行のアクションのみ表示されます。
また、アクションと関連するテーブルのみが表示されます。
Verb | URI | Controller#Action | posts | comments |
---|---|---|---|---|
POST | /bulk_create | bulk#create | CU | CR |
ヘッダー行のテーブル名を選択すると、そのテーブルに関連するアクションのみ表示されます。
こうすることで影響範囲を把握しやすくなります。
Verb | URI | Controller#Action | users | posts | comments |
---|---|---|---|---|---|
GET | /users | users#index | R | ||
POST | /users | users#create | C | ||
GET | /dashboard | dashboard#index | R | R | R |
DELETE | /cleanup | cleanup#destroy | D | D | D |
UserJob | C | R | U | ||
PostJob | R | U | D | ||
CommentJob | U | C | R |
APIのCRUD図の自動生成
PostmanなどのAPIクライアントを使うことで、APIのCRUD図も自動的に埋めてくれます。
ジョブのCRUD図の自動生成
sidekiqを使っている場合、ジョブのCRUD図も自動的に埋めてくれます。
sidekiqを起動して、sidekiqウェブ画面などからエンキューしてください。
そうすると、CRUD図が自動的に埋められます。
まとめ
CRUD図を作成する際、膨大な機能数と数多くのテーブルに困惑することがあります。
手動で作成するには多くの時間がかかるため、コールバックでSQLを解析し、CRUD図を自動的に埋める方法を考えました。
同じようにCRUD図を作成するのに困っている人がいるかもしれないと思い、rails-crud-toolsを作成しました。
CRUD図を作成すると、意外なところで機能の依存関係が見つかるかもしれません。
また、予想外の機能でCreateやUpdateが行われていることもあるかもしれません。
rails-crud-toolsが設計のお役に立てれば幸いです。
Discussion