Ruby Ruby on Rails プログラミング

Ruby、Ruby on Railsにおける命名規約について

更新日:

あらゆるプログラミング言語には、変数やクラスなどに名前を付ける際には、その約束事である「命名規約」というものがあることはご存知だと思います。Rubyにおいては、その特徴を最大限に引き出すために、この名前が非常に重要なものになってきます。

Ruby の生みの親である、まつもとゆきひろさんの設計上の座右の銘は「名前重要」

このことからも、この「名前」がRuby の機能と密接に関わっていることが伺えると思います。Ruby を学び始めたばかりの私が、Ruby on Rails でWebアプリケーション作成時に、この命名規約を軽視してしてしまったために、ある重大なミスを犯してしまいました。

今回は、私が犯したその「重大なミス」とはなんなのか、そして、そこから学んだ「名前の重要さ」についてまとめてみました。これにより、同じ失敗を繰り返さないように。また、同じようなことでつまずいている初学者の方の参考になればと思います。

スポンサーリンク


命名規約

まずは命名規約からまとめてきます。

環境

Windows10
Ruby 2.5.3
Rails 5.2.2

参考資料

Rubyにはコーディングスタイルやベストプラクティスに関する公式のガイドがありません。ですが、有志によりコーディング規約がまとめられ、GitHubなどで公開されています。

主なものを以下にまとめました。

名前付けの基本

名前の種類

①全ての名前には基本的に英語を用います。日本語をローマ字にしたものもなるべく避けて、ぱっと見ただけでどんな機能を持っているか意味のわかる名前をつけます。


②文字と数字は分離しないようにします。

名前付けの際に使用する名前の種類

snake_case・・・全て小文字で、単語を「_」(アンダーバー)で区切る
例)sample_method

CamelCase・・・単語の先頭を大文字にする(HTTP、XML、JSONなどの略語は大文字を保つ)
例)SampleClass SampleJSON

SCREAMING_SNAKE_CASE …全て大文字で「_」で単語を区切る

ファイル名、シンボル、メソッド、変数

snake_caseで記述

クラス、モジュール

CamelCaseで記述

定数

定数は、SCREAMING_SNAKE_CASEで記述

Railsの命名規約

以上までがRuby全般における命名規約でした。Railsも基本的にこれに沿いますが、これに加えて、モデル名やコントローラ名をつける際にもルールがあります。

Railsにおいては、名前による関連付けで、より記述を簡単にできるように設計されているので、ただ単に、読みやすく・わかりやすくする、以上の意味を持ちます。ですので良く理解して名前付けをしなければなりません。

モデル名

モデル名は単数形で表します。

モデル名 ・・・ snake_case
例)fruit、fruit_price

モデルクラス名…CamelCase
例)Fruit、FruitPrice

ファイル名…snake_case
例)fruit.rb、fruit_price.rb

テーブル名…モデルの複数形 snake_case
例)fruits、fruit_prices

rails generateコマンドでモデルに紐づくテーブルが複数形で作成されます。

コントローラ名

モデル名の複数形で表します。

コントローラ名…モデルの複数形 snake_case
例)fruits、fruit_prices

コントローラクラス名…CamelCase
例)FruitsController、FruitPricesCoontroller

ファイル名…snake_case
例)fruits_controller.rb、fruit_prices_controller.rb

rails generateコマンドではCamelCaseでもsnake_caseでもどちらでもいい

付けてはいけない名前

予約語…
RubyやRailsであらかじめ定義されているクラスなどと同じ名前を付けてはいけません。「rails c」コマンドで予約語を確認することが出来ます。

アプリと同じ名前をモデル名に使うことも出来ません。

スポンサーリンク


設定より規約


設定より規約が優先される (Convention Over Configuration): Railsでは、Webアプリケーションで行われるさまざまなことを実現するための最善の方法を明確に思い描いており、Webアプリケーションの各種設定についても従来の経験や慣習を元に、それらのデフォルト値を定めています。このようにある種独断でデフォルト値が決まっているおかげで、開発者の意見をすべて取り入れようとした自由過ぎるWebアプリケーションのように、開発者が延々と設定ファイルを設定して回らずに済みます。

Railsガイド

この思想に沿ってRailsが設計されているため、この規約の沿ってコーディングしていくことにより、不要な設定ファイルを記述しなくも済みます。

つまり、決められた名前を使えば、わざわざ設定ファイルを書く必要ないよ。どうしても自分でカスタマイズしたい場合は書いてね、ということ。

この規約に沿ってコーディングすれば、データベースやビューとのやり取りが感覚的に記述できるようになります。

名前重要

Rubyの生みの親であるまつもとゆきひろさんの設計上の座右の銘は「名前重要

ご自身のキャリアの中で適切な名前をつけることが出来た機能は成功し、そうでない機能については後で後悔することが多かったそうです。

