humangas's blog

自分用のメモなので雑です。

go+html,css,jsをライブリロードするのは、mattn/goemonが一番良かった

TL;DR

goで、webアプリとか作ってる時に、ファイル保存→ WEBライブリロードが出来ないと、苦痛でしょうがない。 それを解決するツールで最適だったのが、mattn/goemonだったという話(私にとっては)。使い方も超簡単。感謝。

使い方

簡単なので、以下をサッとみればわかる。

ポイントを記載しておく

Installation

$ go get github.com/mattn/goemon/cmd/goemon

五右衛門の設定ファイルを出力

$ goemon -g > goemon.yml
$ vim goemon.yml
# watch対象のパスを変えたりする

リロード対象のHTMLには以下を突っ込んでおく

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

See also: https://github.com/mattn/goemon#livereload

このポート番号は、goemon.ymlの以下と一致させておく

livereload: :35730

goemon 起動

$ goemon go run main.go

あとは、ひたすら開発しとけばいい。あぁ、楽だ。

オマケ

go専用ツールというわけではないので、markdownファイルだけということもできるもよう

$ goemon -g md > goemon.yml
$ goemon --

その場合は、mdファイルだけ監視しておいて、保存したら、任意のコマンドを流してHTMLにする、で、livereload: とかしとけばいい。

コレ見ればわかる。

jsをmin化したいなら、↓を入れといて、js保存時の処理で流せばいい。

$ npm install -g minifyjs

試行錯誤メモ

goemonに辿り着く前に、色々やってみたりしたので、そんときのメモ

まず、このライブリロードをやりたければ、選択肢は無数にあると思う。以下など。

  1. fswatchをmakeとか自作スリクプと組み合わせる
  2. go製の他のライブリロード系ツールをつかう
  3. gulpで、goもbuildしてしまう

fswatch + make

色々試したりしてみてみたが、ドンピシャがなくて、goemonに出会う前までのしばらくはこれでやっていた。
要は、こういう感じにする。

GO_FILES = $(wildcard *.go)
serve:
    @make restart
    @fswatch -o . | xargs -n1 -I{}  make restart || make kill

※ fswatchでなくても、ファイル監視できるツールならなんでもいいけど。

参考にしたサイト:

あとは、自作スクリプトなりを組み合わせて、別にこれでもそれなりには出来ていたけど、以下ができてなくてめんどくさいなと思ってた。
本質的でないところに時間とられたくもないし。。

気に入ってないところ

  • いちいち、セキュリティ警告がでる:そのアプリの証明書をつくればいけるがめんどくさい
  • ビルドできるのはいいけど、画面描画は手動でやってる。browser-sync的にやりたい。

go製の他のライブリロード

go自体のファイルを監視、ビルドするツールは色々あり、それはそれで使えるツール達だったが、今回の静的ファイル(HTMLとか)との組み合わせだとサッとはできなかった。

  • gin(WebフレームワークのGinとは違うやつ)
  • fresh
  • ReRun

See also: http://www.spidersoft.com.au/2014/live-code-reload-in-golang/

gulpでやる

フロント系リソース(HTML, CSS, JS)の開発だけなら、別にこれでいいと思う。
これは、gulpるで書いた。

ここに、goファイルを保存したらリロードも入れたいわけだ。

プラグインは一杯あるし、var exec = require('child_process').exec; とか使えば、OSコマンドは叩けるのでなんでもできそうだし。

でも、いちいちgulpfileを組むのがめんどくさいし、goの開発したいのに、gulpでつうのも何か気持ち悪い。なので、途中でやめた。

じゃあ、go製のタスクランナーは?

godo という go版gulp的なものがあった。 goで、gulpfileみたいなやつを書く感じ。
正直なんでもできそうな感じはしたけど、それだとmake+fswatchでもいい気がするし、いちいち覚えるまでモチベーションも上がらなかったのでやめた。

まとめ

結局、goemonでサクッとできた。とても気持ちいい。

ところで、goでなんか調べていると、このmattnさんの記事がすごく出て来て勝手にお世話になっている。 で、人追いしてたら、memoとりツールも作られていて、それが自分が欲しかった要件を満たしていて、すごく感激した。

mattn/memo

カスタムも出来るようになっているし、zsh completionと組み合わせると便利すぎた。
これから使っていくと思うけど、自分のMUSTツールになりそう。