0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Mac][Golnag]VSCodeとDevContainerでGoの開発環境構築

Posted at

はじめに

パソコンを買い替えたので備忘を兼ねてメモ

やりたいこと

Mac環境を汚さずに Go の開発環境を作りたい
DevContainerの機能を使えば自身のMac端末にGoをインストールしなくても開発環境を構築できるのでそうしたい

環境構築イメージ

こんな感じにしたい
image.png
ref. https://code.visualstudio.com/docs/devcontainers/containers

環境情報

% sw_vers
ProductName:		macOS
ProductVersion:		14.6
BuildVersion:		23G80

やったこと

必要なソフトのインストール

Docker Desktop

公式サイトからDL
https://www.docker.com/products/docker-desktop/

DL後、インストーラーを起動してインストールします
image.png

image.png

インストール情報

~ % docker -v
Docker version 27.3.1, build ce12230
~ % docker-compose -v
Docker Compose version v2.30.3-desktop.1

VS Code

公式サイトから必要なZIPをDLします
https://code.visualstudio.com/
image.png

解凍してできた「Visual Studio Code」をアプリケーションに移動します
image.png

こんな感じに無事起動できました
image.png

VS Code 設定

Dev Containers のインストール

VS Codeからコンテナにアタッチできるように、VS Codeの拡張機能Dev Containers をインストールします
VS Codeの画面左側の↓のアイコンをクリック
image.png

拡張機能の検索画面が表示されるので「Dev Containers」と入力し、検索結果から選んでインストールします
image.png

インストールが完了すると、左側にこんなアイコンが追加され、クリックするとREMOTE EXPLOERが表示されます
image.png

今回はGoの環境を作りたいので、サンプルから「vscode-remote-try-go」というサンプルを使って試してみたいと思います
image.png

サンプルを選択すると、コンテナがのビルドが行われます
ビルド完了すると、自動的にコンテナへの接続が行われ、ローカルのフォルダーがコンテナマウントされます
こんな感じに、サンプルのファイル群も作成されていました
image.png

また、ターミナルでGoのバージョンを確認してみると以下のバージョンがインストールされていました

vscode ➜ /workspaces/vscode-remote-try-go (main) $ go version
go version go1.22.10 linux/arm64
vscode ➜ /workspaces/vscode-remote-try-go (main) $ 

DevContainerで構築する開発環境、どんなコンテナ環境を作るのか?は「devcontainer.json」というファイルで定義することができます
通常、このファイルはプロジェクトのルートに「.devcontainer」ディレクトリを作成し、その配下に配置するものになります

今回のサンプルではこんな感じになってました

devcontainer.json
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/go
{
	"name": "Go",
	// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
	"image": "mcr.microsoft.com/devcontainers/go:1-1.22-bookworm",

	// Features to add to the dev container. More info: https://containers.dev/features.
	// "features": {},

	// Configure tool-specific properties.
	"customizations": {
		// Configure properties specific to VS Code.
		"vscode": {
			"settings": {},
			"extensions": [
				"streetsidesoftware.code-spell-checker"
			]
		}
	},

	// Use 'forwardPorts' to make a list of ports inside the container available locally.
	// "forwardPorts": [9000],

	// Use 'portsAttributes' to set default properties for specific forwarded ports. 
	// More info: https://containers.dev/implementors/json_reference/#port-attributes
	"portsAttributes": {
		"9000": {
			"label": "Hello Remote World",
			"onAutoForward": "notify"
		}
	}

	// Use 'postCreateCommand' to run commands after the container is created.
	// "postCreateCommand": "go version",

	// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
	// "remoteUser": "root"
}

チームやプロジェクトなどでは「devcontainer.json」を作成して共通の環境を使うようにすると、環境構築の手間が省ける&メンバー全員が同じ環境で開発できるようになっていいですね

おまけ

現在のプロジェクトやチームではDevContainerが使われいないけど自分は、ローカル端末をクリーンに使い他&自分だけはDevContainerを使った環境で開発をしたいんだ!という場合は、別で「devcontainer.json」を作成し、それを元にコンテナ環境を作成
作成したコンテナ環境で開発を行うこともできます

やってみた

  1. 任意のプロジェクトを開く
    今回は、以下のリポジトリを clone
    https://github.com/ixy-194/go-api-sample-todo

  2. devcontainer.jsonの作成
    コマンドパレットを開き(⌘ + ⇧ + P )以下を入力
    Dev Containers: Add Dev Container Configuration Files...
    image.png

今回、プロジェクトディレクトリにファイルを作成したくないので、「Add configration to user data folder
を選択
image.png

次に「From a predefined container configration template...」を選択
image.png

Goを選択します
image.png

インストールバージョンを選択
image.png

他にも必要なソフトをインストールしたりできますが、今回は何も選択せずにこのまOKをします
image.png

そうすると、こんな感じに「devcontainer.json」ファイルを生成してくれます

// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/go
{
	"name": "Go",
	// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
	"image": "mcr.microsoft.com/devcontainers/go:1-1.23-bookworm"

	// Features to add to the dev container. More info: https://containers.dev/features.
	// "features": {},

	// Use 'forwardPorts' to make a list of ports inside the container available locally.
	// "forwardPorts": [],

	// Use 'postCreateCommand' to run commands after the container is created.
	// "postCreateCommand": "go version",

	// Configure tool-specific properties.
	// "customizations": {},

	// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
	// "remoteUser": "root"
}

また、コンテナで開き直すか?と聞かれるので、「Reopen in Container」で開き直します

image.png
↑もし出てこなかった場合は、画面左下の「><」を選択して、「Reopen in Container」を選択すればいいです
image.png

するとこんな感じにコンテナ環境ないで開き直されます
image.png

試しにターミナルからGoのバージョンを確認してみます

vscode ➜ /workspaces/go-api-sample-todo (main) $ go version
go version go1.23.4 linux/arm64
vscode ➜ /workspaces/go-api-sample-todo (main) $ 

devcontainer.json」で指定した環境になっていますね

ちなみに、コンテナ環境は「devcontainer.json」で直接コンテナイメージを指定していますが、
他にもDockerファイルやDocker-composeでも環境を作ることができるようです
image.png
image.png
image.png
ref.https://code.visualstudio.com/docs/devcontainers/create-dev-container#_dockerfile:~:text=%E3%81%A7%E3%81%99%E3%80%82postCreateCommandpostStartCommand-,Docker%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB,-Dockerfile%20%E3%82%82.devcontainer

環境構築の幅が広がりますね

最後に

新しいPCを買ってテンションあげあげな感じだったので、こんな感じにローカルPCを汚さずに開発環境の構築をしてみました
素敵なのは、ローカルPCを汚さないことよりも、DevContainerを使うと、みんなが同じ環境で開発できるようになる!ということだと思います
チーム開発をするときはぜひ取り入れてみてください

ではでは

p.s
devcontainer.json」って、どこか任意のフォルダに作成したものを指定する方法はないのでしょうか?
今回、そのやり方がわからなくてコマンドパレットから作成したけど、任意のフォルダを指定できるようになったらそれだけでリポジトリ管理したりできていいのになーと。(いや、素直にプロジェクトルートに配置すればいいんだけど)

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?