🐬

VSCode Dev Containersで構築するGolangのミニマル環境

2023/06/04に公開

はじめに

こんにちは。
最近Golangにデフォルトで入ってるhttpパッケージに魅了された人です。

Golangを本格的に勉強するべく開発環境を構築したので、備忘録的に記事を書きました。
ベストプラクティスは調べましたが、Golangについては初心者なので不備が多いかもしれません。

結論

以下の手順で開発環境を構築する。

  1. 以下のコマンドを実行し、プロジェクトのルートと.devcontainerを作成する。

    cd  # example
    mkdir golang && cd golang  # プロジェクトルート
    mkdir .devcontainer && cd .devcontainer  # .devcontainer
    touch devcontainer.json
    touch docker-compose.yml
    
  2. devcontainer.jsonに以下の内容を記述する。

    devcontainer.json
    {
      "dockerComposeFile": "docker-compose.yml",
      "service": "golang",
      "workspaceFolder": "/workspace/${localWorkspaceFolderBasename}"
    }
    
  3. docker-compose.ymlに以下の内容を記述する。

    docker-compose.yml
    version: '3'
    services:
      golang:
        image: golang  # Golangの最新バージョンを使用
        volumes:
          - ..:/workspace/golang  # プロジェクトルートをマウント
        stdin_open: true
        tty: true
    
  4. カレントディレクトリをVSCodeのDev Containersで開く。

  5. 以下のコマンドを実行し、モジュールを作成する。

    mkdir golang && cd golang  # モノレポ化
    go mod init golang/cmd  # モジュール化
    mkdir cmd && cd cmd
    mkdir app && cd app
    touch main.go  # 実行するファイル
    
  6. main.goに以下の内容を記述する。

    main.go
    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("Hello, World!")
    }
    
  7. 以下のコマンドを実行し、`main.goを実行する。

    go run main.go  # Hello, World!
    

解説

ただ公式のDockerイメージを引っ張ってDev Containersで起動しているだけです。go mod initmain.goは起動したコンテナ環境で作成しています。

もしかするとgolang/golang/cmd/appというディレクトリ構成を冗長に感じるかもしれません。もちろん、拡張性を求めてこの構成にしています。

golang/golang部分はモノレポ構成になっていて、実際のプロジェクトでGolangを使うときに今回の構成をほぼそのまま移植できます。golang/cmd/app部分は、Golangのベストプラクティス[1][2]に倣っています。

また、現在goplsがインストールされていない旨のエラーが出ます。
深刻ではないので、今のところは手動でapt update && apt install goplsして対処しています。

おわりに

Dockerには最近入門したばかりで、いろいろハマりながらもなんとか環境構築することができました。エラーが出て若干ダサいので、今後勉強しながら修正していこうと思います。

あと、このTweetの質問が分かる方ぜひ教えてください…!
https://twitter.com/yjn279/status/1665198818529345537?s=20

最後に、入門のためいろいろな言語やフレームワークでTODOリストを作成しようと思っています。
興味のある方はぜひStarしてください!
https://github.com/yjn279/todos

脚注
  1. https://qiita.com/sueken/items/87093e5941bfbc09bea8 ↩︎

  2. https://zenn.dev/foxtail88/articles/824c5e8e0c6d82 ↩︎

GitHubで編集を提案
株式会社アクティブコア

Discussion