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

351 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# High Quality Commit - Examples
このドキュメントでは、実際の開発シナリオでの具体的な使用例を示します。
## 例1: 初回実装でのgitコミット
### シナリオ
新機能「ユーザープロフィール編集」を実装し、初めてgit commitする
### 手順
```bash
# 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作成後、レビューで「バリデーションロジックを改善してください」という指摘を受けた
### 手順
```bash
# 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
```
```bash
# 6. 強制pushPRを更新
git push --force-with-lease
```
## 例3: 独立した機能追加(新規コミット)
### シナリオ
ユーザープロフィール編集機能の実装後、別途「プロフィール画像アップロード」機能を追加することになった
### 手順
```bash
# 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
```
```bash
# 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作成前に整理したい。
### 現状のコミット履歴
```bash
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
```
### 手順
```bash
# 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.
```
### 結果確認
```bash
git log --oneline --graph origin/main..HEAD
# * m1n2o3p feat: add profile editing form
# * j4k5l6m feat: add user profile model
# クリーンな履歴に整理された!
```
## 例5: 複数機能の段階的実装
### シナリオ
大きな機能「認証システム」を、Model → API → UIの順で段階的に実装
### 手順
#### ステップ1: モデル実装
```bash
# 実装...
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実装
```bash
# 実装...
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実装
```bash
# 実装...
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
```
### 最終的な履歴
```bash
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: バグ修正とテスト追加
### シナリオ
バグを発見し、修正とテストを同時に実施
### 手順
```bash
# 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. **継続的な改善**: レビューフィードバックを反映して品質向上
これらの原則に従うことで、チーム全体の生産性が向上します。