GLOXINIA Blog

神子ロス (Kamiko Loss) によるブログ

編集部注(2023 年 12 月 1 日):11 月の Unite 2023 で、Unity エディターとランタイムの新しい名前が公開されました。Unity 2023 サイクルの 3 つ目の TECH ストリームは、Unity 6 Preview と命名されます。また、Unity 2023 LTS は Unity 6 と呼ばれることになります。Unity 6 および Unity 6 Preview で提供される内容については、Unite 2023 基調講演 ならびに製品ロードマップのセッション(まもなく YouTube で公開予定)をご覧ください。
Unity は "Unity 2023" のように年度をバージョンにしていたが、次のバージョンを "Unity 6" にすることを発表した。もともと Unity 5 の次を Unity 2017 にするという流れがあったので、元の形式に戻る形となる。そして先日 Unity 6 が実際にリリースされたのだが、そのバージョンが 6000 となぜかバカでかい数字なのが巷で話題になっている。
表示上は Unity 6 とあるが、実際のバージョンは 6000.0.0b11 と1000倍になっている!対魔忍!?一瞬びっくりしたが、すぐに Sematinc Versioning のことが思い当たった。巷はただザワザワしており、このことについて言及しているのをあまり見ない気がする。
Sematinc Versioning (SemVer) とはソフトウェア バージョンをどういう規則でつけるかを決めたものだ。必ずしも従う義務はないが、みんながなるべく同じ認識でやっていくために基準はあった方がいい。GitHub の共同設立者である Thomas Preston-Werner が作ったらしい。
8. メジャーバージョン X (X.y.z | X > 0)は、パブリックAPIに対して後方互換性を持たない変更が取り込まれた場合、上げなければなりません(MUST)。その際にマイナーおよびパッチレベルの変更も含めてもよいです(MAY)。メジャーバージョンを上げた際には、パッチおよびマイナーバージョンを0にリセットしなければなりません(MUST)。
SemVer に従う場合、メジャーバージョンは前のバージョンより上げなければならないのだ!よって Unity 2023 の次を Unity 6 にする場合、表示名はなんでもいいが、バージョンは 2023 より大きくて 6 っぽい整数にしなければならない……ということでしょうがなく 6000 にしたのだろう。
せっかくなので SemVer の仕様を一通り読み返してみたのだが、以下のルールも気になった。
9. プレリリースバージョンは、パッチバージョンの直後にハイフンとドットで区切られた識別子を追加することで表現してもよいです(MAY)。識別子は必ずASCII英数字とハイフン [0-9A-Za-z-] でなければなりません(MUST)。識別子は空であってはなりません(MUST NOT)。数値の識別子はゼロから始めてはなりません(MUST NOT)。プレリリースバージョンは関連する通常のバージョンよりも低い優先度です。プレリリースバージョンは、不安定であり、関連する通常のバージョンが示す要件と互換性を満たさない可能性があります。例:1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92
この文章、微妙に分かりづらくて原語の英語版も読みにいったんだけど、英語版でも同じ表現で分かりづらかった。パッチバージョンのあとに "ハイフンとドットと ASCII 英数字" が使い放題のように見える。だとすると 6000.0.0b11 でも問題なさそうだが、実際にはパッチバージョンのあとに繋げられるのはハイフンだけで、そのあとに "ハイフンと ASCII 英数字" で書かれた識別子を "ドット" で区切って繋げていってもいいよと言っているのだ。
……分かりづらくない?例を見たら分かるんだけど、例を見ないと分からない時点で微妙だし、なんならハイフンを含んだ識別子の例がないのが気になる。 1.0.0-alpha-1 もアリなはずだが。
そういうわけで 6000.0.0b11 というバージョンは SemVer のプレリリースバージョンの仕様に厳密には従っていない。まあ Unity は昔からずっとこうなので、そこは伝統を重視しているのだろう。SemVer に厳密に従った場合は 6000.0.0-b.11 もしくは 6000.0.0-b11 のようになると思われる。