RailsでSpringを導入して開発効率を上げる

スポンサーリンク

Spring は Rails アプリケーションの preloader(プリローダー)の gem です。Rails アプリケーションをバックグラウンドで走らせたままにしておくことにより(pre + load = 前もってロードしておく)、bin/rails や bin/rake コマンドの2回目以降の起動時間が短縮されます。

— 環境 —
Mac OS X El Capitan 10.11.2
Rails 4.1.1
Ruby 2.1.2

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

bin/*** コマンド実行の時間短縮により、Rails アプリケーション開発効率の向上を期待できます。なお Spring は、Rails 4.1 以降は標準で付属されている。

Spring インストール

‘spring’ を Gemfile に書きます。Rails 4.1 以降であればデフォルトで記載されてあるはずです。4.1 未満のバージョンの場合で記載がなければ追記する。

また今回は、テストフレームワークに RSpec を使っていますので、Spring 対応の RSpec コマンド(bin/rspec)用の gem である ‘spring-commands-rspec’ も追記しました。不要ならこちらは記載しない。

Gemfile

インストール実行。

bin/spring, bin/rspec を生成するため、また bin/rails, bin/rake を Spring 対応に変換するために、以下のコマンドを実行します。

これにより、bin/spring, bin/rspec が生成されるとともに、bin/rails, bin/rake に以下コードが追加されて、Spring 対応のコマンドと変換される。

Spring の使い方など

続いて Spring の使い方など。

bin/*** コマンド実行の2回目以降は、自動的に Spring が起動されて Rails アプリケーションがバックグラウンドで起動中となります。

Spring がバックグラウンドで起動中かどうかの状態を確認する。

Spring 停止中の場合。

Spring 起動中の場合。

起動中の場合、stop で停止できる。

Spring 対応のコマンドを利用する場合…

の代わりに

のコマンドを使うようにします。このあたり bundle exec *** と bin/*** の違いについては、以下の Qiita 記事が詳しい。

Rails 4.1以降のコンソールコマンドは必ず bin/ を付けなきゃいけないの? – Qiita

Spring による実際のコマンド時間短縮を確認

続いて、Spring によって実際にコマンド起動が速くなることを確認してみます。

Spring が起動中の場合、前もっていったん停止しておく。

例として Rails アプリケーションの概要を表示する、rake about コマンドを time コマンドで計測してみる。

まずは Spring 停止中の場合。

/usr/bin/time としているのは、自分が zsh ユーザーなので単に time と打つと、zsh の time コマンドが使われるため。詳しくは以下。

Zsh – timeコマンドについて調べた – Qiita

1回目のコマンド実行の後、Spring のステータスを確認してみますと…

Spring が起動中になっていることを確認できる。つまり、2回目以降の bin/*** コマンドでは Spring が起動中でなので、コマンド実行の時間短縮を期待できます。

2回目を実行。

real が16秒から約1.4秒と10倍以上速くなりました。Spring すごい。

続いて、RSpec の request spec テストを実行してみる。

こちらも real が51秒から37秒へと、14秒ほど短縮されました。Spring によるコマンド起動時間の短縮は目を見張るものがありますね。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!