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 として配布するということになるのでしょう。