Help us understand the problem. What is going on with this article?

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした