blog.yuzu441.com

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成分高めなので他の言語は意識して触っていく必要があるが仕事で触れるといいな