Git バージョン管理 ・ 中級タグとリリース(tag)
「このコミットが v1.0.0 として世に出したバージョンだ」という目印を付けたいとき、Gitではタグを使います。軽量タグと注釈付きタグの違い、v1.2.3のようなバージョン番号の付け方の慣習、そしてタグはpushしないとリモートに反映されない点まで、リリース管理の基本を押さえます。
コミットには自動でハッシュ値(3a9f1c2 のような英数字)が振られるが、これは人間にとって覚えやすいものではない。「あのコミットがリリースしたバージョンだったよね」というとき、ハッシュを覚えている人はまずいない。
ブランチ名で管理する方法も考えられるが、ブランチは日々の作業のために新しいコミットが積まれ続ける、動き続ける存在だ。「この一点で固定して残しておきたい」というリリースの目的には向かない。
そこでコミットに人間が読める名札を付ける仕組みがタグだ。git tag v1.0.0 のように打つと、今のコミットに v1.0.0 という名前が付き、以後はハッシュの代わりにこの名前で参照できるようになる。
🔗たとえコミット履歴を本の各ページだとすると、タグは「しおり」に近い。ページ番号(ハッシュ)を覚えなくても、しおりの名前(v1.0.0)を見ればすぐそのページに戻れる。
💡ポイントタグは「特定のコミットに付けた変わらない名札」。ブランチと違い、タグ自体は基本的に動かない(新しいコミットが積まれても付いていかない)のが大きな違いだ。
🏷️ 軽量タグと注釈付きタグ
タグには2種類ある。軽量タグ(lightweight tag)と、注釈付きタグ(annotated tag)だ。
軽量タグは git tag v1.0.0 のように名前だけを付ける、シンプルな付箋のようなものだ。作成者やメッセージの情報を持たない。
注釈付きタグは git tag -a v1.0.0 -m "最初の安定版" のように -a と -m を付けて作る。作成者・日付・メッセージを持つ、独立したオブジェクトとして記録される。
▶例注釈付きタグを作る
$ git tag -a v1.0.0 -m "最初の安定版リリース"
$ git show v1.0.0
tag v1.0.0
Tagger: yamada <yamada@example.com>
Date: Fri Jul 3 10:00:00 2026 +0900
最初の安定版リリース
commit 3a9f1c2...
⚠つまずきリリースのように「誰が・いつ・なぜこのバージョンを切ったか」を残す価値がある場面では、注釈付きタグ(-a -m)を使うのが基本だ。軽量タグは手元でのちょっとした目印付けに向く。
🔢 v1.2.3 という数字の意味
バージョン番号には v1.2.3 のように3つの数字を使う慣習が広く使われている。これはセマンティックバージョニング(semver)と呼ばれる考え方で、それぞれの数字に意味がある。
1つ目(メジャー)は、これまでの使い方と互換性のない大きな変更をしたときに上げる。2つ目(マイナー)は、互換性を保ったまま機能を追加したときに上げる。3つ目(パッチ)は、バグ修正など小さな直しをしたときに上げる。
🔗たとえv2.3.1 なら「大きな作り直しを2回、機能追加を3回、細かい修正を1回積み重ねてきた」という履歴が、数字を見るだけで伝わる。
💡ポイントすべてのプロジェクトが厳密にsemverに従っているわけではないが、v数字.数字.数字 という形式自体は広く通じる共通言語になっている。迷ったらこの形式に合わせておくと親切だ。
📤 push --tags を忘れずに
タグは、git push を普通に実行しただけではリモートに送られない。コミットとタグは別物として扱われるため、タグを共有したいときは明示的に push する必要がある。
▶例特定のタグだけをpushする
$ git push origin v1.0.0
* [new tag] v1.0.0 -> v1.0.0
手元に複数のタグがあり、まとめて送りたいときは --tags オプションを使う。
▶例すべてのタグをまとめてpushする
$ git push origin --tags
* [new tag] v1.0.0 -> v1.0.0
* [new tag] v1.1.0 -> v1.1.0
⚠つまずき「タグを作ったのにリモートのリリース一覧に出てこない」という相談の大半は、この push --tags を忘れているケースだ。ローカルで完結させず、必ずpushまでをセットで覚えておく。
✓コツGitHub上では、pushしたタグをもとに「Releases」というページでリリースノートをまとめて公開できる。タグはその土台になる存在なので、リリースのたびに欠かさず打つ習慣をつけておくと後工程もスムーズになる。
🔍 タグの時点を見に行く
過去のリリース時点のコードを見たいときは git checkout v1.0.0 とすると、そのタグが指すコミットの状態にファイルが切り替わる。
✓コツこのときブランチではなく特定のコミットを直接指す状態(detached HEAD、ブランチから切り離された状態)になる。見るだけなら問題ないが、ここで新しくコミットをしたい場合は git switch -c hotfix/v1.0.1 のように新しいブランチを切ってから作業するのが安全だ。
たとえば「本番でv1.0.0にだけ出ている不具合を、その時点のコードで再現して直したい」という場面では、まずタグを checkout して状況を確認し、修正が必要と分かった時点で新しいブランチを切って作業する、という流れが安全だ。
タグを使えるようになると、「あのバージョンのコードはどうなっていたか」をいつでも正確に呼び出せるようになる。リリースのたびにタグを打つ習慣は、あとから自分を助ける小さな保険だ。
小さな個人開発であっても、区切りのよいところでタグを打っておくと、「動いていた最後の地点」に迷わず戻れる安心感がある。コミットを重ねるだけでなく、節目にしおりを挟む発想を持っておきたい。
🧹 タグの削除と付け間違い
タグを付け間違えた、あるいは不要になったという場合もある。ローカルのタグを消すには git tag -d タグ名 を使う。
▶例ローカルのタグを削除する
$ git tag -d v1.0.1
Deleted tag 'v1.0.1' (was 9c3e2a0)
⚠つまずきローカルで削除しても、すでにpush済みのタグはリモートにはそのまま残り続ける。リモート側も消したい場合は git push origin --delete v1.0.1 のように、リモート削除の指定を別途行う必要がある。
▶例リモート側のタグも削除する
$ git push origin --delete v1.0.1
To github.com:example/repo.git
- [deleted] v1.0.1
✓コツ一度公開してしまったバージョン番号は、他の人がすでに参照している可能性がある。付け間違いに気づいたら、こっそり消して同じ番号を使い回すより、v1.0.2 のように次の番号へ進めるほうが混乱を招きにくい。
📋 タグの一覧と絞り込み
作成済みのタグを見るには git tag だけで一覧が出るが、数が増えてくると絞り込みたくなる。git tag -l "v1.*" のようにパターンを指定すると、条件に合うタグだけを表示できる。
▶例v1系のタグだけ絞り込む
$ git tag -l "v1.*"
v1.0.0
v1.1.0
v1.2.0
💡ポイントタグが増えてきたプロジェクトほど、絞り込み表示や git tag --sort=-creatordate のような並び替えが役立つ。最新のリリースがどれか一目で分かるようにしておくと、運用のストレスが減る。
❓ ブランチとタグ、何が違うのか
初心者がよく混同するのがブランチとタグの違いだ。ブランチは「今後もコミットが積まれていく、動く先端」であるのに対し、タグは「その瞬間で止まった、動かない目印」という違いがある。
🔗たとえブランチは常に成長していく木の枝そのもの、タグはその枝のある一点に結んだリボンだ。枝は伸び続けても、リボンを結んだ位置は変わらない。
リリースブランチという運用スタイルもあるが、それとタグは役割が異なる。リリースブランチは「そのバージョン専用の修正を続ける場所」、タグは「公開した瞬間そのものの記録」と考えると整理しやすい。両方を組み合わせて、大きな修正はブランチで、公開の記録はタグで、という使い分けをするプロジェクトも多い。
この項目に出てくる用語
タグたぐ特定のコミットに付ける、変わらない名札。リリースの目印として使う。
セマンティックバージョニングせまんてぃっくばーじょにんぐv1.2.3のように メジャー.マイナー.パッチ の3数字でバージョンの意味を表す命名の慣習。
リリース地点りりーすちてんソフトウェアを外部に公開した瞬間のコミットのこと。タグで固定して記録するのが一般的。
関連コマンド
▶ 学習アプリでこの続きを学ぶ・演習する