Air は Go で実装されたアプリケーションで「ホットリロード」をするツールで,Go コードなど関連するファイルの変更を監視して,変更があったら自動的にビルドをしてアプリケーションを再起動できる.例えば Go で API を開発しているときに,コードを修正した後に毎回 go run main.go
を実行し直すのは面倒なので,Air を使うと開発者体験を向上できる✌️
Air を試す
今回はサンプルとして Echo を使った API に Air を組み込む.GitHub に載っている Echo のサンプルコードを抜粋して main.go
を準備した.
package main import ( "net/http" "github.com/labstack/echo/v4" ) func main() { e := echo.New() e.GET("/", hello) e.Logger.Fatal(e.Start(":1323")) } func hello(c echo.Context) error { return c.String(http.StatusOK, "Hello, World!") }
Air を試すのは簡単で,air
コマンドを go install
コマンドでセットアップして,プロジェクトのルートディレクトリで air
コマンドを実行するだけ❗️以下のように API が起動されて,main.go
を更新すると自動的にビルドをして API が再起動される.
$ go install github.com/cosmtrek/air@latest $ air __ _ ___ / /\ | | | |_) /_/--\ |_| |_| \_ , built with Go watching . !exclude tmp building... running... ____ __ / __/___/ / ___ / _// __/ _ \/ _ \ /___/\__/_//_/\___/ v4.10.2 High performance, minimalist Go web framework https://echo.labstack.com ____________________________________O/_______ O\ ⇨ http server started on [::]:1323 # # `main.go` を更新すると... # main.go has changed building... running... ____ __ / __/___/ / ___ / _// __/ _ \/ _ \ /___/\__/_//_/\___/ v4.10.2 High performance, minimalist Go web framework https://echo.labstack.com ____________________________________O/_______ O\ ⇨ http server started on [::]:1323
.air.toml
ファイル
Air では .air.toml
ファイルを使ってデフォルトの挙動を上書きできる.例えば include_ext
で監視対象にする拡張子を設定したり,exclude_dir
で監視対象外にするディレクトリを設定したり.プロジェクトごとに細かく挙動をカスタマイズできるので .air.toml
ファイルを使う場面は多いと思う❗️
[build] include_ext = ["go", "tpl", "tmpl", "html"] exclude_dir = ["assets", "tmp", "vendor", "testdata"]
他には bin
で一時的にビルドしたバイナリファイルの保存場所を設定したり,cmd
で Go のビルドコマンドをオプション含めて細かく設定したり.バイナリファイルを保存する tmp
ディレクトリは .gitignore
に追加しておくと良さそう👌
[build] bin = "./tmp/main" cmd = "go build -o ./tmp/main ."
air init
コマンド
.air.toml
ファイルの雛形は air init
コマンドを使って簡単に作れる.設定項目の一覧とデフォルト値を確認するためにも一度作ってみると良いと思う.
$ air init .air.toml file created to the current directory with the default settings
そして,.air.toml
を指定して Air を実行するときは以下のように -c
オプションを使う.
$ air -c .air.toml
まとめ
API など Go でアプリケーションを実装するときは Air を導入してホットリロードをしよう❗️開発者体験〜