Rails

RailsのAction XxxやActive Xxxはどんな命名基準で使い分けられるのか

はじめに:ActionとActiveの命名基準は何?

Railsフレームワークの内部には以下のようなコンポーネント(クラス群)が用意されています。

  • Action Cable
  • Action Mailer
  • Action Pack
  • Action View
  • Active Job
  • Active Model
  • Active Record
  • Active Storage
  • Active Support

各コンポーネントのPrefix(接頭辞)はよく見ると、ActionとActiveの2種類があります。

ActionとActive、どちらも最初の4文字が同じなので、ぱっと見で違いが分かりづらいですし、どんな基準で名前が使い分けられているのかよくわかりません。

僕もときどき「あれっ、Action Storageだっけ?それともActive Storage??」と迷うことがよくありました。

というわけで、RailsにおけるActionとActiveの命名基準について調べてみました。

回答:ActionはController層またはView層、ActiveはModel層(らしい)

命名基準に関する公式情報は見つけられなかったのですが、Stack Overflowに同じような質問と回答が載っていました。

どちらの回答も次のような内容が載っていました。

  • ActionはController層とView層に関連するコンポーネントで、HTTPリクエストとHTTPレスポンスを処理する
  • ActiveはModel層に関連するコンポーネントで、アプリケーションのドメインモデルやビジネスロジックを処理する

なるほど、たしかに、

「Action Cable、Action Mailer、Action Pack、Action Viewは、Controller層とView層に関連する」

「Active Job、Active Model、Active Record、Active Storage、Active Supportは、Model層に関連する」

と言われてみると、そんな気がしてきます。

公式情報ではないので、絶対正しいとは言い切れませんが、「おそらくそうであろう」と考えておいても問題なさそうです。
ですので、現時点ではこれを回答としておきます。

(公式情報をご存じの方がいたら教えてください!)

余談:Action TextはもともとActive Textだった

Rails 6で導入が予定されているAction Text(リッチテキスト入力機能)は、もともとActive Textという名前だったそうです。

以下のコミットでDHH氏が「この機能はActive Modelというより、Action Viewに近いから」という理由で名前をAction Textに変更しています。

Rename from Active Text to Action Text · rails/actiontext@f1d7487

Action TextのようにViewにもModelにも関連するコンポーネントだと、こんなふうに命名が揺れることもあるんですね。

謝辞

Stack Overflowの回答やDHH氏のコミットを見つけてくれた、SonicGardenの@kei-p@tkawaに感謝します🙏