以下のsbt pluginの話
https://github.com/sbt-dao-generator/sbt-dao-generator
version 2の話の前に、簡単な歴史や概要説明。
元々は某社で作成されて、その後、以下のような経緯で専用organizationになって
ここ数年は結局99%ほぼ自分がメンテしているsbt plugnです。
すでにdatabaseやtableが作成済の実際のdatabase(例えばMySQLやPostgreSQLなど)からsbtのtask実行時に情報を読み取って、そこから任意のコード生成をするsbt pluginです。
コード生成をするにあたってFreeMakerというtemplate使っているのが特徴です。
例えば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をつけました。
これが一番やりたかった大きな互換破壊で、どうせ互換を破壊するならついでに
- deprecatedにしてあったものを綺麗に削除 https://github.com/sbt-dao-generator/sbt-dao-generator/commit/2fb9dbc52a924773562b6f762439b922ce884cae
- package名も変更 https://github.com/sbt-dao-generator/sbt-dao-generator/commit/4ca13a355f9e41742cff190bcc028d3f856975ae
をやって、2.0.0-RC1をリリースしました。
どうせ互換大幅に壊すしpackageも変更したので
「 deprecated にして古いkeyを一時的に残す」
などの丁寧な対応は、不可能ではなかったけど、メンテコストが面倒なので、実施してません。
他は変えてないので、明らかに互換は壊れるけど、移行はひたすら単純な置換だけで済むはずです。
これで特に何もなければRCではなく2.0.0をそのうちリリースすると思います。