⌛
dindでsqlc+dockertest
この抜粋の内容は次のとおりです。
- 環境構築
- sqlc
- dockertest
- go test
さらに詳しく知りたい方は読み続けてください。
2023年8月1回目です。
sqlc + dockertest についてです。
日々、database に悩まされます。例えば、query の tuning など。
また、developer が好む ORM は、query が隠蔽されるため、どんな query なのか、認識するのに時間が必要な場合が多いです。
slow query の場合、どんな query なのか確認するには、実行ログを見るか、developer に確認するかしかありません。
これらの課題を解消するのが、sqlc + dockertest です。
このメモには、sqlc と dockertest を使った開発環境の構築と dockertest での Query の実行までを書きます。
環境構築
- devcontainer + Docker in Docker(dind)で設定します。
sqlc
sqlc は、
sqlc: A SQL Compiler
です。
要するに query を用意して、generate を実行すると、その Query の関数を用意してくれます。こんな感じで。
- query
- generated
定義内容は、sql のチュートリアルのとおりです。そちらをご確認下さい。
dockertest
- dockertest の使い方は、
TestMain
で用意したデータベース container に対して、test を用意します。 - テスト用の schema を用意する必要があります。
go test
- それでは、dockertest の動きを確認します。
-
go test
を実行します。
vscode ➜ /workspaces/go-dockertest-example (main) $ go test ./cmd/server/
ok github.com/danny-yamamoto/go-dockertest-example/cmd/server (cached) [no tests to run]
vscode ➜ /workspaces/go-dockertest-example (main)
- DB Container を clean up せずに実行すると、任意の port で起動した container が残ります。
vscode ➜ /workspaces/go-dockertest-example (main) $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d96599c756b5 postgres:14.8 "docker-entrypoint.s…" 2 hours ago Exited (255) About an hour ago 0.0.0.0:32774->5432/tcp upbeat_easley
369e6dec2e83 postgres:14.8 "docker-entrypoint.s…" 2 hours ago Exited (255) About an hour ago 0.0.0.0:32773->5432/tcp quirky_borg
61e0b9313286 postgres:14.8 "docker-entrypoint.s…" 2 hours ago Exited (255) About an hour ago 0.0.0.0:32772->5432/tcp admiring_jones
240c0cdca970 postgres:14.8 "docker-entrypoint.s…" 2 hours ago Exited (255) About an hour ago 0.0.0.0:32771->5432/tcp recursing_perlman
a48f00f7fd03 postgres:14.8 "docker-entrypoint.s…" 2 hours ago Exited (255) About an hour ago 0.0.0.0:32770->5432/tcp romantic_beaver
02c0360d302d postgres:14.8 "docker-entrypoint.s…" 2 hours ago Exited (255) About an hour ago 0.0.0.0:32769->5432/tcp xenodochial_ishizaka
4f0e743efa78 postgres:14.8 "docker-entrypoint.s…" 17 hours ago Exited (1) 17 hours ago optimistic_einstein
vscode ➜ /workspaces/go-dockertest-example (main) $
Summary
- sqlc と dockertest について書きました。
- devcontainer を使った dind 構成にしたことで、decontainer(docker)からpostgres(dind)にどう繋ぐのか理解するのに時間がかかりました。
- dind の clean up を忘れると、process が溜まり続けるので注意が必要です。しかし、devcontainer にしてあるため、container を捨てれば解決します。
- 今後、Cloud Build や GitHub Actions などでの動作を確認したいと思います。
Discussion