[Ruby] foreman で複数プロセスを管理する

middleman v3.4 と Browserify の環境に適用。

[markdown]
こちらを見てこういう場合に foreman を使うのかとなるほど。

> * [webpackを使った Rails上でのReact開発 – クックパッド開発者ブログ](http://techlife.cookpad.com/entry/2016/07/27/101015)
>
> このままでは、Rails開発者もわざわざJSビルド用の別プロセスを起動しておかなければならないので foreman start で railsとwebpackのプロセスを起動するようにします。

追記:2016/12/09

以下の記事ですが、middleman v3.4 のプロジェクトに導入しています。
現行の middleman v4 には [external_pipeline](https://middlemanapp.com/jp/advanced/external-pipeline/) という仕組みがあり、Webpack や Browserify
のバンドルはこれで実現できます。
誤解を招くサンプルでしたので補足します。
Twitter でご連絡頂いた皆様、ありがとうございました。

## Summary

[Middleman](https://middlemanapp.com/jp/) と Browserify(watchify)を [parallelshell](https://github.com/keithamus/parallelshell) で動かしていたが、他にも動かしているプロセスがあった。

> * [npm: run-script でタスクランナーから解放される | deadwood](https://www.d-wood.com/blog/2015/12/10_7716.html)
> * [Babel | deadwood](https://www.d-wood.com/blog/category/babel)
[foreman](https://github.com/ddollar/foreman) でキレイに管理できそうなので、parallelshell -> foreman に載せ替えるために調査。

### foreman

foreman とはなんぞや。

> * [ruby on rails – foremanとはなんでしょうか 使う利点は? – スタック・オーバーフロー](http://ja.stackoverflow.com/questions/17831/foreman%E3%81%A8%E3%81%AF%E3%81%AA%E3%82%93%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B-%E4%BD%BF%E3%81%86%E5%88%A9%E7%82%B9%E3%81%AF)

– 複数プロセスを管理する Ruby ツール。
– Procfile というファイルに起動するアプリケーションを一覧で記述する。

以下も参考にさせて頂きました。

> * [#281 Foreman – RailsCasts](http://railscasts.com/episodes/281-foreman)
> * [foreman について – 君の瞳はまるでルビー – Ruby 関連まとめサイト](http://www.ownway.info/Ruby/foreman/about)
> * [foreman で アプリケーションを動かす。 – Qiita](http://qiita.com/7kaji/items/6a59977d2ad85604e7fd)

## Installation

> * [ddollar/foreman: Manage Procfile-based applications](https://github.com/ddollar/foreman)

以下を用意して、

“`Gemfile
gem ‘foreman’
“`

`bundle install` しました。

“`prettyprinted
% bundle exec foreman -v
0.82.0
“`

## Usage

middleman と Browserify なので、以下のような `Procfile` を用意。
`$PORT` で foreman ディフォルトの 5000 番となる。

“`:Procfile
middleman: bundle exec middleman server -p $PORT
watchify: npm run watchify
“`

`foreman start` で開発を開始。

“`
% bundle exec foreman start
21:45:59 middleman.1 | started with pid 11824
21:45:59 watchify.1 | started with pid 11825
“`
[/markdown]