Go の開発環境でサーバーもテストもコンテナでホットリロードしよう
はじめに
【2024】Go言語おすすめライブラリ15選 という記事を拝見していたら GoConvey というライブラリの存在を知りました。
テスト結果をブラウザで確認するツールのようですが、テストの自動実行も可能になるとのことです。
以前からよく活用していた air というライブラリと組み合わせてサーバーもテストもコンテナに閉じ込めてホットリロードしよう!という記事です。
それぞれのライブラリの細かい使い方についての説明はありません。ご了承ください。
実装
ディレクトリ構成は以下となります。
├── Makefile
├── .docker
│ ├── server
│ │ └── Dockerfile
│ ├── test
│ │ └── Dockerfile
│ └── compose.yaml
├── go.mod
├── main.go
└── main_test.go
docker
ディレクトリ配下にサーバーとテスト用の Dockerfile
を用意します。
サーバー用の Dockerfile
はこのような実装になります。
air
をインストールして air
コマンドを実行します。
テスト用の Dockerfile
はこのような実装になります。
goconvey
をインストールして goconvey
コマンドを実行します。
このとき、Web GUI にアクセスできるように -host 0.0.0.0
を引数として渡してあげます。
これらのコンテナに対して compose.yaml
にてルートディレクトリをマウントするように設定します。
これで実装は完了です。
http://localhost:8080
にてサーバーへのアクセス
http://localhost:5050
にてテストGUIへのアクセス
が可能となります。
ローカルで起動している GoConvey
の画面はこんな感じです。
テストが失敗するように実装を変更した場合、このような画面になりました。
テストコマンドの実行などせずに自動で再実行されこの画面へと変化しました。
おわりに
GoConvey を初めて触ってみましたが、結構良さそうです。
おれおれ Go テンプレートに組み込んで gonew でさっと作れるようにします。
今回実装したコードは以下に置いておきます。
Discussion