Edited at

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に感謝します🙏