開発サーバをThinからPowに切り替えて開発効率アップ! (Mac限定)


「小さなチーム、大きな仕事」でお馴染みの 37 signailsが開発した「設定が不要なRails & RackサーバPow」を使いはじめました!
このPowを使うメリットは、

* コマンド一つでPowサーバにRailsアプリへのリンクを作れる
* LAN内にあるスマホ/タブレットから開発中のURLにアクセスできる

ちなみにこちらはMac限定です。


🏀 Powインストール

Powのインストールは次のコマンドのみ。もし、万一エラーが出るようなら37signals/pow GitHubを確認してみてください。

curl get.pow.cx | sh

🤔 Powderのインストール

Powのコマンド入力支援してくれるPowderをインストール。

gem install powder

🎂 Powへのリンクの作成

Rails/Rackアプリケーションのフォルダで以下を入力するとpowへのリンクを作成できます。

powder link
> Your application is now available at http://app_folder_name.dev/

ブラウザでhttp://app_folder_name.dev/にアクセスするか、powder openと入力するとアプリケーションが表示されます。そのほかのpowderのコマンドについては、下にまとめています。

🍣 LAN内のスマートフォン/タブレットからアプリケーションにアクセス

pow + xip.ioによって、LAN内のスマートフォン/タブレットからアプリケーションに簡単にアクセスできます。
まず、Mac側のローカルIPを確認。

ifconfig
...
inet 192.168.24.99
...

次にスマホ/タブレットのブラウザから、http://app_folder_name.192.168.24.99.xip.io/にアクセスするとアプリを表示することができます。

🐰 Guard::Powのインストール

Railsには、config/environment.rbなど再起動しないと反映されないファイルが幾つかあります。
これをGem Guardで監視して変更があった場合には、自動でPowが再起動されるようにします。

gem install guard-pow

😼 Guardファイルの設定

Guardはファイル変更を監視して、サーバの再起動やテストの実行などを行ってくれるGemです。詳細は「RSpec/Spork/Guard/Growl/Rails 3.2.9で作る - プリチーなTDD環境!」をご覧ください。

ここからはGuardとの連携方法について説明します。

まず、Guardfileを生成/更新します。

guard init pow

このコマンドを実行すると以下のようにプロジェクト直下のGuardfileが更新されます。

guard 'pow' do
watch('.powrc')
watch('.powenv')
watch('.rvmrc')
watch('Gemfile')
watch('Gemfile.lock')
watch('config/application.rb')
watch('config/environment.rb')
watch(%r{^config/environments/.*\.rb$})
watch(%r{^config/initializers/.*\.rb$})
end

これでGuardがファイルを監視して、変更があった場合にはPowを自動で更新してくれます。

🎃 補足: localhostでアクセスするリンク先の設定

localhostでアクセスするリンク先は次のコマンドで設定できます。

ln -s /app/path/to/ ~/.pow/default

😸 補足: Pow-RVMの連携Rubyのバージョンを指定する

もし、Powでリンクを張ったプロジェクトのRVMのバージョンを指定したい場合は、まずプロジェクトの直下に.rvmrcを作成して以下を登録。

rvm 1.9.3

次に同じくプロジェクトの直下に.powrcを作成して以下を追加。

if [ -f "$rvm_path/scripts/rvm" ] && [ -f ".rvmrc" ]; then
source "$rvm_path/scripts/rvm"
source ".rvmrc"
fi

RVM関連の設定詳細は公式ページの2.3.2 Specifying Ruby Versions with RVMを参照。

🗻 補足: Powを使っていてError starting application(Error: Response was not received)が発生する場合

Mac/Homebrew/Powの環境で、Error starting application(Error: Response was not received)がある一定の確率で出る場合は、Nokogiriのインストール方法に問題がある可能性があります。

Nokogiriを削除して、Nokogiri公式のインストール方法で再イントールしてください。

参考ソース(タイトルからはわかりにくいですがPowについてのトラブルっぽいです):
nginx - Rails (local) server shutdown problem - Stack Overflow

🍮 補足: Powderのコマンド一覧

使いそうなコマンドをピックアップしました。詳細はRodreegez / powder | GitHubにあります。

powder link

=> current_dirのシンボリックリンクを作成
powder link [bacon]

=> ファイル名指定のシンボリックリンクを作成
powder remove

=> シンボリックリンクを削除
powder open

=> ブラウザでcurrent_dirのアプリケーションを表示
powder list

=> ~/.powのシンボリックリンク一覧を出す
powder applog

=> アプリケーションのログをtail -fで出力
powder restart

=> サーバPowの再起動
powder cleanup

=> アクセス出来ないアプリケーションへのリンクを削除
powder update

=> Powのアップデート

🚜 補足: Powのアンインストール

もし何らかの事情でPowをアンインストールしたくなった場合は次のコマンドを実行。

curl get.pow.cx/uninstall.sh | sh

アンインストールの詳細は公式ページの1.2 Uninstalling Powを参照。

😀 関連記事

Rails 3.2.9/Bootstrap/Haml プロジェクト新規作成 最短ガイドだよ! にてGuardの設定/ブラウザのオートリロードの方法などを載せています。

🚕 参考リンク

😎 変更来歴

12/06 pow + xip.ioの説明を追加。コマンド一覧の位置を変更。別途説明を追加。

12/16 11:30 pow + xip.ioのアドレスがまちがっていたので修正

12/18 19:00補足: Powを使っていてError starting application(Error: Response was not received)が発生する場合を追加

12/18 20:40補足: Powのアンインストールを追加

12/18 20:45補足: Pow-RVMの連携Rubyのバージョンを指定するを追加

01/15 20:50補足: localhostでアクセスするリンク先の設定を追加

🐹 テスト環境

テスト環境は以下のとおりです。

OS : Mac Lion(OS X 10.7)
Ruby : 1.9.3
Rails : 3.2.9
haml : 3.1.7
coffee-script : 3.2.1
Rspec : 2.12.0

📚 おすすめの書籍