2
0

More than 1 year has passed since last update.

dindでsqlc+dockertest

Last updated at Posted at 2023-08-02

この抜粋の内容は次のとおりです。

  • 環境構築
  • 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 などでの動作を確認したいと思います。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0