docker composeでコンテナ化したGoアプリケーションをvscodeでリモートデバッグする
vscodeにて、コンテナ化されたGoのアプリケーションに対してリモートデバッグを試しました。
公式ドキュメントには.vscode/settings.json
や.devcontainer
などを用意するように記載されていたのですが、学習が大変だったのと、あまりエディタ側に依存したくないという気持ちがありました。そのため、デバッグに必要なツールをdockerfileに記述するだけにしました。
ディレクトリ構成
コンテナ化したGoのアプリケーションをデバッグするという体で、下記のような構成で試しました。postgresのコンテナも用意していますが、デバッグには全く関係ないです。
詳細はこちらのディレクトリを参照。
.
├── .env
├── code
│ └── app
├── db
│ └── psql
├── df-go-vscode-debug.dockerfile
├── df-psql.dockerfile
└── docker-compose.yml
df-go-vscode-debug.dockerfile
microsoft公式のリポジトリを参考にDockerfileを用意しました。
参考リポジトリ: vscode-remote-try-go(.devcontainerというディレクトリにDockerfileが置かれています)
重要なのはdelveと呼ばれるGoのデバッガーと依存関係のツール群をインストールしている点です。
アプリの起動〜デバッグの準備
コンテナの起動
ターミナルでdocker-compose up
します。
docker-compose up -d
コンテナへアタッチ
vscode左下の「><」という見た目のアイコンをクリックするとコマンドパレットが開くので、Remote-Containers: Attach to Running Container
を選択して実行。

Goのプラグインをインストール
アタッチしたコンテナにvscode-goをインストールします。
Goプロジェクトを開く
command
+ O
でGoのプロジェクトがあるディレクトリを開きます。
デバッグしてみる
行番号の左にカーソルを合わせてクリックすると、ブレークポイントが設定できます。

command
+ D
で、サイドカラムにRun and Debug
ボタンを表示。クリックするとデバッグが走ります。


まとめ
コンテナに対してリモートデバッグできるようになり、開発効率がよくなりました。
しかしリンターやフォーマッターなどもコンテナにインストールする必要があるため、コンテナの肥大化と可搬性の低下がデメリットに感じました。
開発環境ではデバッグ用のコンテナ、本番環境では必要な機能だけ実装するようにしたミニマムなコンテナを起動するよう、適切に構成管理する必要がありそうです。