goenというgolang用ORM Likeライブラリを公開しました

今まで kallax というPostgreSQL用のORMを使っていたのですが、今後のメンテナンスや、そもそもの機能に不満がありました。 なので goen というORM Likeライブラリを作りました。 現在アルファ版で、フィードバック募集中です。

goenの特徴的な機能として、エンティティに対する変更などをパッチとしてメモリバッファに溜めておき、DBに実際のクエリを投げる際にPatch to SQLコンパイル処理を走らせる点です。 このような設計になっているため、細かいSQLの調整が必要なケースなどでも、独自のコンパイラを作成することで対応ができます。

また、エンティティとしてユーザが利用するstructに対して、goenが余計なフィールドなどを生やすことはしません。 Java等では、POJO(Plain Old Java Object)といって、素のJava Objectに回帰する流れがかなり以前にありましたが、kallaxを使っていて個人的に一番きつかったのが kallax.Model をstructに埋め込まなければならない、という点でした。 そのため、goenではユーザが定義するstructに対して、struct tagのみで動作するような形式を取りました。 同様に、go標準の database/sql パッケージをそのまま利用するAPIとなっているため、相互運用も可能になっています。なっていると良いな。

それと、reflectを使ってgoen単体でも動作するようにしているため、テストコード内で簡単にDBの中身をチェックするケースで使いやすくしています。 カリッカリに組むなら、go generateで各型用の専用処理などを大量に生成するほうが良いのでしょうが、そこまでは個人的にいらないかな、と。 どちらかと言えば、軽く導入して問題があれば手軽にピンポイントで修正を入れられる、という点を重視しています。 なおAPIの全体として、私がC#のEntityFrameworkが好きなため、かなり影響されています。

実際に利用していく中で、APIや設計を変更するかもしれませんが、コンセプト的には変化しないと思います。 もし試した方がいらしたら、フィードバックいただけると嬉しいです。 どうかご縁がありますように。