Go言語のデータベース連携ライブラリの選定
ORMはsql-boiler
migrationはgoose
をGoをよく使っている友人に進められたので、調べてみます。
SQLBoilerについて
sql-boilerの他にORMライブラリは
・ GORM
・sqlx
などがある。
sql-boilerはマイグレーションの機能は入っていないが、それは他のマイグレーションライブラリを組み合わせれば良いので問題にはならないと。
コンパイル時にエラーが出るので、誤りにすぐ気がつくと。
公式ドキュメントを見てみます。
SQLBoiler は、データベーススキーマに合わせた Go ORM を生成するツールです。
(gorm/gorp のような) "コードファースト" とは対照的に、"データベースファースト" な ORM です。つまり、最初にデータベーススキーマを作成する必要があります。データベースのライフサイクルのこの部分を管理するために、sql-migrateやその他の移行ツールのようなものを使ってください。
gooseについて
・設定ファイルなし
・デフォルトのgooseバイナリはSQLファイルのみマイグレート可能
・Goのマイグレーション。
Go migrations: Go migrations 関数を goose バイナリからオンザフライでビルドすることはありません。
代わりに、独自のカスタム goose バイナリを作成し、Go マイグレーション関数を明示的に登録し、独自の *sql.DB 接続で複雑なマイグレーションを実行することができます。
Goマイグレーション関数では、*sql.Tx引数を使用すれば、SQLトランザクション内でコードを実行することができます。
・gooseのpkgはバイナリから切り離されています。
goose pkgはもうSQLドライバを登録しないので、コードベース内でのドライバのpanic()衝突がありません!
goose pkg は、もうベンダーへの依存を一切持ちません。
・デフォルトでタイムスタンプ付きのマイグレーションを使用しますが、開発工程ではタイムスタンプを使用し、実運用工程ではシーケンシャルバージョンを使用するハイブリッドアプローチを推奨します。
・allow-missing フラグを指定することで、missing (out-of-order) migrations をサポートします。ライブラリとして使用する場合は、関数オプション goose.WithAllowMissing() を Up, UpTo または UpByOne に指定してください。
・スキーマテーブルで追跡することなく、アドホックなマイグレーションを適用することをサポートします。移行が適用された後にデータベースをシードするのに便利です。no-versioning フラグまたは関数オプション goose.WithNoVersioning() を使用します。
DeepL翻訳より。
railsのActiveRecordのノリでいけるってことでしょうか?
そう信じてやっていきます。
リフレクションとは?
ちょいちょいリフレクションという単語が出てきているけど、聞いたことなかった。
実行時にわかるデータを使ってなにかの処理をさせたいときに使う、のかな?
なんとなくはわかったが、曖昧です。
概念はわかったような気がするけど、実際にこれをどう使うのか?なんで使いたいのかがよく理解できていないです。
これは一旦置いてお生きます。
データベース連携方針まとめ
色々比較検討した上で、決めていきたかったのですが、メリットデメリットを考えられるほどつらみとかを理解していないってのもあり、判断軸がないです。