> For the complete documentation index, see [llms.txt](https://maven3.kengo-toda.jp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://maven3.kengo-toda.jp/deploy/snapshot-and-stable.md).

# バージョンの種類と使い分け

## メジャーバージョン、マイナーバージョン、パッチバージョン

バージョンは通常、次のように数値とピリオドを用いて記載します。Mavenでもこの方法に従います。 ピリオドはいくつでも使うことができますが、特に書式にこだわりがない場合、[Semantic Versioning 2.0.0](http://semver.org/)に従い左から順にメジャー・マイナー・パッチとしておくとよいでしょう。

* `1.0`
* `1.2.3`

メジャーバージョンは機能に大きな変更があった場合、マイナーバージョンは後方互換性を保つ変更があった場合、パッチバージョンはバグ修正が行われた場合に大きくなります。 これらの数値は `1.10.12` のように2桁以上になることも可能です。

## 安定バージョン

もし多くの人に使ってほしい安定版を公開するなら、安定バージョンの公開を検討しましょう。 後述する`maven-release-plugin`を使えば、安定バージョンが満たすべき条件を自動的に検証してくれます。

安定バージョンとは、前述のように数値とピリオドだけで構成されたものです。 反面、実装やインタフェースが安定しない開発途上のものを公開するなら、修飾子を用いて安定版でないことを明示するとよいでしょう。

## SNAPSHOT修飾子

もっとも代表的な修飾子が *SNAPSHOT修飾子* です。

バージョンにSNAPSHOT修飾子を含めることで、使い手とMavenに対して安定版ではないことを伝えることができます。 修飾子は次のように、半角ダッシュを使ってバージョン番号の後ろに付記します。 大文字でも小文字でも構いませんが、慣習として大文字を使用することが多いようです。

* `1.2.3-SNAPSHOT`
* `1.0-snapshot`

artifactは通常1バージョンにつき1度しかdeployできませんが、SNAPSHOT修飾子を利用したバージョンは同じバージョンで何度も異なるartifactをデプロイできます。 これにより、利用者に対して *常に最新の開発版を提供できます* 。

## その他の修飾子

Maven3は他にもバージョンに特別な意味を持たせるための修飾子を提供しています。 修飾子を不安定な順（古い順）に並べると、次のとおりです。 RCはリリース候補（Release Candidate）、SPはサービスパック（Service Pack）の略です。

1. `alpha` （短縮表記として `a` を利用可能）
2. `beta` （短縮表記として `b` を利用可能）
3. `milestone` （短縮表記として `m` を利用可能）
4. `rc` or `cr`
5. `snapshot` （前述）
6. `ga` or `final` （修飾子なしと同様）
7. `sp`

たとえばバージョン `1.2.3` の開発過程において、次の順で修飾子を利用できます。

* `1.2.3-alpha1`, `1.2.3-alpha2`, ... (`1.2.3` のアルファ版)
* `1.2.3-beta1`, `1.2.3-beta2`, ... (`1.2.3` のベータ版)
* `1.2.3-m1`, `1.2.3-m2`, ... (`1.2.3` のマイルストーン版)
* `1.2.3-rc1`, `1.2.3-rc2`, ... (`1.2.3` のリリース候補版)
* `1.2.3-SNAPSHOT` (`1.2.3` の最新開発中バージョン)
* `1.2.3` (`1.2.3` 安定版)
* `1.2.3-sp1`, `1.2.3-sp2`, ... (`1.2.3` バグ修正版)

修飾子を活用している事例としては、[org.hibernate:hibernate-core](http://mvnrepository.com/artifact/org.hibernate/hibernate-core)がわかりやすいでしょう。 バージョンアップではALPHA, BETA, CRとFINAL修飾子を用いたリリースを、バグ修正ではパッチバージョンや[SP修飾子を用いたリリース](http://planet.jboss.org/post/hibernate_orm_4_2_7_sp1_released)を行っています。

## ピリオドとダッシュの違い

このページで紹介している命名方法を利用している限り、この違いを意識する必要はありません。 興味のある方は[公式ドキュメント](https://cwiki.apache.org/confluence/display/MAVENOLD/Versioning)をご覧ください。
