🐧 Linux 総合学習プラットフォーム
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)を使うのが基本だ。軽量タグは手元でのちょっとした目印付けに向く。
3a9f1c2軽量タグgit tag v1.0.0注釈付きタグgit tag -a v1.0.0作成者・日付・メモ付き名前だけ独立した記録

🔢 v1.2.3 という数字の意味

バージョン番号には v1.2.3 のように3つの数字を使う慣習が広く使われている。これはセマンティックバージョニング(semver)と呼ばれる考え方で、それぞれの数字に意味がある。

1つ目(メジャー)は、これまでの使い方と互換性のない大きな変更をしたときに上げる。2つ目(マイナー)は、互換性を保ったまま機能を追加したときに上げる。3つ目(パッチ)は、バグ修正など小さな直しをしたときに上げる。

🔗
たとえv2.3.1 なら「大きな作り直しを2回、機能追加を3回、細かい修正を1回積み重ねてきた」という履歴が、数字を見るだけで伝わる。
💡
ポイントすべてのプロジェクトが厳密にsemverに従っているわけではないが、v数字.数字.数字 という形式自体は広く通じる共通言語になっている。迷ったらこの形式に合わせておくと親切だ。
1メジャー互換性のない変更2マイナー互換性のある機能追加3パッチバグ修正など小さな直しv 1 . 2 . 3 の形で表す

📤 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数字でバージョンの意味を表す命名の慣習。
リリース地点りりーすちてん
ソフトウェアを外部に公開した瞬間のコミットのこと。タグで固定して記録するのが一般的。

関連コマンド

git tag

▶ 学習アプリでこの続きを学ぶ・演習する