もた日記

くだらないことを真面目にやる

Railsメモ(10) : Springでrails, rakeコマンドを高速化する

github.com

SpringというRails application preloaderを使用すると、railsrakeコマンドの起動が高速化できる。
Rails 4.1以降では標準で組み込まれているため知らず知らずに使用していたようだ。

確かにGemfileには

group :development, :test do
 …
  gem 'spring'
 …
end

の記述があり、rails new時には下記ログが表示されていた。

 …
         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted


上記コマンドを実行したことでbin/springが生成され、bin/railsbin/rakeには下記コードが挿入されている。

begin
  load File.expand_path("../spring", __FILE__)
rescue LoadError
end

Springの使用方法


./bin/rails./bin/rakeを実行すれば、Springが起動していない場合は自動で起動するようだ。
確かに./bin/rake statsの実行で1回目は3秒以上かかっているが、2回目は1秒以内で完了している。

$ ./bin/spring stop
Spring stopped.
$ ./bin/spring status
Spring is not running.
$ time ./bin/rake stats
 …省略…
./bin/rake stats  0.17s user 0.04s system 6% cpu 3.553 total
$ ./bin/spring status
Spring is running:

11611 spring server | billboard | started 7 secs ago
11614 spring app    | billboard | started 7 secs ago | development mode
$ time ./bin/rake stats
 …省略…
./bin/rake stats  0.19s user 0.04s system 43% cpu 0.528 total

direnvを使用して./bin/rails./bin/rake./binを省略する


今までは毎回./binを入力していたが、SpringのREADMEを見るとdirenvを使用するとこれを省略できるらしい。

github.com

インストール方法は下記の通り。makegolangが必要。

git clone https://github.com/direnv/direnv
cd direnv
make install

続いてシェルの設定ファイルに下記行を追加。今回はzshを使用しているので~/.zhsrcに追加する。

eval "$(direnv hook zsh)"

最後にアプリケーションのディレクトリに移動して下記内容の.envrcファイルを作成。

PATH_add bin

もし、ファイル作成後に下記エラーが出た場合はdirenv allowを実行する。

direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
$ direnv allow
direnv: loading .envrc
direnv: export ~PATH

これでアプリケーションのディレクトリに移動すると./binパスが自動でロードされるため、./binを付けずにrailsrakeと入力するだけでよくなる。

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails