Golang/Go言語でAirを使ってホットリロードを実現する

Go言語でAirを使ってホットリロードを実現する プログラミング

Go言語で開発しているとき、PHPやRubyなどの言語とは異なり、ビルドをしないとソースは反映されません。

ソースを更新して、ビルドしてを繰り返すのはだんだん面倒になってきますよね。

そこでこの記事では、Airを利用してホットリロードを実現する方法を紹介します。

ホットリロード対応することで、ファイルを保存しただけで自動でビルドが実行されるようになり、大変便利です。

いっちー
いっちー

サンプルコードはGitHubにあげてあるので、サクッと動きだけ試したい方はご活用ください!

私はGoのホットリロードにrealizeを愛用していましたが、こちらは残念ながら開発が止まっているようです。。。

スポンサーリンク

ホットリロードとは?

ホットリロードとは、変更された差分を検知して最新のプログラムに自動で反映することです。

通常Go言語では、コードを変更した際にビルドが必要になります。

今回紹介するAirは、

  1. ファイルの変更を検知
  2. 最新のソースでビルドを実施
  3. プログラムを実行して最新を反映

のステップを自動で行ってくれます。

なのでいちいちプログラムを止めてビルドを手動でする必要はありません。

いっちー
いっちー

1度慣れるとホットリロードなしては開発できないくらい便利です…( ꒪﹃ ꒪)

ホットリロードを検証するための環境構築

まずはサンプル用のプロジェクトを作成します。

$ mkdir go-hotreload-sample && cd go-hotreload-sample
$ go mod init go-hotreload-sample

フレームワークとしてはサンプルとしてechoを使用します。

まずはechoをダウンロードします。

$ go get github.com/labstack/echo/v4

次に main.go を用意します。以下のコードは 「localhost:8080」 にアクセスしたら 「Hello, World!」 とレスポンスを返す簡易Webサーバーです。

package main

import (
  "net/http"
  "github.com/labstack/echo/v4"
  "github.com/labstack/echo/v4/middleware"
)

func main() {
  // Echo instance
  e := echo.New()

  // Middleware
  e.Use(middleware.Logger())
  e.Use(middleware.Recover())

  // Routes
  e.GET("/", hello)

  // Start server
  e.Logger.Fatal(e.Start(":8080"))
}

// Handler
func hello(c echo.Context) error {
  return c.String(http.StatusOK, "Hello, World!")
}

go runコマンドでプログラムを起動してみます。

$ go run main.go

ターミナルの別ウィンドウから以下のリクエストを送ると、レスポンスが帰ってくることを確認します。

$ curl http://localhost:8080
Hello, World!

Airでホットリロードを実現する

さて、お試しの環境ができたのでいよいよAirでホットリロードを実現します。

Airのダウンロード

以下のコマンドでAirをダウンロードします。

$ go get -u github.com/cosmtrek/air

Airが問題なく起動できるか以下のコマンドで確認します。

$ air -v

  __    _   ___
 / /\  | | | |_)
/_/--\ |_| |_| \_ , built with Go

Airでプログラムを動かす

Airが確認できたら、go runを使わずに以下のコマンドでプログラムを起動します。

$ air

以下のようにechoが立ち上がることを確認します。

$ air

  __    _   ___
 / /\  | | | |_)
/_/--\ |_| |_| \_ , built with Go

mkdir /path-to-dir/go-hotreload-sample/tmp
watching .
watching bin
!exclude tmp
building...
running...

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.5.0
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:8080

起動できたことを確認したら、main.goのレスポンス返却部分を変更してみます。

// Handler
func hello(c echo.Context) error {
	return c.String(http.StatusOK, "hogehoge")
}

curlで再度確認します。

$ curl http://localhost:8080
hogehoge

レスポンスが 「hogehoge」に変化していますね。これでホットリロードできていることを確認できました。

いっちー
いっちー

今回の記事はここまでです。

Go言語の入門にはスターティングGo言語Udemyがおすすめです!

>> 動画で学べる!UdemyのGo言語のおすすめ講座はこちら <<

コメント

タイトルとURLをコピーしました