はじめに: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に同じような質問と回答が載っていました。
- Rails active vs action (Railties naming) - Stack Overflow
- What is the naming rule behind Rails' parts? - 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に感謝します🙏