🐳
vscodeでgoのリモートデバッグ環境を構築する
はじめに
はじめまして、otot_devです。
Go を業務で触ることになったので、手始めに個人で開発環境の構築を行ないながらアウトプットしています。今回は、「dockerでgoのホットリロード環境を爆速で構築する」の続きとして、リモートデバッグ環境を作成します。色々な記事を見ましたが、VSCode で Go のデバッグ環境作るのは中々手こずりました。必要最低限の構成しか記載してないです。
最終的なアウトプット
今回のコード一式は以下の URL にあります。
go-docker-template(v1.1.0)
v1.0.0 からの全量差分はこちらで確認できます。
バージョン情報
-
go
:v1.23.5 -
air-verse/air
:v1.61.7 -
go-delve/delve
: v1.24.0
余談ですが、Docker 仮想環境でインストールされた delve のバージョンを確認する方法は以下の方法で確認できます。
% docker ps
--
#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#166e0bffba3a go-docker-template-api "air -c .air.toml" 3 days ago Up 4 minutes 0.0.0.0:2345->2345/tcp, 0.0.0.0:8080->3000/tcp go-docker-template-api-1
--
% docker exec -it go-docker-template-api-1 /bin/sh
--
% dlv version
# Delve Debugger
# Version: 1.24.0
# Build: $Id: 2d55e4d30150e3fc68e64357e21293d7920fc1f1
v1.0.0との変更点
.air.toml
# Customize binary, can setup environment variables when run your app.
- full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
+ full_bin = "APP_ENV=dev APP_USER=air dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec --continue ./tmp/main"
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Go Debug",
"type": "go",
"request": "attach",
"mode": "remote",
"port": 2345
}
]
}
Dockerfile
Docker 環境にgo-delve/delve
をインストールします。
# v1.23.5
FROM golang:1.23-alpine
WORKDIR /app
# v1.61.7
RUN go install github.com/air-verse/air@latest
+ RUN go install github.com/go-delve/delve/cmd/dlv@latest
COPY go.mod go.sum ./
RUN go mod download
docker-compose.yml
リモートデバッグ用の dlv を起動されるポートを設定します。
services:
api:
build:
context: .
dockerfile: Dockerfile
ports:
- 8080:3000
+ - 2345:2345 # リモートデバッグ用
volumes:
- ./:/app
リモートデバッグ確認
Docker コンテナを起動します。
% docker compose up
VSCode のデバッグタブからGo Debug
を選択してリモートデバッグを起動します。
ブレークポイントを設定しておき、curl コマンドでリクエストを行います。
% curl localhost:8080
ブレークポイントで止まりリモートデバッグ環境が構築できていることが確認できました。
Discussion