Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに: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に感謝します🙏

jnchito
SIer、社内SEを経て、ソニックガーデンに合流したプログラマ。 「プロを目指す人のためのRuby入門」の著者。 http://gihyo.jp/book/2017/978-4-7741-9397-7 および「Everyday Rails - RSpecによるRailsテスト入門」の翻訳者。 https://leanpub.com/everydayrailsrspec-jp
https://blog.jnito.com/
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away