もふもふ技術部

Rails Engineでブログ機能追加するgemを作る


最近、どうやったら徹底的に車輪の再開発を防いで爆速開発を実現できるのかを考えてます。

Railsには優れた仕組みがあってRails Engineというのを使うとfeature単位といったらいいのか、普通のgemより大きい単位でモジュール化することができます。

ECサイトを作るspreeだったり、認証機能のdeviseだったり、フォーラム機能をのForemだったりというのがRails Engineで実装されてます。

基本的にRails Guides通りなのであんまり参考にならないかもですが、実績のログとして残しておきます。

http://railsguides.jp/engines.html

Rails Engineプロジェクトの生成

railsが入っていなかったのでまずはrailsをインストールするところから。またしてもnokogiriのインストールで失敗した。

前にハマったときのメモが残っていたので瞬時に解決。

気をとりなおしてRails Engineベースのpluginを生成します。

–mountableがミソで、Pluginの実装に最初から名前空間がつくので導入するアプリケーションでの名前競合を回避できます。

それからtest/dummy配下にデバッグ用のRailsプロジェクトが生成されます。普段のRails開発のようにrails serverしてpluginの開発をすることができます。

これって普通のgemを開発するときも欲しいんだけどできるのかな?

Rails Engineプロジェクトの実装

Rails Guideの例ではブログ機能を追加するRails Engineの例みたいですね。Rails Engineでも普段のようにscaffoldができます。

Railsアプリケーションのscaffoldと違う点は、テーブル名などに名前空間が付与されるところ。今回はプロジェクト名がblorghなので 
blorgh_articlesテーブルが定義されます。

ちなみにこれは#isolate_namespaceメソッドの効果のようです。

サーバを起動して確認してみるとちゃんと画面が表示されますね。

http://localhost:3000/blorgh/articles

スクリーンショット 2015-03-15 18.59.45

続いて次は記事にコメントをつける機能を実装します。

viewを実装します。

app/views/blorgh/articles/show.html.erb

controllerを実装します。

app/views/blorgh/comments/_comment.html.erb

画面を確認してみます。

スクリーンショット 2015-03-15 19.14.53

できた。これでブログ機能を提供するRails Engineができあがり。

作ったRails EngineをRailsアプリケーションの組み込んでみる

Railsアプリケーションを生成。

普通のgemと同様にGemfileに記述。

Gemfile

Rails Engineのmigrationを実行

これでブログ機能が追加されました。

http://localhost:3000/blog

スクリーンショット 2015-03-15 19.28.47

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。