foremanでターミナルウィンドウを減らす
railsでWebアプリを作っていると実行させっぱなしにしておく必要があるコマンドがいくつかある。
例えば以下のようなもの。
- rails server
- guard
作りがマズい(粗い)とポートを変えてWebサーバを複数立ち上げたりすることもある。
今まではその数だけターミナルを開いてそれぞれ実行していたが、パラメータを含めてコマンドを毎回打つのは面倒だし、ターミナルの切り替えも面倒だった。
foremanがそれを解決してくれた。
前提
- rails serverが実行可能
- bundle exec guardが実行可能
- foremanがインストールされている
Procfileの作成
アプリのrootディレクトリに以下の内容のProcfileを作成する。
web: rails server
guard: bundle exec guard -i
foremanを実行
foremanを実行する。
bundle exec foreman start
2つのプロセスが実行状態になり、出力が色分けして表示される。
foremanを停止
foremanを実行中のターミナルでctrl-cを押すと実行していたすべてのプロセス停止する。
Herokuを使用する場合
Herokuもforemanを使用しているためProcfileを含めたソースをアップロードするとHerokuのforemanがそれを使用してしまう。
その場合はProcfileをProcfile.dev等にリネームし、
bundle exec foreman start -f Procfile.dev
のように開発環境ではファイルを指定すれば良い。
感想
まだ使い始めたばかりだけれど便利そう。