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
とコマンドを打つと、以下のように表示されたら、インストール成功です。
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にアクセスすると、以下のように表示されます。
今度は、今回の本丸であるmain.goの書き換えが可能かやってみます。main.goのmessageをHelloWorldからHelloAirに変更して保存します。そうすると、 running...、[GIN-debug]が表示されましたので、また、Webブラウザ上から、localhost:5000/helloworldにアクセスすると、以下のように表示されます。
見事、書き換えられました。