チラシの裏

GoのWebアプリ開発にReflexを使ってホットリロードする

2020.11.17

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のように何にでも使えそう

comments powered by Disqus