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

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

バージョンは通常、次のように数値とピリオドを用いて記載します。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)をご覧ください。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://maven3.kengo-toda.jp/deploy/snapshot-and-stable.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
