ホットリロードが欲しい

普段メインでreactとかAngularを使用しているので、標準でホットリロードが搭載されていることが当然になっていた。

しかしGonet/httpにはない。これが本当に開発体験に悪影響を及ぼしている。

ということで、何とかできないか調べてみた。

Goのバージョン

go => 1.21.4

DevContainerを使ってみる

Go net/httpサーバーのホットリロードにAirを使ってみた

Devcontainerに airをインストールして、DevContainer上で実行する。

色々調べた結果上記が1番楽そうだったので、やってみる。

やり方は上記の記事を引用する。

  • リポジトリ直下に .devcontainer フォルダ作成
  • .devcontainerフォルダ内に 下記内容のdevcontainer.json を作成。
{
	"name": "Go",
	"image": "mcr.microsoft.com/devcontainers/go:0-1-bullseye",
	"features": {
		"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {
			"moby": true,
			"installDockerBuildx": true,
			"version": "latest",
			"dockerDashComposeVersion": "v2"
		}
	},
	"postCreateCommand": "go install github.com/cosmtrek/air@latest"
}
  • 保存し、プロジェクトを再度開き直す
  • DevContainerを開くかどうかVSCodeに確認されるので、DevContainerとして開き直す
  • インストール完了後 プロンプト上で air と打って Airを立ち上げる

順序通りやったところ、

DevContainerを開くかどうかVSCodeに確認されるので、DevContainerとして開き直す

の箇所で、

[+] Building 903.3s (2/3)
 => [internal] load build definition from Dockerfile.extended              0.3s
 => => transferring dockerfile: 2.76kB                                     0.1s
 => [internal] load .dockerignore                                          0.3s
 => => transferring context: 2B                                            0.0s
 => resolve image config for docker.io/docker/dockerfile:1.4             902.4s

上記のようにとんでもなく時間がかかった結果諦めた。

これはWindowsDocker問題🤔?

WSLで再トライ

ということでWSL上に移して実行してみる。

Windows上で実行するよりは早いけど、それでもめちゃくちゃ時間がかかった。

で、実行してみたところ

go.mod:3: invalid go version 'v1.21.4': must match format 1.23

というエラーが出たので、バージョンをgo 1.21.4からgo 1.21に変更し再度挑戦してみる。

building...
no Go files in /workspaces/ProjectName
failed to build, error: exit status 1
running...
/bin/sh: 1: /workspaces/ProjectName/tmp/main: not found

ホットリロードは確認できたけど…

次に上記エラーが出たので、main.go/srcからrootに移動した結果、ホットリロードが動いていることが確認できた。

ただデーターベースに接続できなくなったし、やっぱり/srcの下に開発ファイルを置きたい。

ここで時間使うのももったいないので、いったん諦める。戦略的撤退。

ホットリロードが動くことは確認できたので、とりあえず満足した。

いつかまた挑戦する。