k01ken’s b10g

He110 W0r1d!

Airを使ってGo言語のWebアプリケーションフレームワークのGinのホットリロードを有効にする

開発環境は、Windows 10 Pro(64bit) + go version go1.15.3 windows/amd64

Go言語のWebアプリケーションフレームワークを使う際に、Webサーバーを立ちあげて、ソースコードを書き換えるたびに、サーバーを一時停止して、再起動させるのが面倒だったので、ホットリロードする方法がないか探して、Airが良いということなので、使うことにしました。

Airをインストール

コマンドプロンプト上で、以下のコマンドを実行し、Airをインストール

go get -u github.com/cosmtrek/air

終了したら、

air -v

とコマンドを打つと、以下のように表示されたら、インストール成功です。
f:id:k01ken:20210730144617p:plain

Ginのプロジェクトを作成

次に、コマンドプロンプト上で、以下のコマンドを実行

cd c:\  && mkdir gin_sample && cd gin_sample && go mod init

以下のソースコードを、同じディレクトリにmain.goという名前で保存します

package main

import(
  "github.com/gin-gonic/gin"
)

func main(){
  r := gin.Default()
  r.GET("/helloworld", func(c *gin.Context) {
    c.JSON(200, gin.H{
      "message": "HelloWorld"
    })
  }
  r.Run(":5000") 
}

次に、Airを初期化するために、以下のコマンドを実行

air init

そうすると、同じディレクトリ内に、.air.tomlというファイルが作成されています。
このまま、airとコマンドを打ってしまうと、ディレクトリ内にあるすべてのファイルを監視対象としてしまうので、除外するファイル、例えば、node_modulesは、[build]の欄の、exclude_dirのリストの中に追加しておきます。
実行すると、main.goが同じディレクトリ内のtmpディレクトリ以下にmain.exeとして実行するようになります。
ファイルを更新するたびに、main.exeは新しく作られます。

Airの実行

以下のコマンドを入力して、Airを実行します。

air

そうすると、監視するファイルのあるディレクトリ名の一覧がリストされていきます。それが終了すると、main.goが読み込まれて、実行ファイルmain.exeが作成され、そのままサーバーが実行。running...と表示され、[Gin-debug]のルーティングリストのメッセージが表示されると、実行開始の合図です。試しに、Webブラウザ上から、localhost:5000/helloworldにアクセスすると、以下のように表示されます。
f:id:k01ken:20210730150408p:plain

今度は、今回の本丸であるmain.goの書き換えが可能かやってみます。main.goのmessageをHelloWorldからHelloAirに変更して保存します。そうすると、 running...[GIN-debug]が表示されましたので、また、Webブラウザ上から、localhost:5000/helloworldにアクセスすると、以下のように表示されます。
f:id:k01ken:20210730150657p:plain
見事、書き換えられました。

■参考リンク
【Golang/Go言語】Airでホットリロードをする方法
cosmtrek / air