Rubyの機能追加に関しても「名前が気に入らない」と拒否したものも数多くあるそうで、そうしたもののなかで、あとで後悔した経験は殆どはなかったとか。

つまり、適切な名前をつけられると言うことは、その機能が正しく理解されて、設計されているということ。逆にふさわしい名前がつけられないということは、その機能が果たすべき役割を設計者自身も十分理解できていないということ。

「Ruby」という名前

Rubyという名前は、Perlというプログラミング言語にあやかって宝石の名前を選んで命名したそうです。その時はあまり深刻に考えずに付けたそうです。

私がRubyを学習していく中で出来上がったRubyというプログラミング言語のイメージはまさに宝石のルビーそのものです。

ありふれた宝石で「なんか赤い石でしょ」くらいの印象でしたが、本物のルビーをよくよく見てみると、とても複雑で深い赤なのがわかります。ずっと眺めていると吸い込まれてしまいそうな真紅。

Rubyも、コードは一見とても簡単そうに見えます。ですが、その内部でとても複雑に考え込まれて設計されているため、プロブラマは感覚的な記述で、その機能を享受することが出来ます。

名前を意識しなかったために・・・

ここからは私が実際にアプリケーション開発時にしてしまった失敗です。

Ruby において「命名規約」が非常に大事なことは、入門書などを見てなんとなくは理解していました。ですが「とりあえず最低限の知識さえついてればすぐに作れるだろう。わからないことはやりながら調べればいいし。」と、そのすべてを理解せずにふわっとした状態でWebアプリ作成に取り掛かりました。

もともとプログラミング言語はJavaを学習していて、サーブレットでWebアプリを作成したりしていました。Javaにおいても命名規約はありますが、どちらかというと「設定」をしっかり書いておくイメージで、名前の規約に頼って記述している場面は少なく、、というかこれが当たり前だと思っていました。

その感覚のままRailsでWebアプリを作っていたのですが、そもそもJavaのときですら変数などの名前付けをそこまで意識していなくて(これがそもそも問題ですが・・・)Rubyにおいてもそれは変わらず、作っていくうちに色々と名前がかぶってきてしまってわかりづらくなってしまう箇所がいくつも出てきてしまいました。

例えば、別のモデルのインスタンスを格納する変数名を同じようなものにしてしまい、現在どのモデルを操作しているのか分かりづらくなってしまったり。複数のコントローラーのアクション名を同じにしてしまい(create,update,deleteとか)ビューがどのコントローラーのアクションと対応しているのかわからなくなってしまったり。

こういった状態で気にせず作り続けていたのですが、案の定エラーが頻発し、直そうにも可読性が悪すぎて自分でも読めないという自体に陥ってしまいました。

そこでやっとこの「命名規約」の重要さに気付き、今一度全体を見直して見ることにしました。

ですがこの作業が非常に大変。ある程度出来上がったWebアプリのあらゆる「名前」をもう一度見直すとどういう事になるのかを以下にまとめてみました。

  • 一つの変数の名前を付け直すのでもそれがどこまで参照されているかをすべて追って行かなければならない。
  • モデルの名前を変更しようとした場合、それに紐づくテーブルも一旦削除。そのモデルに設定していた関連付けもすべて作り直し。
  • モデル名変更に伴い、関連するコントローラー名も変更。
  • コントローラーのアクション名を変更すると、ビューの名前も変更しなければならない。
  • アクションとビューの名前も変更したらそれに合わせてルートの記述も変更しなければならない

「これって作り直したほうが早いんじゃ・・・」と思いますよね。結果的には私もそうしたほうが良かったと思いますが。なにせ命名規約をそこまで重要だと思わずに開発を進めてきていましたから、ちょこっと直せば大丈夫だろう、と軽く考えて、修正規模を全く把握していなかったんです。

しかし、修正を始めてみると「あれ、ここを直すということはここも。あれ、といことはあそこも・・?」

気がついたら、アプリの大部分を修正しており、引き返せないところまできてしまっていました。

アプリは無事完成はしましたが、個人で趣味の範囲で作っていたものだからよかったものの、これを実際の仕事でしてしまったら、と思うと顔面蒼白です。

今回の失敗で学んだこと

名前超重要!!

プログラマ人生まだまだ始まったばかり。一歩ずつ着実に前進していきましょう。

RubyおよびRuby on Rails おすすめ良書紹介

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)

著者:伊藤 淳一
出版日:2017/11/25
評価:

現場で使える Ruby on Rails 5速習実践ガイド

著者:大場寧子 他
出版日:2018/10/19
評価:

スポンサーリンク


スポンサーリンク


-Ruby, Ruby on Rails, プログラミング

Copyright© 諸行無常 , 2021 All Rights Reserved Powered by AFFINGER4.