- 公開日: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などが有名です。
エンジンプロジェクトの注意点
エンジンを作成するとき、エンジンプロジェクトは、メインプロジェクトとは別のフォルダに作成します。
cd workspace ls -l drwxr-xr-x main_project
上記のように、メインプロジェクトが/workspace/main_projectのようなフォルダ構成になっている場合、メインプロジェクトのエンジンとわかるようにサブプロジェクトを作成すると良いでしょう。
cd /workspace ls -l drwxr-xr-x main_project drwxr-xr-x sub_project
エンジン作成
では、実際にエンジンのサブプロジェクトを作成します。
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アプリと同じように作成します。
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
準備は以上です。
アプリ立ち上げ
作成したエンジンを立ち上げます。
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のエンジン機能は、スタートアップなどで、高速に色々な機能実装をしていく場合に役立ちます。
作成したエンジンは他のプロジェクトでも使いまわせます。
エンジンプロジェクトの資産がたまれば、さらに多くのアプリを高速に量産できるようになります。
うまくエンジンを利用して、疎結合な優れたアプリを量産してください。
以上。
0 件のコメント:
コメントを投稿