Ruby
Rails
初心者
Rails4

Rails脱初心者のための基礎知識と実装Tipsまとめ(1) - 設計編

More than 3 years have passed since last update.

はじめに

ここ数年は仕事でRailsを利用してます。

新たにプロジェクトがはじまり、これまでRubyはやっていたけどRailsは初めてという人はあんまりいなくて、RubyもRailsも初めてで、これまではJavaばかりという人がほとんどだったりします。

そんな人達に知っておいてほしい基礎知識と実装Tipsを何回かに分けてまとめてみます。

次のプロジェクトでメンバーに読んでもらうことも意識しながら:sweat_smile:

第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つ作るよりも遥かに工数が削減できますので、くれぐれもレガシー脳のなんちゃってマネージャーの言うことを聞かないようにしましょう:wink:

参考

  1. ページコントローラ - Strategic Choice
    http://d.hatena.ne.jp/asakichy/20120626/1340661275

  2. フロントコントローラ - Strategic Choice
    http://d.hatena.ne.jp/asakichy/20120627/1340748302

  3. RESTfulとは
    http://www.slideshare.net/unsolublesugar/res-tful

  4. REST - Wikipedia
    https://ja.wikipedia.org/wiki/REST

Rails脱初心者のための基礎知識と実装Tipsまとめシリーズ目次

  1. 設計編 :koko:
  2. 区分値管理編
    http://qiita.com/future-hoshi/items/6b72980a19a39bb1f780