前回はGo言語で作るものを決めて、開発環境を構築しました。
今回は、開発環境を強化していこうと思います。
ホットリロード機能
前回の環境構築では、サーバーサイドのコードを変更したら、毎回コンテナを再起動しなければならなかったので、「air」を使ったホットリロードを試してみようと思います。
docker-compose.yaml
version: '3.8'
services:
web:
build:
context: .
dockerfile: Dockerfile
target: dev // 追加
volumes:
- ./:/app
ports:
- "8080:8080"
environment:
- PORT=8080Dockerfile
# ★追加 ここから★
FROM golang:1.26.4-alpine3.24 AS dev
# ホットリロード用ツールを追加
RUN go install github.com/air-verse/air@latest
WORKDIR /app
# Goモジュールを取得するためにgo.modとgo.sumをコピー
COPY go.mod go.sum ./
RUN go mod download
# アプリケーションのソースコードをコピー
COPY . .
# 開発時は air で起動
CMD ["air", "-c", ".air.toml"]
# ★追加 ここまで★
FROM golang:1.26.4-alpine3.24 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o main ./app
# 実行用の軽量イメージ
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
# ポート8080を公開
EXPOSE 8080.air.toml
root = "."
tmp_dir = "tmp"
[build]
cmd = "go build -o ./tmp/main ./app"
bin = "./tmp/main"
full_bin = "./tmp/main"
include_ext = ["go", "tpl", "tmpl", "html"]
exclude_dir = ["assets", "tmp", "vendor", ".git"]
exclude_regex = ["_test.go"]
exclude_unchanged = true
follow_symlink = true
[log]
time = true
[color]
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"
[misc]
clean_on_exit = true再ビルド・起動
$ docker compose up -d --build
# http://localhost:8080
main.goの修正
package main
import "github.com/gin-gonic/gin"
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello, World2!", // 修正
})
})
router.Run(":8080")
}
リロードしたら無事変わりました!

動作確認の度にコンテナの再ビルドをするのはかなり手間なので、Go言語での開発にはホットリロードは必須ではないでしょうか!?
フォーマッターの設定
/.vscode/settings.json
{
"[go]": {
"editor.defaultFormatter": "golang.go",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"go.useLanguageServer": true,
"gopls": {
"ui.semanticTokens": true,
"usePlaceholders": true,
"completeUnimported": true,
"staticcheck": true
},
"files.exclude": {
"tmp": true
},
"files.watcherExclude": {
"**/tmp/**": true
}
}ソースコードを保存したら自動でイイ感じにフォーマットしてくれるようになりました。AIさん素晴らしい。
フロントエンドの準備
GinはGo言語の有名なフレームワークということで採用してみましたが、APIを提供するバックエンド用で、フロントエンドは別で用意した方が良いようでした。
なので、フロントエンドにNext.js、バックエンドでGinという形で今回は構築してみようと思います。
※本記事はGo言語にフォーカスするため、Next.jsの環境構築や開発についてはふれません。

最低限のGo言語の開発環境構築が完了しました。次回はバックエンドの設計と技術調査を行います。
参考
投稿者プロフィール
-
学んだことをアウトプットしていきます!
好きなこと:音楽鑑賞🎵 / ドライブ🚗 / サウナ🧖























