Rails Engineを使った開発

一つ前に携わったプロジェクトではサブシステムがたくさんあり、それぞれがrailsで構築されていて共通処理やmodelはrails engineにあつめられ各システムで参照しておりました。

今までgemのコードリーディングをする時にしか意識していなかったrails engineですが(deviseとかとか)、結構便利だということを今更ながら実感し、最近は共有処理をengineに書き出してそれを参照するようにしています。

クックパッドさんでも共通部分をengineに集めているようです。
新規サービスの管理画面を短期間で見栄え良く実装する

ドリコムさんでは複数のengineを組み合わせてシステムを作っているようです。
Mountable Engine だらけの Rails アプリ開発

でも完全に共通に作ろうとすると色々考えなきゃいけないから工数がかかっちゃうんじゃないかと懸念があるかもしれません。
でも最初はそこまで共通化する必要もないのではないのかと思います。

git使っていれば、システムの納品段階でengineのブランチを切るなりタグを打つなりして機能を固定してしまえばいいのです。
そうすれば、今後engineに修正が加わってもGemfileで該当のブランチまたはタグを見るようにすれば問題なく納品段階のengineのコードでシステムは動き続けます。
その後時間をおいてゆっくりとプロジェクトに依存したコードを共通化していけばいいのです。

これを応用してめったにやらない処理であんまり入れなたくないような機能や、
モンキーパッチなども参照元のプロジェクト単位でengineをカスタマイズして導入することもできます。

そして共通化した処理を書くことはいつもより有益なことをしてる気持ちで仕事ができるので楽しいです。
engine固有の仕組みや書き方もあって最初は中々辛い部分もありますが、 engineを使ったことのない方は決まり切った処理をコピぺで過去のプロジェクトから持ってくるのではなく、 その処理をengineに書き出してそれをプロジェクトから参照してみてはいかがでしょうか?

Comments