LoginSignup
3
7

More than 1 year has passed since last update.

Docker + GoアプリをVScode&Remote Containersでデバッグする方法

Last updated at Posted at 2021-10-01

はじめに

今までの開発でVScodeに備わっているデバック機能を使わずに見て見ぬふりをしていました。
たまたまFlutterの勉強を始めて触ったVScodeのデバック機能の素晴らしさに感動し、それを普段開発しているGoでも実現したいと思い立ったが吉日、めちゃくちゃ手こずりました。原因としてはDockerを使用していたためです。色々検証した結果、拡張機能のRemote Containersを使うことで実現できました。
ご覧になった方々の快適なGo開発ライフにお役立てください!!!!!!

前提条件

  • Dockerを使って開発している
  • Goを使用している
  • Visual Studio Codeを使って開発している

ゴール

  • VScodeのRemote Container機能を使いDockerコンテナ内に入ることができること。
  • 任意の場所にブレークポイントを設置(🔴)しその場所を実行したら止まること。
  • ブレークポイント以前の変数などの情報が取得出ること。

実行環境

  • Mac 11.5.2
  • Docker Desktop 4.0.0
  • Visual Studio Code 1.60.2
    • Remote - Containers v0.194.3

手順一覧

  • VScode上でRemote Cintainersをインストール
  • Remote Containersを使ってGoアプリケーション開発中のDockerコンテナ内に入る。
  • コンテナ上で必要な拡張機能をインストールする。
  • デバッグ用ファイルlanch.jsonを作成
  • デバックモードの起動
  • ブレークポイントの設置
  • アプリを実行し、ブレークポイントで止まることを確認する。

VScode上でRemote Cintainersをインストール

VScode上の拡張機能検索欄にremote containersと入力すると出てくる↓をインストールしてください。
スクリーンショット 2021-10-01 15.51.28.png
もしくはRemote - WSLとRemote - SSHとRemote - ContainersがセットになったRemote Developmentをインストールしてください。
スクリーンショット 2021-10-01 15.52.29.png

Remote Containersを使ってGoアプリケーション開発中のDockerコンテナ内に入る。

さあ、ここから起動中のDockerコンテナ内に入っていきます。Dockerは起動していますね?
VScode上の左下隅に青く光っている[><]のマークをクリックして見てください。
スクリーンショット 2021-10-01 15.59.31.png
この画面が出ましたか?
私の場合は拡張機能のRemote Developmentをインストールしたため、Remote - SSHの設定も表示されています。
Remote - Containersの一番上Reopen in Containerをクリックしてください。
すると初回は少し時間がかかりますが、コンテナに入ることができます。
ファイルツリーを確認すると.devcontainer以下必要なファイルが生成されていることがわかります。
スクリーンショット 2021-10-01 16.10.13.png

コンテナ上で必要な拡張機能をインストールする。

続いてコンテナ上でデバッグに必要な拡張機能をインスールしていきます。
検索欄からGoを検索してインストールしてください。

デバッグ用ファイルlanch.jsonを作成

実行ファイルが存在しているディレクトリまで移動してください。
Macの場合⌘ + O
Windowsの場合Ctrl + O
私の場合は/workspace/src/にmain.goがあるためそこまで移動しました。

ここで左側のサイドバーにある▶︎🐞みたいなマークをクリックし、「lanch.jsonファイルを作成します」をクリックします。環境の選択はGoを選択し、「Lanch Package」を選択すると.vscode以下にlanch.jsonが作成されます。

lanch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Package",
      "type": "go",
      "request": "launch",
      "mode": "auto",
      "program": "${fileDirname}"
    }
  ]
}

上記のデフォルトの状態から↓に微修正してください。

lanch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Package",
      "type": "go",
      "request": "launch",
      "mode": "debug",
      "program": "${workspaceFolder}",
      "showLog": true←これがないと取得した情報が表示されない
    }
  ]
}

デバックモードの起動

そしたらデバッグモードの立ち上げのため、F5を押してください。
スクリーンショット 2021-10-01 16.25.32.png
これはGoのバッグに"dlv-dap"が必要で、立ち上げられないためこのような表示がポップアップされます。そのためInstall Allを選択してくだいさい。必要なライブラリがインストールされます。

すべてインストールできたらもう一度F5を押してデバッグモードを起動してくだいさい。

デバッグモードが立ち上がりましたか?
VSCodeの下のバーがオレンジ色に変化したら成功です。
スクリーンショット 2021-10-01 16.34.09.png

ブレークポイントの設置

処理を止めたいファイルの行番号付近をクリックすると🔴 が付きます。
今回はUser情報を取得するメソッドにブレークポイントを設置します。
スクリーンショット 2021-10-01 16.36.37.png

アプリを実行し、ブレークポイントで止まることを確認する。

ファイルを実行するとブレークポイントで止めた以前の情報が取ってこれます。
スクリーンショット 2021-10-01 16.43.35.png

ちなみにデバッグコンソール上でも対話型のデバッグが確認できます。
スクリーンショット 2021-10-01 16.46.14.png

余談

Remote - Containersを立ち上げるたびにGoの拡張機能をインストールする必要があるため、
extensionsの中に拡張機能のIDを記載するとRemote - Containers立ち上げ時にインストールしてくれます。おすすめです!

devcontainer.json
{
  "name": "Existing Docker Compose (Extend)",
  "dockerComposeFile": ["../docker-compose.yml", "docker-compose.yml"],
  "service": "relation_api",
  "workspaceFolder": "/workspace",
  "settings": {},
  "extensions": [
    "golang.go",
    "ms-azuretools.vscode-docker"
  ]
}

最後に

本当はローカル上でコンテナのIPアドレスを指定してデバッグしたかったのですが、全然できずRemote - Containersを使用して構築しました。デメリットとしては立ち上げ時に時間がかかってしまうことです。
しかしながら全体的に使いやすくdelveを使ったコンソール上でのデバッグよりも遥かに使いやすいと思います。

よかったら参考にしてみてください。
それでは👋

参考サイト

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7