Railtie と Engine と Plugin の関係

2010/10/23

Rails 3 における Railtie と Engine と Plugin の関係をまとめます。

  • Railtie は Rails フレームワークの中核要素。ActonController や ActiveRecord などは Railtie の一種。
  • Railtie は Engine の親、Engine は Plugin の親である。
  • Engine も Plugin も Rails フレームワークを拡張するための「部品」である。コントローラ、ビュー、モデルを内包できる。
  • Plugin の開発者は明示的に Rails::Plugin クラスを継承してはいけない。vendor/plugins ディレクトリに置いてあるプラグインが自動的に Rails::Plugin になる。
  • Engine の開発者は明示的に Rails::Engine クラスを継承しなければならない。
  • Plugin は gem として配布できない。Engine はできる。
  • Plugin はブートプロセスの最後の方でロードされる。Engine の場合は開発者がロードされるタイミングを細かく指定できる。

Plugin はこれまで作られた数多くのプラグインを救うための仕組みのように見えます。

今後、Rails フレームワークを拡張する“何か”を他の人々と共有したいと思ったら Engine を作って gem として配布するということになるのでしょう。