【初学者向け】【Rails】 命名規則の理解の仕方を纏めてみた


※Qiita初投稿

どうも Toda Masaoです。

Railsを学習中 "モデル名は単数形 / コントローラー名は複数形"
といった単数形/複数形の命名規則に出会いました。

「どういう基準で単数・複数形を分けているんや…」
「そもそもこのヘンテコルールは何のために…」
と理解できない部分が多かったため、自分なりに調べてみました。

結果、初学者向けに分かりやすく解説されている記事がなかったので
自分なりの解釈(と調べた結果)を纏めてみました。

他初学者の方の理解を深める手助けになればと思います。
※解釈に誤りがあれば随時修正します

単数形と複数形にする理由

 ・コントローラー名は末尾に"s"を付けて複数形にする
 ・モデル名は末尾に"s"を付けずに単数形にする

という風にRailsには単数形複数形に関する命名規則があり、
これを遵守しない場合はエラーが発生するという強い制約があります。
まず「何のためにそんな制約を設けているの?」という点について疑問に思ったので調べてみました。

結果:
Railsには「設定より規約」というの基本理念があり、これに準ずるために設けられたようです。

wikipediaより引用:
設定より規約(せっていよりきやく、英: convention over configuration; CoC)とは、開発者の決定すべきことを減少させ、単純にするが柔軟性は失わせないソフトウェア設計パラダイム。
この言葉の本質的な意味は、開発者が指定しなければならないのはアプリケーションの慣例に従わない点だけだ、ということである。例えば、モデルの中にSalesというクラスがあれば、データベース中の対応する表の名前はデフォルトでsalesである、という規約を定める。この規約から逸脱するときだけ、例えばその表を "products_sold" という名前にする場合だけ、その名前を使ったコードを書く必要が生じる。
使用しているツールが実装した規約が開発者の望む動作と一致していれば、設定ファイルを書く必要もない。実装規約と望みの動作が違っている場合だけ、必要な動作を設定すればよい。

僕の解釈でイメージを補足すると
「M・V・Cの紐付けとか面倒くさい処理は基本Railsが行う方針とするよ。一意に判断できない処理だけエンジニアが書いてね。
 規則性のない名前付けられるとどう紐付けていいか分からなくなるから命名規則を設けるよ。」
ということらしいです。

僕自身、過去にJava言語でWebアプリケーションを作った経験があるのですが、
MVCを紐付けようとすると定型文的なコードが必要になりました。
コード量が増える上に、記述の手間がかかるので、自動で紐づけてくれるなら確かに開発効率が大幅にアップすると思います。
この自動化に重きを置くために、単数/複数形を始めとした強制力の強い命名規則を設けているようです。

モデル名について

種類 説明
モデル名 user 単数形
ファイル名 user.rb 単数形
モデルクラス名 User 単数形、頭文字は大文字
テーブル名 users 複数形

モデル名は単数形になります。
モデルは「モデルオブジェクトのクラス()」を指します。
クラスであり、何かしらの集合体ではないということから単数形になるようです。
(
)前述の例では「一人一人のユーザを表すモデルオブジェクトのクラス」

テーブル名は複数形になります。

モデルとテーブルの定義を混同しがちですが、
・モデルはクラス
・テーブルはレコード(user)の集合体

なので、モデル名は単数形、テーブル名は複数形になるんだそうです。
そう聞くとなんとなく納得できますね。

コントローラー名

種類 説明
コントローラ名 users 複数形
ファイル名 users_controller.rb 複数形
コントローラクラス名 UsersController 複数形、頭文字は大文字

コントローラー名は複数形になります。
コントローラーは「クライアントからのリクエストを受け取り、model/viewと連携してレスポンスを返す役割を担う部分」を指します。

モデルに対する操作(アクション)が複数あるから複数形になるらしいです。
前述の例を用いると「User全体(Users)をコントロールするためのもの」だから複数形になるようです。

MVCの関係は図に表すと以下のようなイメージになるそうで
このイメージを聞いたら腑に落ちました。

ビューフォルダ名について

種類 説明
フォルダ名 users 複数形

ビューフォルダ名は複数形です。
ビューフォルダは該当のコントローラーと基本対の関係になっているのですが
コントローラ名と同じ名前を使っているので複数形になっているらしいです。まぁこれは納得ですね。

ちなみにViewファイル名(HTML)は基本アクション名と同じになりますので複数形にはなりません。

最後に

命名規則について色々調べた後、Railsで開発を行っていますが、
前述の認識で開発に支障出ていないので、認識に特に問題ないと思っています。

最初に書きましたが、認識誤っていると気づいた場合は
随時本記事を更新する予定でいますので、その点はご理解/ご了承頂きますようお願いします。

以上です。
最後までお読みいただきありがとうございました。

参考

Railsにおける「命名規則」とは?
Ruby on Railsの命名規則:好きに命名するのか、Railsが予想して命名したのか分からない話
設定より規約について
設定より規約