Files
gh-getty104-claude-code-mar…/skills/high-quality-commit/examples.md
2025-11-29 18:28:22 +08:00

7.8 KiB
Raw Blame History

High Quality Commit - Examples

このドキュメントでは、実際の開発シナリオでの具体的な使用例を示します。

例1: 初回実装でのgitコミット

シナリオ

新機能「ユーザープロフィール編集」を実装し、初めてgit commitする

手順

# 1. ブランチ状況確認
git status
# On branch feature/user-profile-edit
# Changes not staged for commit:
#   modified:   src/components/UserProfile.tsx
#   modified:   src/api/user.ts
#   new file:   src/components/ProfileEditForm.tsx

git log --oneline --graph origin/main..HEAD
# (no commits yet on this branch)

# 2. 戦略判断: ブランチに初めてのgitコミット → 新規gitコミット

# 3. git commit実行
git add -A
git commit

gitコミットメッセージ

feat: add user profile editing feature

Implement profile editing functionality:
- Add ProfileEditForm component with validation
- Add PUT /api/users/:id endpoint
- Integrate form with existing UserProfile component

Users can now update their display name, email, and bio.

Closes #234

例2: レビュー指摘への対応Squash

シナリオ

PR作成後、レビューで「バリデーションロジックを改善してください」という指摘を受けた

手順

# 1. 現在のコミット確認
git log --oneline --graph origin/main..HEAD
# * a1b2c3d feat: add user profile editing feature

# 2. 指摘箇所を修正
# src/components/ProfileEditForm.tsx を編集...

# 3. 戦略判断: 既存コミットと同じテーマ → Squash

# 4. 既存コミットに統合
git add -A
git commit --amend

更新されたコミットメッセージ

feat: add user profile editing feature

Implement profile editing functionality:
- Add ProfileEditForm component with enhanced validation
- Add PUT /api/users/:id endpoint
- Integrate form with existing UserProfile component

Validation improvements:
- Email format validation with regex
- Display name length constraints (3-50 chars)
- Real-time validation feedback

Users can now update their display name, email, and bio.

Closes #234
# 6. 強制pushPRを更新
git push --force-with-lease

例3: 独立した機能追加(新規コミット)

シナリオ

ユーザープロフィール編集機能の実装後、別途「プロフィール画像アップロード」機能を追加することになった

手順

# 1. 現在のコミット確認
git log --oneline --graph origin/main..HEAD
# * a1b2c3d feat: add user profile editing feature

# 2. プロフィール画像アップロード機能を実装
# ...

# 3. 戦略判断: 既存コミットとは独立した機能 → 新規コミット

# 4. 新規コミット作成
git add -A
git commit

gitコミットメッセージ

feat: add profile picture upload

Implement profile picture upload functionality:
- Add image upload component with drag-and-drop
- Add POST /api/users/:id/avatar endpoint
- Add image cropping and preview
- Store images in cloud storage

Supports JPEG, PNG, and WebP formats up to 5MB.

Closes #235
# 5. 結果確認
git log --oneline --graph origin/main..HEAD
# * e4f5g6h feat: add profile picture upload
# * a1b2c3d feat: add user profile editing feature

例4: WIPコミットの整理Interactive Rebase

シナリオ

開発中に多数の小さなコミットを作成してしまった。PR作成前に整理したい。

現状のコミット履歴

git log --oneline --graph origin/main..HEAD
# * h7i8j9k WIP: fix typo
# * e4f5g6h WIP: add validation
# * b2c3d4e feat: add profile form
# * y9z0a1b WIP: experiment with layout
# * v6w7x8y feat: add user model
# * s3t4u5v fix: import statement

手順

# 1. Interactive rebaseを開始
git rebase -i origin/main

# 2. エディタが開く

エディタでの編集

変更前:

pick v6w7x8y feat: add user model
pick s3t4u5v fix: import statement
pick y9z0a1b WIP: experiment with layout
pick b2c3d4e feat: add profile form
pick e4f5g6h WIP: add validation
pick h7i8j9k WIP: fix typo

変更後:

pick v6w7x8y feat: add user model
squash s3t4u5v fix: import statement
drop y9z0a1b WIP: experiment with layout
pick b2c3d4e feat: add profile form
squash e4f5g6h WIP: add validation
squash h7i8j9k WIP: fix typo

保存後の編集

2つのコミットメッセージを編集

1つ目のコミット

feat: add user profile model

Define user profile data structure with TypeScript:
- User interface with profile fields
- Profile validation schema
- Type-safe profile operations

Includes display name, email, bio, and avatar URL.

2つ目のコミット

feat: add profile editing form

Implement profile editing UI component:
- Form layout with Material-UI
- Real-time field validation
- Success/error feedback

Users can update their profile information with immediate validation.

結果確認

git log --oneline --graph origin/main..HEAD
# * m1n2o3p feat: add profile editing form
# * j4k5l6m feat: add user profile model

# クリーンな履歴に整理された!

例5: 複数機能の段階的実装

シナリオ

大きな機能「認証システム」を、Model → API → UIの順で段階的に実装

手順

ステップ1: モデル実装

# 実装...

git add src/models/
git commit -m "feat: add authentication model

Define authentication data structures:
- User model with credentials
- JWT token interface
- Session management types

Provides type-safe authentication operations."

git push

ステップ2: API実装

# 実装...

git add src/api/auth.ts
git commit -m "feat: add authentication API endpoints

Implement authentication REST API:
- POST /api/auth/login - User login
- POST /api/auth/logout - User logout
- POST /api/auth/refresh - Token refresh
- GET /api/auth/me - Get current user

Uses JWT for secure token-based authentication."

git push

ステップ3: UI実装

# 実装...

git add src/components/auth/
git commit -m "feat: add authentication UI components

Implement authentication user interface:
- LoginForm component with validation
- Protected route wrapper
- Session persistence
- Auto token refresh

Provides complete authentication UX."

git push

最終的な履歴

git log --oneline --graph origin/main..HEAD
# * q5r6s7t feat: add authentication UI components
# * n2o3p4q feat: add authentication API endpoints
# * k8l9m0n feat: add authentication model

# 各コミットが独立してレビュー可能
# 各コミットが単独でビルド・テスト可能

例6: バグ修正とテスト追加

シナリオ

バグを発見し、修正とテストを同時に実施

手順

# 1. 現在の作業を確認
git status
# On branch fix/validation-bug

# 2. バグ修正とテスト追加
# src/utils/validation.ts を修正
# src/utils/validation.test.ts を追加

# 3. コミット
git add -A
git commit

gitコミットメッセージ

fix: correct email validation regex

Fix email validation to properly handle plus signs (+) in addresses.
Previously, emails like "user+tag@example.com" were incorrectly rejected.

Changes:
- Update regex pattern to include + character
- Add comprehensive test cases for edge cases

Closes #456

まとめ

これらの例から学べる重要なポイント:

  1. 適切な戦略選択: シナリオに応じてSquash/新規gitコミット/Rebaseを使い分け
  2. 明確なメッセージ: 「なぜ」その変更が必要だったのかを記述
  3. 論理的な単位: 各gitコミットが独立して理解できる粒度
  4. 継続的な改善: レビューフィードバックを反映して品質向上

これらの原則に従うことで、チーム全体の生産性が向上します。