巨人の足元でたじlog

そうして言葉を軽んじるから――― 君は私の言葉を聞き逃す

Go言語のデータベース連携ライブラリの選定

ORMはsql-boiler
migrationはgoose

 

をGoをよく使っている友人に進められたので、調べてみます。

 

SQLBoilerについて

zenn.dev

 

sql-boilerの他にORMライブラリは

・ GORM

・sqlx

などがある。

sql-boilerはマイグレーションの機能は入っていないが、それは他のマイグレーションライブラリを組み合わせれば良いので問題にはならないと。

コンパイル時にエラーが出るので、誤りにすぐ気がつくと。

 

公式ドキュメントを見てみます。

 

github.com

SQLBoiler は、データベーススキーマに合わせた Go ORM を生成するツールです。

(gorm/gorp のような) "コードファースト" とは対照的に、"データベースファースト" な ORM です。つまり、最初にデータベーススキーマを作成する必要があります。データベースのライフサイクルのこの部分を管理するために、sql-migrateやその他の移行ツールのようなものを使ってください。

 

gooseについて

github.com

 

・設定ファイルなし

 

・デフォルトの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翻訳より。

railsActiveRecordのノリでいけるってことでしょうか?

そう信じてやっていきます。

 

 

 

リフレクションとは?

ちょいちょいリフレクションという単語が出てきているけど、聞いたことなかった。

 

pokuwagata.hatenablog.com

 

実行時にわかるデータを使ってなにかの処理をさせたいときに使う、のかな?

なんとなくはわかったが、曖昧です。

概念はわかったような気がするけど、実際にこれをどう使うのか?なんで使いたいのかがよく理解できていないです。

これは一旦置いてお生きます。

 

 

 

データベース連携方針まとめ

色々比較検討した上で、決めていきたかったのですが、メリットデメリットを考えられるほどつらみとかを理解していないってのもあり、判断軸がないです。

なので、友人が勧めてくれたSQL-Boilerとgooseを脳死で使っていきたいと思います。