GLANZ. CREATIVE WORKS
Git

コミットメッセージとタグ

Conventional Commitsに準拠したコミットメッセージの書き方とタグ運用

コミットメッセージ規約

原則 Conventional Commits の仕様に準拠してください。これにより、変更の意図を明確にし、リリースノートの自動生成などを容易にします。

なぜConventional Commitsを使うのか

  • 変更内容の明確化: コミットの目的が一目で分かる
  • リリースノート自動生成: 変更履歴を自動的に作成できる
  • セマンティックバージョニング: バージョン番号の自動決定が可能
  • チーム内の統一: 誰が書いても同じ形式になる
開発初期やリリース前は、スピード重視でコミットメッセージが雑でも構いません。
※プッシュやマージのし忘れには注意してください。

フォーマット

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

基本構造

  • type: コミットの種類(必須)
  • scope: 変更の範囲(省略可)
  • description: 変更内容の簡潔な説明(必須)
  • body: 詳細な説明(省略可)
  • footer: 破壊的変更やIssue参照(省略可)
scope(スコープ)、body(本文)、footer は省略可能です。 短い修正や説明不要な場合は 1 行のみでも問題ありません。

type の種類

主要なtype

type説明
feat新機能の追加feat: ユーザー登録機能の追加
fixバグ修正fix: ログインフォームのバリデーションエラー修正
docsドキュメントのみの変更docs: READMEのセットアップ手順を更新
styleコードの意味に影響しないフォーマット変更style: インデントを修正
refactorリファクタリング(機能変更なし)refactor: APIクライアントを関数化
perfパフォーマンス改善perf: 画像の遅延読み込みを実装
testテストの追加・修正test: ユーザー認証のテストを追加
choreビルドプロセスやツールの変更chore: 依存関係を更新

その他のtype(任意)

type説明
buildビルドシステムの変更build: webpackの設定を更新
ciCI設定の変更ci: GitHub Actionsのワークフローを追加
revert以前のコミットの取り消しrevert: "feat: ユーザー登録機能の追加"

scope の使い方

scopeは変更の範囲を示します(省略可)。

feat(auth): ログイン機能の追加
fix(api): ユーザー取得のエラーハンドリング修正
docs(readme): セットアップ手順を追記
style(button): ボタンのスタイルを統一

scopeの例

  • コンポーネント名: button, header, modal
  • 機能領域: auth, payment, search
  • ファイル名: index, config, utils
scopeは短く、意味が明確であることが重要です。 プロジェクト内で統一したscopeを使うと、検索や履歴の整理が容易になります。

description の書き方

descriptionは変更内容を簡潔に説明します。

feat: ユーザー認証機能を追加
fix: ログインフォームのバリデーションエラーを修正
docs: API仕様書を更新
refactor: データ取得ロジックを共通化

descriptionのルール

  • 動詞で始める: 「追加」「修正」「更新」など
  • 現在形を使う: 「追加した」ではなく「追加」
  • 簡潔に: 50文字以内を目安に
  • 具体的に: 何を変更したか明確に

body の使い方

詳細な説明が必要な場合は、bodyを使用します。

feat: ユーザー認証機能を追加

JWT トークンを使用した認証システムを実装しました。
ログイン、ログアウト、トークンリフレッシュに対応しています。

セキュリティ向上のため、HTTPOnlyクッキーにトークンを保存します。
bodyは省略可能です。 コミットの内容が複雑で、descriptionだけでは説明しきれない場合に使用してください。

Breaking Change(破壊的変更)

APIの変更など、後方互換性のない変更がある場合は明記します。

feat: API レスポンス形式を変更

BREAKING CHANGE: APIレスポンスの形式が変更されました。
以前は { data: {...} } でしたが、現在は { result: {...} } になります。

Issue参照

関連するIssueがある場合は、footerで参照します。

fix: ログインエラーを修正

Closes #123
feat: 検索機能を追加

Resolves #45
Refs #46, #47

実例

シンプルな例

feat: ダークモード対応
fix: 画像が表示されない問題を修正
docs: コントリビューションガイドを追加
style: コードフォーマットを統一
refactor: useAuthフックを作成
test: ログイン機能のテストを追加
chore: ESLintの設定を更新

scope付き

feat(auth): パスワードリセット機能を追加
fix(api): ユーザー一覧取得のページネーションを修正
docs(deploy): デプロイ手順を更新
refactor(hooks): カスタムフックを共通化

body付き

feat: メール通知機能を実装

SendGridを使用したメール送信システムを追加しました。
以下のイベント発生時に通知を送信します:
- ユーザー登録完了
- パスワードリセット
- 重要なアカウント変更

環境変数 SENDGRID_API_KEY の設定が必要です。

Breaking Change付き

refactor: 環境変数名を変更

BREAKING CHANGE: 環境変数の命名規則を統一しました。
以下の環境変数名が変更されています:
- API_KEY → VITE_API_KEY
- DB_URL → DATABASE_URL
- SECRET → JWT_SECRET

.env ファイルを更新してください。

タグ運用

必要に応じて、Gitタグを使用してバージョンを管理できます。

タグ運用は必須ではありません。

タグの命名規則

セマンティックバージョニング(SemVer)に準拠します。

v<major>.<minor>.<patch>

例:
v1.0.0
v1.2.3
v2.0.0-beta.1
  • major: 破壊的変更がある場合に上げる
  • minor: 後方互換性のある機能追加
  • patch: 後方互換性のあるバグ修正
プロジェクトによっては、日付ベースのタグ(例: release20250114)を使用することもあります。 導入する場合は、チーム内で統一されたルールに従ってください。

タグの作成

git tag v1.0.0
git push origin v1.0.0
注釈付きタグの推奨注釈付きタグには、作成者、日時、メッセージが記録されます。 リリース管理には注釈付きタグを使用することを推奨します。

タグの一覧表示

# すべてのタグを表示
git tag

# パターンに一致するタグを表示
git tag -l "v1.*"

# タグの詳細を表示
git show v1.0.0

タグの削除

git tag -d v1.0.0
タグの削除は慎重に一度公開したタグは、他の人が使用している可能性があります。 誤って作成した場合を除き、既存のタグは削除しないことを推奨します。

リリースノートの自動生成

Conventional Commitsに準拠することで、必要に応じてリリースノートを自動生成できます。

リリースノートは必須ではありません。

ツールの例

  • standard-version: バージョン管理とCHANGELOG生成
  • semantic-release: 完全自動リリース
  • release-please: GitHub Actions での自動リリース
# package.jsonに追加
{
  "scripts": {
    "release": "standard-version"
  }
}

# 実行
npm run release

自動的に以下が行われます:

  1. バージョン番号の決定
  2. CHANGELOG.md の更新
  3. Gitタグの作成
  4. package.json のバージョン更新
GitHub Releasesとの連携タグを作成すると、GitHubのReleasesページでリリースノートを公開できます。