2016年5月6日金曜日

【Rails4.2.5】Railsエンジンでサブプロジェクトを作成する

  • 公開日:2016年05月06日
  • 最終更新日:2016年05月09日

記事概要

Railsでエンジン機能を使ってサブプロジェクトを作成する方法をまとめた記事です。

環境

  • rbenv
  • bundler
  • rails 4.2.5
  • ruby 2.3.0

Railsエンジン

Railsエンジンは、ホストアプリケーションに機能を提供します。
例えば、ニュースを表示するWEBアプリに、管理画面やユーザー機能を追加する時に利用します。

エンジンとアプリケーションは、細かな違いを除けばほぼ同じです。
なので、エンジンはプラグインになることもでき、プラグインがエンジンになることもできます。

Railsエンジンの利点

Railsエンジンを使うと、アプリを小さく保つことができます。
これは素晴らしい利点です。

WEBアプリは継続的なアップデートが必要になります。Railsは優れたフレームワークで、高速な開発を可能にしますが、アップデートは、WEBアプリを肥大化させます。
肥大化したアプリの保守や新規機能の追加は大変です。ファイルの増大はファイルの容量を増加させ、バージョン管理の速度も遅くします。

しかし、Railsエンジンを使ってサブプロジェクトとして、アプリの機能を作成することで、コードの可読性、生産性、再利用性を大幅に向上させることができます。

有名なRailsエンジン

ログイン機能を提供するdeviseやEC機能を提供するSpreeなどが有名です。

エンジンプロジェクトの注意点

エンジンを作成するとき、エンジンプロジェクトは、メインプロジェクトとは別のフォルダに作成します。

terminal

cd workspace

ls -l

drwxr-xr-x   main_project

上記のように、メインプロジェクトが/workspace/main_projectのようなフォルダ構成になっている場合、メインプロジェクトのエンジンとわかるようにサブプロジェクトを作成すると良いでしょう。

terminal

cd /workspace

ls -l

drwxr-xr-x   main_project
drwxr-xr-x   sub_project

エンジン作成

では、実際にエンジンのサブプロジェクトを作成します。

terminal

cd /workspace

// mini testを使う場合
bundle exec rails plugin new user_engine --mountable

// rspecを使う場合
bundle exec rails plugin new user_engine --mountable -T --dummy-path=spec/dummy

上記のコマンドで、エンジンサブプロジェクトが作成されます。
rspecを使う場合は、spec/dummyにするのがポイントです。通常は、test/dummyになります。

DB作成

データベースが必要な場合は、通常のrailsアプリと同じように作成します。

terminal

cd /workspace/user_engine/

bundle exec rake db:create
bundle exec rake db:migrate RAILS_ENV=test
bundle exec rake db:migrate RAILS_ENV=development

準備は以上です。

アプリ立ち上げ

作成したエンジンを立ち上げます。

terminal

cd /workspace/user_engine/test/dummy

// rspecを使っている場合
cd /workspace/user_engine/spec/dummy

// サーバー立ち上げ
rbenv exec bundle exec rails s -b 0.0.0.0

test/dummy(specの場合はspec/dummy)配下でサーバー立ち上げコマンドを叩くことに注意してください。

成功した場合は、通常プロジェクトと同じようにブラウザにデフォルト画面が表示されます。

まとめ

Railsのエンジン機能は、スタートアップなどで、高速に色々な機能実装をしていく場合に役立ちます。
作成したエンジンは他のプロジェクトでも使いまわせます。
エンジンプロジェクトの資産がたまれば、さらに多くのアプリを高速に量産できるようになります。

うまくエンジンを利用して、疎結合な優れたアプリを量産してください。

以上。

PICK UP オススメ書籍

運営サイト(railsで作成しています)

参考記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...