Guard + Powで快適Sinatra開発

Sinatraを使ってWebアプリケーションを作る際、Sinatraを手動で何度も再起動するのは面倒くさくないですか?
そんなときはGuardとPowを使えばSinatraのファイルを書き換え保存するだけで自動的に再起動させることが可能です。
これでテンポよく快適に開発出来ます。

Powの導入

~/.pow/以下にRackアプリのディレクトリへのシンボリックリンクをはるだけで、http://ほにゃらら.dev/でそのアプリにアクセス出来るようになります。
Homebrewを使っている場合は

% brew install pow

で導入出来ます。(多分)

僕はbrewを使わずに入れました。Powにはnode.jsが必要です。
僕はnvmを使ってnode.jsインストールしてPowのサイトに書かれたコマンドを実行してインストールしました。お好きな方で。
参考:Node.js 入門
参考:Pow: Zero-configuration Rack server for Mac OS X

Powderの導入

Powを更に便利に使うためにPowderをインストールします。

% gem install powder

で入ります。
参考:Pow使うならPowder入れておくだァーッ! - Meltdown Countdown rev.

Guardの導入

Guardを使えばファイルが変更されたら自動で何かすることが出来ます。
自動で何をするのかをGuardfileに書きます。
bundlerやcucumberなど様々なツールに対応しています。(参考:List of available Guards · guard/guard Wiki · GitHub
guard-powを使えばSinatraのファイルをいじったら再起動、といったことが簡単に出来ます。

% gem install guard-pow

参考:Guard::PowでPowを更に快適に使う – ひげろぐ

試しにSinatraアプリを作ってみる

コマンドログ
Nil% mkdir hello
Nil% cd hello
Nil% cat > web.rb
require 'sinatra'  
get '/' do
  'Hello world!'
end
Nil% cat > config.ru
require "./web.rb"
run Sinatra::Application
Nil% cat > Guardfile
guard 'pow' do  
  watch('web.rb')
end
Nil% cat > .rvmrc
use 1.9.2
Nil% powder link
Your application is now available at http://hello.dev/
Nil% guard
Guard is now watching at '/Users/sei/hello'
ソースコード


この状態でweb.rbを書き換えると

Pow restarted.

と表示され、無事再起動していることが確認できます。

ハマったところなど

  • 僕はrvmでRubyを管理してるのですが、.rvmrcの中で使うRubyのバージョンを指定するのを忘れて怒られました。
  • guard pow initでGuardfileを生成する方が楽かも。(Railsアプリ等の場合)
  • 僕の場合、Sinatraのアプリの中に直接日本語を書いてたりするのでconfig.ruの先頭に1行これを付け加えてます。
# -*- coding: utf-8 -*-

まとめ

この記事はざっくりすぎるので参考リンクを読んだ方が詳しく書いてます。
ざっくりまとめると

  • Powを使うと~/.pow/シンボリックリンクはるだけでRackアプリが動く
  • Powderを使うとシンボリックリンクはるのや、Powに関わるあれやこれやをやってくれる
  • Guardを使うとPowで動いてるRackアプリを自動で再起動出来る

以上です。