# Golangのnet/httpでホットリロードの恩恵を受けたい

4 min read
Table of Contents

ホットリロードが欲しい

普段メインで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上で実行するよりは早いけど、それでもめちゃくちゃ時間がかかった。

で、実行してみたところ

Terminal window
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の下に開発ファイルを置きたい。

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

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

いつかまた挑戦する。

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts

Comments