Skip to content

Latest commit

 

History

History
171 lines (140 loc) · 6.27 KB

File metadata and controls

171 lines (140 loc) · 6.27 KB

Docker+VSCode開発コンテナでGo+IaC開発環境を構築する

仕様

  • 使う物はGo+Terraform+Docker
  • 作成するAPIにはOpenAPIを使う
  • ターミナルにはoh-my-bashを使いテーマはpowerline-multiline
  • エディタにVSCode
  • AWS CLIはクレデンシャルを渡す必要があるからコンテナには載せず
    • インフラ構築はGHAで実装するか・PCローカルで実行する

1. Dcokerファイルを作成する

これらのファイルはルートディレクトリに配置する

  • 以下のようにDockerfileを作成する
FROM golang:latest

WORKDIR /feedays_cloud
# WORKDIR /workspace

# install go tools(自動補完等に必要なツールをコンテナにインストール)
# Ctrl + Shift + P -> Go: Install/Update Tools
RUN go install github.com/uudashr/gopkgs/v2/cmd/gopkgs@latest
RUN go install github.com/ramya-rao-a/go-outline@latest
RUN go install github.com/cweill/gotests/...@latest
RUN go install github.com/fatih/gomodifytags@latest
RUN go install github.com/josharian/impl@latest
RUN go install github.com/haya14busa/goplay/cmd/goplay@latest
RUN go install github.com/go-delve/delve/cmd/dlv@latest
# div-dap のインストール方法は次のドキュメントを参考にしました:
# https://github.com/golang/vscode-go/blob/v0.26.0/docs/dlv-dap.md#updating-dlv-dap
RUN GOBIN=/tmp/ go install github.com/go-delve/delve/cmd/dlv@master \
  && mv /tmp/dlv $GOPATH/bin/dlv-dap
RUN go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
RUN go install golang.org/x/tools/gopls@latest

# DockerCLIをインストール arm64 元は:amd64
RUN apt-get update && apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo \
  "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt-get update && apt-get install -y docker-ce-cli

# oh-my-bashをインストール
RUN bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
# oh-my-bashのテーマを変更
RUN sed -i 's/OSH_THEME=.*/OSH_THEME="powerline-multiline"/g' ~/.bashrc

# oapi-codegenをインストール
RUN go install github.com/deepmap/oapi-codegen/cmd/oapi-codegen@v1.13.0
  • 以下のようにdocker-compose.ymlを作成する
version: 'latest'
services:
  develop:
    build: .
    tty: true
    stdin_open: true
    working_dir: /feedays_cloud
    command: /bin/bash
    # image: golang:latest
    volumes:
      - .:/feedays_cloud
    image: feedays_cloud

2. DevContainerを作成する

Remote Development 拡張機能をインストールしていると、Visual Studio Code の画面左下に新しいステータスバーの項目が表示される (リモートクィックアクセス)

この項目をクリックすると、Remote-Containers のコマンド一覧が表示されるので、 [Remote-Containers: Add Development Container Configuration Files…](開発コンテナー設定ファイルを追加する) をクリックする

すると、どのように設定を作成するかを尋ねるメニューが表示されるので、[From ‘docker-compose.yml’] を選択

  • どこかで追加する拡張機能の選択肢が出るからTerragruntを選択する

3. 作成された設定ファイルを編集する

.devcontainer/devcontainer.json

{
    "name": "Go",
    "dockerComposeFile": [
		"../docker-compose.yml",
		"docker-compose.yml"
	],
    "service": "develop",
    // "workspaceFolder": "/feedays_cloud",
    "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
    // 追加機能にTerraform(Terragrnt)を追加する
    "features": {
		"ghcr.io/devcontainers/features/terraform:1": {}
	},
    // 拡張機能のインストール
	"extensions": [
		"GitHub.copilot-nightly",
		"GitHub.vscode-pull-request-github",
		"golang.go",
		"github.vscode-github-actions",
		"GitHub.copilot-chat",
		"saikou9901.evilinspector",
		"soerenuhrbach.vscode-deepl",
		"streetsidesoftware.code-spell-checker",
		"oderwat.indent-rainbow",
		"42Crunch.vscode-openapi",
		"shardulm94.trailing-spaces",
		"redhat.vscode-yaml",
		"ms-azuretools.vscode-docker"
	],
    "settings": {
        "go.goroot": "/usr/local/go",
        "go.toolsManagement.checkForUpdates": "off",
        "go.gopath": "/go",
        "go.toolsGopath": "/go",
        "go.useLanguageServer": true,
        "go.formatTool": "gofmt",
        // "go.formatTool": "goimports",
        "go.lintTool": "golangci-lint",
        "go.lintFlags": [
            "--fast",
            "--skip-dirs=vendor"
        ],
		"editor.formatOnSave": false,
		"[go]": {
			"editor.formatOnSave": true
		}
        // "go.vetOnSave": "workspace"
    },
    // "containerEnv": {
    //     "GO111MODULE": "on"
    // },
    // "containerEnvFile": ".env"
}

3. コンテナー内で Visual Studio Code を起動

開発コンテナー設定ファイルを追加した状態で、もう一度 Visual Studio Code の画面左下の [リモートクィックアクセス] をクリックするとRemote-Containers のコマンド一覧が表示します。

すると、今度は[Remote-Containers: Reopen in Container] が表示されるので、こちらをクリックします。

すると、Visual Studio Code のウィンドウが開き直され、 コンテナーの構築が開始されます:

  • 初回は少し時間がかかりますが、次回以降はすぐに開けるようになる
  • また、Docker Desktop の Dashboard を確認すると、Visual Studio Code が起動したコンテナーが表示されている

Visual Studio Code の進捗バーのダイアログが消えたら、プロジェクトのフォルダー内のファイルがVisual Studio Code のサイドバーに表示されます。

AWS CLIを使ってAWSにログインする

  • open .zshrcをローカルで開いてクレデンシャルを見る
  • 開発コンテナ側ででcmd+P>AWS:Edit Credentialsを選択
  • 以下をコピペ
[default]
aws_access_key_id = アクセスIDを入力
aws_secret_access_key = アクセスキーを入力