タグとは?
タグ(tag)は、特定のコミットに付ける永続的な目印です。主にリリースバージョンを記録するために使用されます。
なぜタグが重要?
📌 バージョンの明確化
- 「どのコミットがv1.0.0なのか分からない」
- 「本番環境で動いているバージョンが不明」
- 「過去のリリースに戻したい」
📋 リリース履歴
- 「いつ何をリリースしたか記録がない」
- 「リリースノートを作成するのが大変」
- 「バージョン間の差分が分からない」
タグの種類
1. 軽量タグ(Lightweight tag)
単純なポインタとして機能します。
# 軽量タグの作成
git tag v1.0.0
# 特定のコミットにタグ付け
git tag v1.0.0 abc1234
2. 注釈付きタグ(Annotated tag)推奨
タグ作成者、日時、メッセージを含む完全なGitオブジェクトです。
# 注釈付きタグの作成
git tag -a v1.0.0 -m "Release version 1.0.0"
# 詳細なメッセージを含める
git tag -a v2.0.0 -m "Release version 2.0.0
Major changes:
- New authentication system
- API v2 endpoints
- Performance improvements"
タグの基本操作
タグの作成と確認
# タグ一覧
git tag
# パターンでフィルタ
git tag -l "v1.*"
# タグの詳細情報
git show v1.0.0
# タグ付きコミットのログ
git log --oneline --decorate
タグの共有
# 特定のタグをプッシュ
git push origin v1.0.0
# すべてのタグをプッシュ
git push origin --tags
# タグを含めてプッシュ
git push --follow-tags
タグの削除
# ローカルのタグを削除
git tag -d v1.0.0
# リモートのタグを削除
git push origin --delete v1.0.0
# または
git push origin :refs/tags/v1.0.0
セマンティックバージョニング
バージョン番号の意味
v1.2.3
│ │ └─ パッチバージョン(バグ修正)
│ └─── マイナーバージョン(後方互換性のある機能追加)
└───── メジャーバージョン(後方互換性のない変更)
バージョニングルール
# パッチリリース(バグ修正)
v1.0.0 → v1.0.1
# マイナーリリース(新機能)
v1.0.1 → v1.1.0
# メジャーリリース(破壊的変更)
v1.1.0 → v2.0.0
# プレリリース
v2.0.0-alpha.1
v2.0.0-beta.1
v2.0.0-rc.1
リリースプロセス
1. リリース準備
# リリースブランチの作成
git checkout -b release/v1.2.0 develop
# バージョン番号の更新
# package.json, pom.xml, version.py など
echo '{"version": "1.2.0"}' > package.json
git add package.json
git commit -m "chore: Bump version to 1.2.0"
2. リリースノートの作成
# 前回のリリースからの変更を確認
git log v1.1.0..HEAD --oneline
# 変更をカテゴリ別にまとめる
git log v1.1.0..HEAD --grep="^feat" --oneline # 新機能
git log v1.1.0..HEAD --grep="^fix" --oneline # バグ修正
git log v1.1.0..HEAD --grep="^docs" --oneline # ドキュメント
3. タグ付けとマージ
# mainにマージ
git checkout main
git merge --no-ff release/v1.2.0
# タグを作成
git tag -a v1.2.0 -m "Release v1.2.0
Features:
- Add user profile page
- Implement dark mode
Bug fixes:
- Fix login timeout issue
- Resolve memory leak in dashboard
See CHANGELOG.md for details"
# developにもマージ
git checkout develop
git merge --no-ff release/v1.2.0
高度なタグ管理
GPG署名付きタグ
# GPG署名付きタグの作成
git tag -s v1.0.0 -m "Signed release v1.0.0"
# 署名の検証
git tag -v v1.0.0
タグからのブランチ作成
# 過去のリリースから修正ブランチを作成
git checkout -b hotfix/v1.0.1 v1.0.0
実践演習
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
リリース自動化
GitHub Actionsでの自動リリース
# .github/workflows/release.yml
name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body: |
See [CHANGELOG.md](CHANGELOG.md) for details
draft: false
prerelease: false
リリースノート自動生成
#!/bin/bash
# generate-release-notes.sh
LAST_TAG=$(git describe --tags --abbrev=0)
NEW_TAG=$1
echo "# Release $NEW_TAG"
echo
echo "## Features"
git log $LAST_TAG..HEAD --grep="^feat" --pretty="- %s"
echo
echo "## Bug Fixes"
git log $LAST_TAG..HEAD --grep="^fix" --pretty="- %s"
echo
echo "## Other Changes"
git log $LAST_TAG..HEAD --grep -v "^feat\|^fix" --pretty="- %s"
ベストプラクティス
1. タグの命名規則
# プロダクションリリース
v1.0.0
v2.1.3
# プレリリース
v1.0.0-alpha.1
v1.0.0-beta.2
v1.0.0-rc.1
# 内部バージョン
internal/v1.0.0-sprint23
2. リリースチェックリスト
- すべてのテストが通る
- ドキュメントが更新されている
- CHANGELOGが更新されている
- バージョン番号が更新されている
- リリースノートが準備されている
3. ロールバック戦略
# 問題があった場合のロールバック
git checkout v1.0.0 # 前のバージョンに戻る
git checkout -b hotfix/v1.0.1 # 修正ブランチを作成
まとめ
タグとリリース管理は、プロジェクトの成長と安定性にとって重要です。セマンティックバージョニングに従い、一貫したリリースプロセスを確立することで、チームとユーザーの両方に価値を提供できます。
次のレッスンでは、Gitの履歴を操作する「履歴の書き換えと危険性」について学びます。