クラス名と略語の関係

こんにちは。グローバルソリューション事業部の平田です。

今日は略語 (“SSL”, “API” など) をクラス名に利用する場合の小ネタです。

 

クラス名・ファイル名・テーブル名の変換

Ruby では、通常クラス名はキャメルケース (単語の先頭のみを大文字にして連結する) を使用します。たとえば、メールテンプレート (mail templates) を表すクラス名は、”MailTemplate” のように命名します。

Ruby on Rails ではルールに従って作成することで、ファイル名・データベースのテーブル名・クラス名などを相互に変換してくれます。必ずしもルールに従う必要はありませんが、自動的に関連づけを行ってくれるため、一般的にはこのルールに従ってアプリケーションを作成していくことになるでしょう。

Rails の内部では、 ActiveSupport::Inflector で拡張されたString クラスのメソッドを利用して変換を行っています。これらは、”active_support/inflector” を require することで、Rails以外でも利用可能です。
(参考: ActiveSupport::Inflector)

 

略語とRailsのクラス名

ここで、SSLの契約情報 (SSL contract) を格納するクラスを作ることを考えてみましょう。”SSL” は略語 (頭字語) のため一般的に全て大文字で記載しますが、クラス名ではどのように取り扱うべきでしょうか。この取り扱いについてはいくつか派閥があり、概ね次の3つに分けられます。

  • 略語でも先頭のみ大文字にする派 (Rails) → SslContract, IoException
  • 略語は全て大文字にする派 → SSLContract, IOException
  • 2文字以下の略語は全て大文字、3文字以上の場合には先頭のみ大文字にする派 (マイクロソフト .Net のガイドライン) → SslContract, IOException

 

個人的な好みとしては、(単語の区切りが若干分かりにくいという欠点はあるものの) 略語は全て大文字にする派ですので、ここでクラス名を “SSLContract” にする方法を考えます。
 

Scaffold を生成する

とりあえず、定石通り scaffold ジェネレータを実行します。

実はこの方法で作成すると、SSLContract ではなく、SslContract というクラス名になってしまいます。ちなみに、単に各種クラス・モジュール (モデル、コントローラ、ヘルパー) の “SslContract” を “SSLContract” と置き換えただけでは上手く動作しません。悲しいですね。

作成した scaffoldは見なかったことにして消しておきましょう…

 

 ActiveSupport::Inflectorを設定する

実は、ActiveSupport::Inflector には略語であることを指定して、そのまま取り扱ってくれる機能があります。Rails の場合には、config/initializers/inflections.rb に (全てコメント状態になって) サンプルが書いてありますので、このファイルを修正します。

なお、コメント中に書かれているように、全て大文字ではない単語 (“RESTful” なども) 1つの略語として取り扱うことが出来ます。

再度、scaffold を生成します。

以上で、 モデル・コントローラ・ヘルパ名に “SSLContract” が使われるようになりました。

 

 

まとめ

今回は、Rails の一部である ActiveSupport::Inflector について少し触れてみました。

「こんなことしたいな」「こんな設定があるといいな」が大抵用意されているRailsは便利ですね。

 

 

Share on LinkedIn
LINEで送る
Pocket

平田

平田

本業はインフラエンジニアだけど、最近はプログラミングやっています。