はじめに
- いちいちコマンドでリビルドしたくない
- 複数ターミナルを行き来したくない
などなど、air
を使ったホットリロードは開発効率を爆上げしてくれます。
ただ、ローカル環境でdocker-compose.yaml
に複数のコンテナを含めるようになると
なんどもdocker compose up
とdocker compose down
を繰り返すようになり
Go
の依存関係をダウンロードする時間が鬱陶しくなります。
そこで/go/pkg
ディレクトリをマウントして2回目以降は依存関係のダウンロードを回避するようにしてみたというご紹介です。
開発環境
uname -a
Darwin MacBook-Pro-7.local 22.2.0 Darwin Kernel Version 22.2.0: Fri Nov 11 02:04:44 PST 2022; root:xnu-8792.61.2~4/RELEASE_ARM64_T8103 arm64
go version
go version go1.19.5 darwin/arm64
docker compose version
Docker Compose version v2.13.0
ディレクトリ構成
.
├── .docker
│ ├── Dockerfile
│ ├── docker-compose.yaml
│ └── .gitignore
├── cmd
│ └── app
│ └── main.go
├── internal
│ └── server
│ └── server.go
└── pkg
└── log
└── log.go
Dockerfile
docker-compose.yaml
/go/pkg/
をマウントして依存パッケージをキャッシュ
初回docker compose up
ログ
echo
サーバー起動まで約29秒
2023-02-05 01:57:02
2023-02-05 01:57:02 __ _ ___
2023-02-05 01:57:02 / /\ | | | |_)
2023-02-05 01:57:02 /_/--\ |_| |_| \_ , built with Go
2023-02-05 01:57:02
2023-02-05 01:57:02 mkdir /app/cmd/app/tmp
2023-02-05 01:57:02 watching .
2023-02-05 01:57:02 !exclude tmp
2023-02-05 01:57:02 building...
2023-02-05 01:57:02 go: downloading github.com/brpaz/echozap v1.1.3
2023-02-05 01:57:02 go: downloading github.com/labstack/echo/v4 v4.10.0
2023-02-05 01:57:02 go: downloading go.uber.org/zap v1.24.0
2023-02-05 01:57:03 go: downloading github.com/labstack/gommon v0.4.0
2023-02-05 01:57:03 go: downloading golang.org/x/crypto v0.2.0
2023-02-05 01:57:06 go: downloading golang.org/x/net v0.4.0
2023-02-05 01:57:10 go: downloading github.com/google/uuid v1.3.0
2023-02-05 01:57:10 go: downloading go.uber.org/atomic v1.7.0
2023-02-05 01:57:10 go: downloading go.uber.org/multierr v1.6.0
2023-02-05 01:57:11 go: downloading github.com/mattn/go-colorable v0.1.13
2023-02-05 01:57:11 go: downloading github.com/mattn/go-isatty v0.0.16
2023-02-05 01:57:11 go: downloading github.com/valyala/fasttemplate v1.2.2
2023-02-05 01:57:11 go: downloading golang.org/x/sys v0.3.0
2023-02-05 01:57:11 go: downloading golang.org/x/text v0.5.0
2023-02-05 01:57:20 go: downloading github.com/valyala/bytebufferpool v1.0.0
2023-02-05 01:57:31 running...
2023-02-05 01:57:31
2023-02-05 01:57:31 ____ __
2023-02-05 01:57:31 / __/___/ / ___
2023-02-05 01:57:31 / _// __/ _ \/ _ \
2023-02-05 01:57:31 /___/\__/_//_/\___/ v4.10.0
2023-02-05 01:57:31 High performance, minimalist Go web framework
2023-02-05 01:57:31 https://echo.labstack.com
2023-02-05 01:57:31 ____________________________________O/_______
2023-02-05 01:57:31 O\
2023-02-05 01:57:31 ⇨ http server started on [::]:1323
2回目以降のdocker compose up
ログ
echo
サーバー起動まで約15秒
2023-02-05 01:58:00
2023-02-05 01:58:00 __ _ ___
2023-02-05 01:58:00 / /\ | | | |_)
2023-02-05 01:58:00 /_/--\ |_| |_| \_ , built with Go
2023-02-05 01:58:00
2023-02-05 01:58:00 watching .
2023-02-05 01:58:00 !exclude tmp
2023-02-05 01:58:00 building...
2023-02-05 01:58:15 running...
2023-02-05 01:58:15
2023-02-05 01:58:15 ____ __
2023-02-05 01:58:15 / __/___/ / ___
2023-02-05 01:58:15 / _// __/ _ \/ _ \
2023-02-05 01:58:15 /___/\__/_//_/\___/ v4.10.0
2023-02-05 01:58:15 High performance, minimalist Go web framework
2023-02-05 01:58:15 https://echo.labstack.com
2023-02-05 01:58:15 ____________________________________O/_______
2023-02-05 01:58:15 O\
2023-02-05 01:58:15 ⇨ http server started on [::]:1323
※ .gitignoreで.docker/go/
配下はGit管理から除外します。
注意点
volumes:
- ./go:/go
と/go
でマウントしてしまうとdocker build
時にインストールしたair
がロストしてしまうので注意が必要です。
おわりに
なんどもdocker compose up
を繰り返すようになったとき都度都度ダウンロードが走らなくなりより開発が快適になります♪
本記事で紹介のために作成したリポジトリはこちらになります。
Discussion