テクノロジー

2017年8月13日

Railsにおける「命名規則」とは?

Ruby on 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という設計書にtitlecontentという項目を設けています。
設計書は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

つけてはいけないモデル名

予約語

RubyRuby 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.

以上で命名規約に関しての説明を終了します。
初心者の方がよくつまづき、仕組みを理解できていないところであるので、今回で理解を深めていただけましたら幸いです。

オンラインプログラミング学習サービス DIVER Learningsこちら

ダイビックのことをもっと知ってみませんか?