久しぶりにゼロから Go でサーバーサイド書いてるのでライブラリのトレンドなどをアップデートするスッドレ

前提となる技術スタック
- Go
- gRPC + Protocol Buffers
- PostgreSQL

Protocol Buffer の定義を書いていくわけだけど、Buf というツールが便利っぽいことを見かけた。
k8s でいうところの Helm 的なポジションかなとか思っている(わかっていない)。ちょっと触った感じ、確かに素で .proto 管理するよりは色々便利な気がする。依存することによるデメリットがあるのかどうかは不明

DB 周りは 絶対にフルスタック O/R Mapper 使わないマンなのでクエリビルダ的なものを探していく。
数年前は Query Builder + Struct Mapper みたいな位置づけのライブラリが人気だった気がするけど 僕の知らないうちに type safe なコード生成系のものが主流になっていきている感じがある。
以下のどっちかかな、という感じ。sqlc
で普通に不便なく JOIN とかかけるのだろうか?ということが分かっていないので、やってみる。

ちなみに DB Schema の マイグレーションツールは goose にしました。
go-migrate もいいのかな? と思いつつ、できることはそんなに変わらなそうなので、いいかなと。

ちなみにちょっとした DB の GUI ツールが欲しくなりがちだけどみんな何使ってるんでしょう?
今日 simplebank チュートリの学びを社内で共有してもらったんだけど
そこで TablePlus というものを教えてもらった。
有償のものを使うなら DataGrip 買うかなぁ。。
といいつつ、pgweb が現役っぽかったので docker-compose にこれを突っ込んでいく。
VSCode に DB Admin ツール 付いたらいいですよね... サードパーティのはあるけど。

ちなみに、gRPC のクライアント側は Dart です。
.proto
ファイルどこで管理して共通利用するのか? というのは後々課題になりそう。調べたけどみんな色々考えていそうだった。

gRPC の(E2E 的な)デバッグどうする? と思ってましたが結構最近 Postman 先生がサポートしてくてるようです。すごい。便利そう。

ロギングは Zap を使ってみる

ミドルウェア的なものはここから探して利用させていただく。

migrate の Star 数多くて日和ってきてしまった。。

諸般の事情により型を1つに確定できないフィールドがあるのだけど、
"google/protobuf/any.proto"
を import すると Any 使えるらしい。いいんかな、、と思いつつデータ型は判断できるらしいのでこれでやってみる。

今日はここまで。

sqlc
は確かにめっちゃよいことがわかったが、パラメータ指定できるのが基本的に WHERE句(の単一の値)のみ、など制約が結構厳しいので、少なくともすべてのテーブルに対してこれを使っていくことはできなさそう。

ということで
になりそう。

これ書いてるの忘れてたけどうえであげたもののうち
- sqlboiler をめっちゃ使ってる
- DB の UI ツールは DataGrip 買った
- とりあえず buf 使ってみている
- Go バックエンドのコード生成はもちろんOK、クライアントになる Dart のコードも生成できていまのところよい感じ

標準の error ライブラリでいけるとおもったらまだ pkg/errors を使ったほうがいいんですね
スタックトレースが必要な場合、必要で無い場合、という分岐だけど、スタックトレースが必要ない場合って殆ど考えられないような(ので pkg/errors が必要