kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Air: Go アプリケーションでホットリロードをする

Air は Go で実装されたアプリケーションで「ホットリロード」をするツールで,Go コードなど関連するファイルの変更を監視して,変更があったら自動的にビルドをしてアプリケーションを再起動できる.例えば Go で API を開発しているときに,コードを修正した後に毎回 go run main.go を実行し直すのは面倒なので,Air を使うと開発者体験を向上できる✌️

github.com

Air を試す

今回はサンプルとして Echo を使った API に Air を組み込む.GitHub に載っている Echo のサンプルコードを抜粋して main.go を準備した.

echo.labstack.com

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 を導入してホットリロードをしよう❗️開発者体験〜