🐳

vscodeでgoのリモートデバッグ環境を構築する

2025/02/03に公開

はじめに

はじめまして、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

ブレークポイントで止まりリモートデバッグ環境が構築できていることが確認できました。

GitHubで編集を提案

Discussion