jimble

版と互換性#

いまは 0.x です#

0.x のあいだは、マイナーを上げるときに壊れることがあります。 Semantic Versioning がそう定めていて(1.0 未満は安定を約束しない)、 jimble もそのとおりに扱います。

1.0 からは、公開 API を壊す前に非推奨期間を1マイナー以上置きます。

0.x(いま) 1.0 以降
公開 API を壊す マイナーで起きうる 非推奨期間を1マイナー以上置いてから、次のメジャーで消す
内部実装を変える いつでも いつでも
CHANGELOG に書く 必ず書く 必ず書く

補足

0.x でも、黙って壊すことはしません。 約束していないのは「壊さないこと」であって、「知らせること」ではありません。 壊れうる変更は必ず CHANGELOG の **「変わったこと(挙動)」**に出します。上げる前にそこだけ読めば足ります。

どこまでが公開 API か#

パッケージで線を引いています。

公開 API アプリを書くときに触るもの。io.jimble.dbio.jimble.web.serverio.jimble.util.data など
内部実装 入口クラスの内側でしかないもの。io.jimble.db.sql.query.*SQL の内側)、io.jimble.util.json.encoderDson の内側)など

全部の一覧は docs/api-packages.txt にあります。

落とし穴

public だから公開 API、ではありません。 Java には「モジュールの外から見えるが、使ってほしくはない」を表す修飾子がないので、 内部実装も public になっています。触ってよいかは、上の一覧で見てください。

**この一覧は古くなりません。**パッケージを増やして一覧に書き忘れると、 ApiSurfaceTest が落ちます。サンプル(examples/)が内部パッケージを import していないかも、同じテストが見ています。

シグネチャは同じなのに、結果が変わるとき#

ここがいちばん大事なところです。

jimble でこれまで実際に起きた壊れ方は、ほとんどがシグネチャを変えない変更でした—— 404 が 405 になる、insertBatchnull を返すようになる、 中断したバッチの履歴が completed から canceled になる。 どれもコンパイルは通るので、上げた側は何も気づきません

そこで2つに分けて扱います。

何をするか
壊れていたのを直した **すぐ直します。**非推奨期間は置きません
仕様を変えた 1.0 以降は、古い動きを1マイナーのあいだ残します

「壊れていた」に非推奨期間を置かないのは、置けないからです。 たとえば insertBatch は、SQL の揃っていないビルダーを混ぜると 値が横にずれて入っていました。「1マイナーのあいだは、これまでどおり 壊れたデータを書きます」とは言えません。

どちらであっても、CHANGELOG の「変わったこと(挙動)」には必ず出します。 「直した」に埋めて済ませることはしません。

壊すときに何をするか#

  1. 非推奨にする(1.0 以降)。@Deprecated(since = "1.2", forRemoval = true) を付け、 javadoc に代わりに何を使うかを書きます
  2. **CHANGELOG に書く。**いつ消えるかも書きます
  3. **1マイナー以上あけてから消す。**消すのは次のメジャーです

落とし穴

@Deprecated が付いていても、消えるまでは動きます。 ビルドの警告が出るだけです。警告を切らないでください—— 消えたことに気づくのが、上げたあとになります。

版を選ぶ#

公開されているものは Maven Central にあります。 依存の座標と、そのまま動くビルドファイルは Gradle プラグイン にあります。

このドキュメントサイトは、いちばん新しいリリースの内容です版について)。