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ボタンを表示。クリックするとデバッグが走ります。

まとめ

コンテナに対してリモートデバッグできるようになり、開発効率がよくなりました。

しかしリンターやフォーマッターなどもコンテナにインストールする必要があるため、コンテナの肥大化と可搬性の低下がデメリットに感じました。

開発環境ではデバッグ用のコンテナ、本番環境では必要な機能だけ実装するようにしたミニマムなコンテナを起動するよう、適切に構成管理する必要がありそうです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください