airを使ってlive reloadをやってみる
tags: golang
2024/12/20追記
air-verse/air: ☁️ Live reload for Go appsにrenameされたらしい
2024/12/20 追記ここまで
cosmtrek/air: ☁️ Live reload for Go apps を使ってgolangでapi serverなどを作るときにライブリロードできるらしいのでやってみる
テスト用のgoコード
まずはテスト用のgolangで書かれたhello worldを返スコードを用意する
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, world")
})
log.Fatal(http.ListenAndServe(":8080", nil))
}
これを go run main.go
して、雑にhttpリクエストを投げる。リクエストを投げるのには最近 ducaale/xh を使っている
$ xh localhost:8080
HTTP/1.1 200 OK
Content-Length: 13
Content-Type: text/plain; charset=utf-8
Date: Sat, 20 Jan 2024 14:28:02 GMT
Hello, world
air導入
本題のairを導入してみる
install
go install github.com/cosmtrek/air@latest
設定ファイルを作る。以下を実行すると.air.toml
ができる
air init
設定ファイルができたらair
コマンドを使って実行してみる
air
これでairがgoのコードをビルド、実行してくれて再度localhost:8080
にリクエストを投げるとhello worldが返ってきて、その状態でコードの書き換えを行うとちゃんと反映されていた。
ちなみに
これどうやって実行するファイルを選んでるんだろうと思って、.air.toml
を確認すると以下の記述があったのでここを変えるとcmd/
のようなディレクトリ構造のプロジェクトでもライブリロードが実現できそう
# .air.toml
[build]
cmd = "go build -o ./tmp/main ."
2022年にgolangちょっとやって、去年はRustをちょっとやったが両方とも何も覚えていないに等しいのでやはりちょっとずつでも書いていく事が重要だな…
どうしても使い慣れたnode.jsや、今年はdeno触り始めていて仕事も含めるとjs/ts成分高めなので他の言語は意識して触っていく必要があるが仕事で触れるといいな