sbt-dao-generatorの互換壊したversion 2リリース

以下のsbt pluginの話

https://github.com/sbt-dao-generator/sbt-dao-generator

version 2の話の前に、簡単な歴史や概要説明。

元々は某社で作成されて、その後、以下のような経緯で専用organizationになって

github.com

ここ数年は結局99%ほぼ自分がメンテしているsbt plugnです。

すでにdatabaseやtableが作成済の実際のdatabase(例えばMySQLPostgreSQLなど)からsbtのtask実行時に情報を読み取って、そこから任意のコード生成をするsbt pluginです。

コード生成をするにあたってFreeMakerというtemplate使っているのが特徴です。

freemarker.apache.org

例えばscalikejdbc本体にもsbt pluginがあって、似たようにコード生成してくれるものがありますが、 あれは細かい設定項目はいくつかあっても、結局生成されるコードの大枠は決まっていて、大幅に変えようとするとsbt plugin本体を改造しないといけなくなるので、

そういう点を考慮すると、このsbt-dao-generatorの方が明らかに柔軟性があります。

そういう柔軟性が欲しい場合は、こういうアーキテクチャの方が優れていると思います。

さて、今まで大幅に互換壊さない程度には細かい改善をずっとやってきたわけですが(例えばsbt 2対応済。その他詳細割愛)、

一番気になることとして、sbtにおけるkey名の慣習に従ってなくて微妙、というのがありました。

sbtのkey名は autoImport のものは勝手にimportされて実質globalな名前空間に放り出される(?)ので、そこで衝突しないように、だいたいユニークになりそうなprefixをつける慣習になっています。 *1

既存のversion 1.xまでのsbt-dao-generatorは、そうなっていないし、しかも generator というtaskを名前空間的に使うためだけに定義してましたが

名前空間的に使うためだけにtask定義」

は明らかに微妙だし、しかもそのtask keyの名前が generator という、衝突しても不思議ではない微妙な名前でした。

しかもこうやって a / b とtaskに紐付けて名前空間のようにしても、後半?の b 部分の名前衝突を完全に気にしなくてよくなるわけでもないので、本当に微妙です。

よって、大昔から思っていたのですが、今更ながらそこを変えて、 generator というkeyは消し、他の全部のkeyに daoGenerator というprefixをつけました。

https://github.com/sbt-dao-generator/sbt-dao-generator/commit/d3d6fd66a83e07d755dd78f27aaa9b6465f8774a

これが一番やりたかった大きな互換破壊で、どうせ互換を破壊するならついでに

をやって、2.0.0-RC1をリリースしました。

どうせ互換大幅に壊すしpackageも変更したので

deprecated にして古いkeyを一時的に残す」

などの丁寧な対応は、不可能ではなかったけど、メンテコストが面倒なので、実施してません。

他は変えてないので、明らかに互換は壊れるけど、移行はひたすら単純な置換だけで済むはずです。

これで特に何もなければRCではなく2.0.0をそのうちリリースすると思います。

*1:autoImport内部の定義ではなくても、結局keyの名前空間は同じなので、結局衝突は気にする必要がある