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