はじめに
ここ数年は仕事でRailsを利用してます。
新たにプロジェクトがはじまり、これまでRubyはやっていたけどRailsは初めてという人はあんまりいなくて、RubyもRailsも初めてで、これまではJavaばかりという人がほとんどだったりします。
そんな人達に知っておいてほしい基礎知識と実装Tipsを何回かに分けてまとめてみます。
次のプロジェクトでメンバーに読んでもらうことも意識しながら
第1回は、設計編から。
初心者のハマりところ(設計編)
■テーブル設計で、ついつい複合主キーを前提にマスタ設計してしまう。
IDカラムを物理主キー(サロゲートキー)にしましょう。また、外部キーも参照するテーブルのIDカラムとしたほうがベターです。
複合主キーにすることも可能ですが、Modelのリレーションでいちいちオプション指定をする必要が出てきますし、ActiveRecordの実装も複雑になってくるので、オススメしません。
■ページコントローラ型のフレームワーク(JSFなど)に慣れていると、フロントコントローラ型フレームワーク&RESTfulの思想に基づいたRailsの場合、URL設計や画面の粒度・画面遷移で戸惑う。
Java歴が長い人の場合は、JSFよりもStrutsの思想に近いという話をすると比較的入りやすいと思います。
●RESTfulなアーキテクチャスタイル
またRESTfulについては、GET,POST以外にもPATCH,DELETEといった概念があり、マスタメンテナンスのような画面を例にして、Controllerのアクションメソッドの説明をしていくとよいでしょう。
なお、典型的なマスタメンテナンス画面を作る場合、下表のようになると説明するとわかりやすいかと思います。
ユーザーマスタのメンテナンス画面を作る場合
画面 | イベント | HTTPメソッド | Controllerのメソッド | URL |
---|---|---|---|---|
ユーザー一覧 | 初期表示 | GET | index | /user/index |
ユーザー登録 | 初期表示 | GET | new | /user/new |
ユーザー登録 | 登録ボタン押下 | POST | create | /user/ |
ユーザー更新 | 初期表示 | GET | edit | /user/1/edit |
ユーザー更新 | 更新ボタン押下 | PATCH | update | /user/1 |
ユーザー一覧 | 削除ボタン押下 | DELETE | destroy | /user/1 |
なお、Rails/RESTfulのスタイルに合わない場合もありますが、その場合は、HTTPメソッドに対して、独自に定義したControllerのメソッドをマッピングします。
例えば、検索画面を作りたいという場合は、GETを用いて、searchメソッドとマッピングするという形です。
URL設計については、下記参考URLの3のSlideShareがわかりやすいです。
●画面の粒度
上述のRESTfulに従い、例えば一括登録・一括更新みたいな画面は作りにくいので、なるべくなら避けるとよいでしょう(バリデーションのメッセージを表示するのもちょっと面倒)。
また1つの画面に複数の役割の異なるボタンを配置すると、とたんに作りがややこしくなります。いまどきのSPAで作る場合はREST APIで受ける形で実装できますが、そうでない場合は1画面で1イベントのようにしたほうがよいです。
画面数を節約するためにボリューミーな画面にして、見かけ上の機能数を削減するみたいな思想は捨てて、素直に画面を分割することをオススメします。
戯言・・・
エンタープライズの世界では、工数削減という名のもとに、機能の一部分が一緒だから、画面を1つにすれば工数削減できると思い込んでいるレガシーな思想がまだ残っていると感じることがあります。特にRailsの場合、シンプルな画面を複数作成するほうが、重たい画面を1つ作るよりも遥かに工数が削減できますので、くれぐれもレガシー脳のなんちゃってマネージャーの言うことを聞かないようにしましょう
参考
ページコントローラ - Strategic Choice
http://d.hatena.ne.jp/asakichy/20120626/1340661275フロントコントローラ - Strategic Choice
http://d.hatena.ne.jp/asakichy/20120627/1340748302REST - Wikipedia
https://ja.wikipedia.org/wiki/REST