goemonでMojolicious::Liteでの開発速度を加速させてみる

眠いんでメモ程度に。そのうちちゃんと書き直すかも。

[Big Sky :: 開発速度を加速するツール、goemon を書いた。](http://mattn.kaoriya.net/software/lang/go/20150223224545.htm)

[Github::mattn/goemon](https://github.com/mattn/goemon)

こいつは学習コスト低くて良さげだぜってことで、普段簡単なアプリを作る時に愛用してるMojolicious::Liteで使ってみた。

今回はMojolicious使ったけど、同じノリで他のFWでも他言語でも使える感じが良い。

<br>

# ファイルの配置

いつも通りの作業ディレクトリ下で`$ goemon -g > goemon.yml`を実行してとりあえず設定ファイルを作成しておく。

```:作業ディレクトリ以下
├── goemon.yml
├── myapp.pl
└── public
    ├── test.css
    ├── test.html
    └── test.js
```

# goemon.ymlの記述

1. 各所を静的ファイルの置き場所を`./assets/`からMojoliciousで使う`./public`に変える。
2. `*js`についてはどうもデフォルトで生成されるminifyコマンドだと`*.min.js`までminifyしようとして無限にファイルが増殖しちゃうので、苦肉の策でifを使う感じに。(githubじゃ未完成っつってるけど`:jsmin`でも一応動きそう。)
3. `myapp.pl`更新時に再起動＆ライブリロードしてくれるように記述。
 
```:goemon.yml
livereload: :35730
tasks:
- match: './public/*.js'
  commands:
  - 'if ! expr ${GOEMON_TARGET_FILE} : ".*\.min\.js" > /dev/null; then  minifyjs -m -i ${GOEMON_TARGET_FILE} > ${GOEMON_TARGET_DIR}/${GOEMON_TARGET_NAME}.min.js; fi'
  - :livereload /
- match: './public/*.css'
  commands:
  - :livereload /
- match: './public/*.html'
  commands:
  - :livereload /
- match: '*.pl'
  commands:
  - :restart
  - :livereload /
```


# HTMLのヘッダにライブリロード用の記述を加える

静的なhtmlファイルとかmyapp.plで作るhtmlタグとかに追加しておく。

```html
<script src="http://localhost:35730/livereload.js"></script>
```

# 起動

要するに`$ goemon [いつものコマンド]`で良い。

Mojolicious::Liteの場合は`$ ./myapp.pl daemon`でサーバ起動なので・・・

```
$ goemon ./myapp.pl daemon
GOEMON 2015/02/26 00:50:02 goemon.go:380: starting command [./myapp.pl daemon]
GOEMON 2015/02/26 00:50:02 goemon.go:351: loading /Users/*****/goemontest/goemon.yml
GOEMON 2015/02/26 00:50:02 goemon.go:262: goemon loaded /Users/*****/goemontest/goemon.yml
GOEMON 2015/02/26 00:50:02 goemon.go:368: starting livereload
[Thu Feb 26 00:50:03 2015] [info] Listening at "http://*:3000"
Server available at http://127.0.0.1:3000
```

# 各種ファイルを書き換えてみる

## CSSファイル

例えばCSS何かを書き換えて保存すると、ライブリロードが走りブラウザ側も勝手に再読み込みしてくれる。便利！

```
GOEMON 2015/02/26 00:53:04 goemon.go:153: "/Users/*****/goemontest/public/test.css": CHMOD
GOEMON 2015/02/26 00:53:04 goemon.go:162: reloading /
```
## JSファイル

jsだったら保存時にminifyもしてくれる。便利!!

```
GOEMON 2015/02/26 00:59:55 goemon.go:153: "/Users/*****/goemontest/public/test.min.js": CHMOD
GOEMON 2015/02/26 00:59:55 goemon.go:200: executing if ! expr /Users/*****/goemontest/public/test.min.js : ".*\.min\.js" > /dev/null; then  minifyjs -m -i /Users/*****/goemontest/public/test.min.js > /Users/*****/goemontest/public/test.min.min.js; fi
GOEMON 2015/02/26 00:59:55 goemon.go:162: reloading /
```

```
$ ls public/
test.css	test.html	test.js		test.min.js
```

## plファイル

myapp.plだったら保存時にプロセス再起動してくれる。便利!!!

```
GOEMON 2015/02/26 00:57:03 goemon.go:153: "/Users/*****/goemontest/myapp.pl": RENAME
GOEMON 2015/02/26 00:57:03 goemon.go:387: restarting command
GOEMON 2015/02/26 00:57:03 goemon.go:111: os: process already finished
[Thu Feb 26 00:57:04 2015] [info] Listening at "http://*:3000"
Server available at http://127.0.0.1:3000
GOEMON 2015/02/26 00:57:08 goemon.go:162: reloading /
```

<hr>

学習コスト低くてそれほど戸惑う要素もないし、記述も簡単で応用も効きそうな感じが良い！


# 補足版書いた

[goemonでMojolicious::Liteでの開発速度を加速してみた - そんな今日この頃でして、、、](http://blue1st.hateblo.jp/entry/2015/03/03/000420)