golang

プロジェクトの作成とairでのhotreload

0 likes

Go プロジェクト作成からホットリロードまで

Go で新規プロジェクトを始めるときの一連の手順をまとめます。go mod init から、ビルド時のハマりどころ、air によるホットリロード環境の構築までを一気通貫で扱います。

プロジェクトの作成

新規フォルダを作って、その中で以下を実行します。

これで go.mod が生成され、モジュールとしての扱いが始まります。

Go 1.26 以降の挙動に注意

go mod init 直後の go.mod を確認すると、ローカルにインストールしている Go のバージョンと違う行が書かれていることがあります。

これは Go 1.26 以降の仕様変更が原因です。go mod init は新しい go.mod に対して、実行中のツールチェーンそのものではなく 1つ前の Go バージョン を既定で書くようになりました。互換性確保のためのデフォルト挙動です。

実行中の Go バージョンに合わせたい場合は、以下のように明示的に書き換えます。

Hello World

最小構成で動作確認します。

実行する

開発中はソースから直接実行するのが手軽です。

ビルドして実行する

バイナリを生成して実行する場合は以下のようにします。

ここで -buildvcs=false というオプションが登場します。

-buildvcs=false は「コンパイルを雑にする」オプションではありません。 Git 情報(コミットハッシュ等)をバイナリに埋め込む処理だけを無効化するオプションです。

Git 管理下でない、もしくは Git 状態の取得に失敗する環境(CI のサンドボックス、コンテナ内など)では、このオプションを付けないとビルド時にエラーや警告が出ることがあります。

air でホットリロード環境を作る

ファイル変更を検知して自動で再ビルド・再起動してくれる air を導入します。

インストール

go install でインストールしたバイナリは $(go env GOPATH)/bin に置かれます。PATH が通っていない場合は、シェルの設定に追記しておきます。

初期化

プロジェクトルートで以下を実行すると、.air.toml が生成されます。

.air.toml の調整

そのままだと、先ほど触れた Git 情報の埋め込み問題で起動に失敗するケースがあります。.air.tomlcmd-buildvcs=false を追加しておくと安全です。

# 変更前
cmd = "go build -o ./tmp/main ."
 
# 変更後
cmd = "go build -buildvcs=false -o ./tmp/main ."

あとは、

で起動すれば、ファイルを保存するたびに自動で再ビルド・再起動されるようになります。

まとめ

  • go mod init 後は go.mod の Go バージョン行を確認する(Go 1.26 以降は1つ前のバージョンが既定)
  • ビルドで Git 関連エラーが出るなら -buildvcs=false を試す
  • air を入れるときも、同じ理由で cmd-buildvcs=false を足しておくと無難

最小構成でつまずきやすい箇所を抑えておくと、その後の開発がスムーズに進められます。