VSCode Dev Containersで構築するGolangのミニマル環境
はじめに
こんにちは。
最近Golangにデフォルトで入ってるhttp
パッケージに魅了された人です。
Golangを本格的に勉強するべく開発環境を構築したので、備忘録的に記事を書きました。
ベストプラクティスは調べましたが、Golangについては初心者なので不備が多いかもしれません。
結論
以下の手順で開発環境を構築する。
-
以下のコマンドを実行し、プロジェクトのルートと
.devcontainer
を作成する。cd # example mkdir golang && cd golang # プロジェクトルート mkdir .devcontainer && cd .devcontainer # .devcontainer touch devcontainer.json touch docker-compose.yml
-
devcontainer.json
に以下の内容を記述する。devcontainer.json{ "dockerComposeFile": "docker-compose.yml", "service": "golang", "workspaceFolder": "/workspace/${localWorkspaceFolderBasename}" }
-
docker-compose.yml
に以下の内容を記述する。docker-compose.ymlversion: '3' services: golang: image: golang # Golangの最新バージョンを使用 volumes: - ..:/workspace/golang # プロジェクトルートをマウント stdin_open: true tty: true
-
カレントディレクトリをVSCodeのDev Containersで開く。
-
以下のコマンドを実行し、モジュールを作成する。
mkdir golang && cd golang # モノレポ化 go mod init golang/cmd # モジュール化 mkdir cmd && cd cmd mkdir app && cd app touch main.go # 実行するファイル
-
main.go
に以下の内容を記述する。main.gopackage main import "fmt" func main() { fmt.Println("Hello, World!") }
-
以下のコマンドを実行し、`main.goを実行する。
go run main.go # Hello, World!
解説
ただ公式のDockerイメージを引っ張ってDev Containersで起動しているだけです。go mod init
とmain.go
は起動したコンテナ環境で作成しています。
もしかするとgolang/golang/cmd/app
というディレクトリ構成を冗長に感じるかもしれません。もちろん、拡張性を求めてこの構成にしています。
golang/golang
部分はモノレポ構成になっていて、実際のプロジェクトでGolangを使うときに今回の構成をほぼそのまま移植できます。golang/cmd/app
部分は、Golangのベストプラクティス[1][2]に倣っています。
また、現在gopls
がインストールされていない旨のエラーが出ます。
深刻ではないので、今のところは手動でapt update && apt install gopls
して対処しています。
おわりに
Dockerには最近入門したばかりで、いろいろハマりながらもなんとか環境構築することができました。エラーが出て若干ダサいので、今後勉強しながら修正していこうと思います。
あと、このTweetの質問が分かる方ぜひ教えてください…!
最後に、入門のためいろいろな言語やフレームワークでTODOリストを作成しようと思っています。
興味のある方はぜひStarしてください!
Discussion