GoのWebアプリ開発でホットリロードをやりたくて Reflex を使ってみたのでメモ
Reflexの他に Realize 使われているみたいだけど、設定ファイルが必要になるのでコマンドだけで完結できるReflexを選択した。
インストール
$ go get github.com/cespare/reflex
使い方
以下のようなファイルがある場合、
❯ tree .
.
└── main.go
package main
import (
"fmt"
"net/http"
"os"
)
func handler(w http.ResponseWriter, _ *http.Request) {
_, _ = fmt.Fprintln(w, "Hello World")
}
func main() {
http.HandleFunc("/", handler)
port := os.Getenv("port")
if port == "" {
port = "8080"
}
if err := http.ListenAndServe(":"+port, nil); err != nil {
os.Exit(1)
}
}
このコマンドを実行するだけ
reflex -r '\.go$' -s go run main.go
複数の拡張子を対象にする場合
reflex -r '(\.go$|\.js$)' -s go run main.go
Golandの .idea
ディレクトリを無視する場合
reflex -r '\.go$' -R '^.idea/' -s go run main.go
ファイル数が多いサブディレクトリを監視対象にするとエラーになるようなので、JSの node_modules
は無視しないとダメそう
.git
はデフォルトで無視される
他にもいろいろ指定できるけど単純なアプリの場合はこれだけで一旦OK
ReflexはGoに限らずinotify-toolsのように何にでも使えそう