active_record-connection_proxy
ActiveRecordで複数DBというか複数の接続設定に対応するために、active_record-connection_proxyというライブラリをつくった。
元々は、とあるアプリのRails 4.2から5.0へのアップグレードで必要になってつくった実装だったが、せっかくなのでライブラリ化して公開することにした。
ちなみに、このライブラリは以下の問題意識を背景につくられた。
- Rails 6.0の複数DB用対応はRails 6.0からしか使えない
- 巷のライブラリはreadとwriteの二択にしか対応していないものが多い
- コード量が多いライブラリだといざというときやめにくい
- ブロック形式だとメソッドチェーン方式の既存コードを移行しにくい
かなり雑なつくりになっていて笑っちゃうんだけど、贔屓目にとらえると、パーツだけ提供して、組み立ては利用者にやってもらうという形式が面白いところだと思う。ライブラリを読み込むだけでいい感じに全部やってくれたりすることはないので、自分で組み立てる楽しさと安心感を利用者に感じてもらいたい。
実際のところ、ライブラリはProxyというクラスだけを提供していて、実質30行ぐらいしか実装が無い。ではこのライブラリが本質的に何を提供しているのかというと、connectionを他のモデルから借りてくるだけで上手くいくんじゃない?というアイデアを提供しているのだと思う。そして、実際のところはしっかりやろうとするとクエリキャッシュの管理で上手くいかないかったりする。