🐁

Go の開発環境でサーバーもテストもコンテナでホットリロードしよう

2024/01/04に公開

はじめに

https://qiita.com/twrcd1227/items/1a05ffa459f45b2968e4

【2024】Go言語おすすめライブラリ15選 という記事を拝見していたら GoConvey というライブラリの存在を知りました。
テスト結果をブラウザで確認するツールのようですが、テストの自動実行も可能になるとのことです。
以前からよく活用していた air というライブラリと組み合わせてサーバーもテストもコンテナに閉じ込めてホットリロードしよう!という記事です。

それぞれのライブラリの細かい使い方についての説明はありません。ご了承ください。

実装

ディレクトリ構成は以下となります。

├── Makefile
├── .docker
│   ├── server
│   │   └── Dockerfile
│   ├── test
│   │   └── Dockerfile
│   └── compose.yaml
├── go.mod
├── main.go
└── main_test.go

docker ディレクトリ配下にサーバーとテスト用の Dockerfile を用意します。

サーバー用の Dockerfile はこのような実装になります。

https://github.com/otakakot/sample-go-develop-container/blob/main/.docker/server/Dockerfile

air をインストールして air コマンドを実行します。

テスト用の Dockerfile はこのような実装になります。

https://github.com/otakakot/sample-go-develop-container/blob/main/.docker/test/Dockerfile

goconvey をインストールして goconvey コマンドを実行します。
このとき、Web GUI にアクセスできるように -host 0.0.0.0 を引数として渡してあげます。

これらのコンテナに対して compose.yaml にてルートディレクトリをマウントするように設定します。

https://github.com/otakakot/sample-go-develop-container/blob/main/.docker/compose.yaml

これで実装は完了です。

http://localhost:8080 にてサーバーへのアクセス
http://localhost:5050 にてテストGUIへのアクセス

が可能となります。

ローカルで起動している GoConvey の画面はこんな感じです。

テストが失敗するように実装を変更した場合、このような画面になりました。

テストコマンドの実行などせずに自動で再実行されこの画面へと変化しました。

おわりに

GoConvey を初めて触ってみましたが、結構良さそうです。

おれおれ Go テンプレートに組み込んで gonew でさっと作れるようにします。

今回実装したコードは以下に置いておきます。

https://github.com/otakakot/sample-go-develop-container

Discussion