テクノロジー
2017年8月13日Railsにおける「命名規則」とは?

Ruby on Railsの「命名規約」とは?
今回はRuby on Railsにおける命名規約について簡単に学んでいきましょう。
みなさんの学習の手助けとなれば幸いです。
Railsの基本理念の1つ CoC (Convention over Configuration, 設定より規約)
の規約部分です。
初学の段階ではこのポイントを掴むことで学習がより効率的になります。
またプログラミングを学習する上でこの命名規約は非常に重要なポイントとなります。
それでは早速今回の学習に取り組んでいきましょう。
Ruby on Railsを用いた開発では、コントローラー名は複数系、モデル名は単数形で頭文字が大文字と、様々な命名規則があります。
この規則に基づいてファイルやクラス間の連携が機能しているため、命名規則を守って開発する必要があります。
下記rails g
コマンドによって生成されるファイルを参考に、命名規則を覚えていきましょう。
rails g scaffold blog title:string content:text
Modelの命名規則
モデルクラスであるBlog
は、オブジェクト指向における設計書に当たります。
Blog
という設計書にtitle
とcontent
という項目を設けています。
設計書は1つなのでモデルクラス名は単数形
で表現されます。
この設計書をもとに同じ構成を持つインスタンスであるblog
を作成していきます。
このblog
の情報を保存しているものがblogs
テーブルです。
テーブルには複数のblog
の情報を保存しているため、テーブル名は複数系
で表現されます。
マイグレーションファイルやマイグレーションクラス名は、テーブルを作成するものです。
そのためテーブル名と同様に複数系
で表現されます。
種類 | 例 | 説明 |
---|---|---|
モデル名 | blog | 単数系 |
ファイル名 | blog.rb | 単数系 |
モデルクラス名 | Blog | 単数系、頭文字は大文字 |
テーブル名 | blogs | 複数系 |
マイグレーションファイル名 | xxxxxxxxxxxxxx_create_blogs.rb | 複数系 |
マイグレーションクラス名 | CreateUsers | 複数系、頭文字は大文字 |
(blog.rb
)
class Blog < ApplicationRecord
end
(xxxxxxxxxxxxxx_create_blogs.rb
)
class CreateBlogs < ActiveRecord::Migration[5.1]
def change
create_table :blogs do |t|
t.string :title
t.text :content
t.timestamps
end
end
end
Viewの命名規則
Viewのファルダ名はフォルダ配下に複数のViewファイルを持つため、複数形
で表現されます。
種類 | 例 | 説明 |
---|---|---|
フォルダ名 | blogs | 複数系 |
Controllerの命名規則
Controllerは複数のactionを持つため、複数系
で表現されます。
種類 | 例 | 説明 |
---|---|---|
コントローラ名 | blogs | 複数系 |
ファイル名 | blogs_controller.rb | 複数系 |
コントローラクラス名 | BlogsController | 複数系、頭文字は大文字 |
(blogs_controller.rb
)
class BlogsController < ApplicationController
before_action :set_blog, only: [:show, :edit, :update, :destroy]
<!-- 省略 -->
end
Routingの命名規則
Routingのリソース名はController名に基づいています。
そのためController名と同じく複数系
で表現されます。
種類 | 例 | 説明 |
---|---|---|
リソース名 | blogs | 複数系 |
(config/routes.rb
)
Rails.application.routes.draw do
resources :blogs
end
つけてはいけないモデル名
予約語
Ruby
やRuby on Rails
の仕様としてあらかじめ定義されている定数やクラス名があります。
これらを予約語
といい、モデル名
に使用することができません。
同名の定数やクラス名を作成するとソースコードを正しく解釈できなくなってしまうためです。
rails g
でモデル名に予約語
を指定すると下記のようなエラーが発生します。
$ rails g scaffold object title:string content:text
Running via Spring preloader in process 15518
invoke active_record
The name 'Object' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.
予約語の確認方法
次のようにrails c
コマンドを実行することで予約語を確認することができます。
> Object.constants
=> [:Object, :Module, :Class, :BasicObject, :Kernel, :NilClass, :NIL, :Data, :TrueClass, :TRUE, :FalseClass, :FALSE, :Encoding, :Comparable, :Enumerable, :String, :Symbol, :Exception,
(省略)
:Fcntl, :Selenium, :Zip, :Find, :WebConsole, :Achieve, :Bindex, :Erubi, :PrettyPrint, :PP, :IPAddr, :OpenURI, :APP_PATH, :Exception2MessageMapper, :IRB, :RubyToken, :RubyLex, :RUBYGEMS_ACTIVATION_MONITOR]
アプリ名
rails new アプリ名
とした場合、アプリ名
もモデル名
にすることができなくなります。
$ rails g scaffold achieve title:string content:text
Running via Spring preloader in process 15631
invoke active_record
The name 'Achieve' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.
以上で命名規約に関しての説明を終了します。
初心者の方がよくつまづき、仕組みを理解できていないところであるので、今回で理解を深めていただけましたら幸いです。