久しぶりにゼロから 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 が必要