Files
gh-revtechstudio-rts-plugin…/skills/version-control-guidelines/SKILL.md
2025-11-30 08:51:38 +08:00

454 lines
13 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.
---
name: version-control-guidelines
description: Git運用ガイドライン、ブランチ戦略、コミットメッセージConventional Commits、プルリクエスト作成、個人開発とチーム開発の使い分けを定義する。Gitコミット作成時、ブランチ作成時、PR作成時、またはユーザーがコミットメッセージ、ブランチ戦略、バージョン管理、Conventional Commits、Semantic Versioningに言及した際に使用する。
---
# Version Control Guidelines
## 概要
このSkillは、Gitを使用したバージョン管理の運用ガイドラインを定義する。Conventional Commits形式のコミットメッセージ、適切なPRレビュープロセス、Semantic Versioningによるリリース管理など、品質を担保しつつ効率的な開発を実現することを目的とする。個人開発ではセルフレビュー可、チーム開発では最低1名のレビュー承認が必要となる。
## 責任範囲
このSkillは以下の範囲をカバーする:
- 個人開発とチーム開発の運用方針
- ブランチ戦略(個人開発・チーム開発別)
- コミットメッセージの記述ルールConventional Commits形式
- プルリクエストのガイドライン
- マージ方針とコンフリクト解決
- タグとリリース管理Semantic Versioning
## 基本方針
### 共通ルール
以下のルールは個人開発・チーム開発に関わらず適用する:
- コミットメッセージ、PR、IssueにAI自動生成署名を記述しない
- メッセージは原則として英語で記述する
- チームの主要言語が英語以外の場合はその言語の使用を許可する
- プロジェクトにテンプレートがある場合はそちらを優先的に使用する
### 個人開発の場合
- シンプルなブランチ戦略を採用する
- コミットメッセージはConventional Commits形式で記述する
- セルフレビュー可
- 素早く実装して素早くリリースする
- ローカルでの実験的な作業を許容する
### チーム開発の場合
- Git Flowブランチ戦略を採用する
- コミットメッセージはConventional Commits形式で詳細に記述する
- 最低1名のレビュー承認が必要
- 品質とスピードのバランスを取る
- チーム全体でルールを統一する
## ブランチ戦略
### ブランチ戦略: 個人開発の場合
シンプルな2ブランチモデルを採用する。
**メインブランチ**:
- `main`: 本番環境にデプロイ可能な状態を保つ
**作業ブランチ**:
- `feat/機能名`: 新機能の開発
- `fix/修正内容`: バグ修正
- `exp/実験内容`: 実験的な実装(任意)
**運用フロー**:
1. `main`から作業ブランチを作成
2. 作業ブランチで実装
3. 動作確認後、`main`にマージ
4. 作業ブランチを削除
良い例:
```bash
# 新機能の開発
git checkout main
git pull
git checkout -b feat/user-auth
# 実装作業
git add .
git commit -m "ユーザー認証機能を実装"
git push origin feat/user-auth
# mainにマージPRは任意
git checkout main
git merge feat/user-auth
git push origin main
git branch -d feat/user-auth
```
### ブランチ戦略: チーム開発の場合
Git Flow風のブランチモデルを採用する。
**永続ブランチ**:
- `main`: 本番環境にデプロイされている状態
- `develop`: 開発中の最新状態(次回リリース候補)
**一時ブランチ**:
- `feature/機能名`: 新機能の開発developから分岐
- `fix/修正内容`: バグ修正developから分岐
- `hotfix/緊急修正内容`: 本番環境の緊急修正mainから分岐
- `release/バージョン番号`: リリース準備developから分岐
**運用フロー**:
1. `develop`から作業ブランチを作成
2. 作業ブランチで実装
3. PRを作成してレビュー依頼
4. レビュー承認後、`develop`にマージ
5. リリース時に`develop`から`release`ブランチを作成
6. `release`ブランチで最終調整後、`main``develop`にマージ
7. `main`にタグを付ける
良い例:
```bash
# 新機能の開発
git checkout develop
git pull
git checkout -b feature/user-profile
# 実装作業
git add .
git commit -m "feat: ユーザープロフィール編集機能を実装"
git push origin feature/user-profile
# PRを作成してレビュー依頼
# レビュー承認後、GitHubでマージ
```
ホットフィックスの例:
```bash
# 本番環境の緊急修正
git checkout main
git pull
git checkout -b hotfix/login-error
# 修正作業
git add .
git commit -m "fix: ログインエラーを緊急修正"
git push origin hotfix/login-error
# PRを作成して迅速にレビュー
# マージ後、mainとdevelopの両方に反映
```
## コミットメッセージ
Conventional Commits形式を採用し、詳細な情報を記述する。
**基本形式**:
```text
<type>: <subject>
<body>
<footer>
```
**Type必須**:
- `feat`: 新機能
- `fix`: バグ修正
- `docs`: ドキュメント更新
- `style`: コードスタイル修正(フォーマット、セミコロンなど)
- `refactor`: リファクタリング
- `test`: テスト追加・修正
- `chore`: ビルドプロセス、ツール設定など
- `perf`: パフォーマンス改善
**Subject必須**:
- 50文字以内
- 命令形で記述(「〜を追加」「〜を修正」)
- 文末にピリオドを付けない
**Body任意**:
- 変更の理由や背景を記述
- 箇条書き(-)で記述する
- 72文字で改行
**Footer任意**:
- 破壊的変更Breaking Changes
- Issue番号Closes #123, Fixes #456
良い例:
```text
feat: add user profile editing feature
- Implement profile information editing (name, email, avatar)
- Add validation for profile fields
- Update user settings page UI
Closes #123
```
```text
fix: resolve session timeout issue on login
- Fix session expiration not being set correctly
- Review session management logic
- Set session timeout to 30 minutes
Fixes #456
```
破壊的変更の例:
```text
feat: change authentication API endpoint
- Migrate endpoint from /auth to /api/v2/auth
- Update API documentation
- Add deprecation notice for old endpoint
BREAKING CHANGE: Authentication API endpoint has been changed.
The /auth endpoint is deprecated, please use /api/v2/auth instead.
```
悪い例AI自動生成署名の使用:
```text
feat: add user profile editing feature
- Implement profile information editing
Closes #123
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
```
### コミットの粒度
- 論理的な変更単位でコミットする
- 1つのコミットで1つの変更を表現する
- WIPコミットは避ける最終的にsquashする
## プルリクエストPR
**PRのタイトル**:
- コミットメッセージと同様の形式
- 50文字以内で簡潔に
**PRの説明**:
- 変更の概要
- 変更の理由
- 動作確認の内容
- レビュー観点
- 関連IssueCloses #123
PRテンプレート例:
```markdown
## Summary
Please describe the summary of this change.
## Changes
- Change 1
- Change 2
- Change 3
## Motivation
Why was this change necessary?
## Testing
- [ ] Tested in local environment
- [ ] Added test cases
- [ ] Verified existing tests pass
## Review Focus
Please describe what reviewers should focus on.
## Related Issues
Closes #123
```
悪い例AI自動生成署名の使用:
```markdown
## Summary
Implemented user profile editing feature.
## Changes
- Add profile editing UI
- Add validation logic
Closes #123
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
```
### PRのレビュー
- 個人開発の場合はセルフレビューでOK
- チーム開発の場合は最低1名の承認が必要
- CI/CDが通ることを確認する
**コードレビューのポイント**:
- コーディング規約に従っているか
- テストが適切に追加されているか
- セキュリティ上の問題がないか
- パフォーマンスへの影響
- ドキュメントが更新されているか
**レビューコメントの書き方**:
```markdown
# 良いコメント例
[提案] この処理は共通関数として切り出せそうです。
再利用性が高まると思います。
[質問] この条件分岐の理由を教えていただけますか?
[重要] この実装はSQLインジェクションの脆弱性があります。
プリペアドステートメントを使用してください。
# 悪いコメント例
これはおかしい
なぜこう書いたの?
ダメ
```
## マージ方針
### マージ方法
**個人開発(シンプルブランチ戦略)の場合**:
- Merge Commit: 履歴を残したい場合
- Squash and Merge: コミット履歴をシンプルにしたい場合(推奨)
- Rebase and Merge: 線形の履歴を保ちたい場合
**チーム開発Git Flowの場合**:
- `feature``develop`: Squash and Merge推奨
- `develop``main`: Merge Commit履歴を保つ
- `hotfix``main`: Merge Commit緊急性を記録
### コンフリクト解決
- コンフリクトが発生したら、必ず元のブランチを最新化してから解決する
- 解決後は必ずテストを実行する
- 不明な点があればチームに相談する
コンフリクト解決例:
```bash
# developを最新化してコンフリクト解決
git checkout feature/user-profile
git fetch origin
git rebase origin/develop
# コンフリクト解決
git add .
git rebase --continue
# テスト実行
npm test
git push origin feature/user-profile --force-with-lease
```
## タグとリリース管理
セマンティックバージョニングSemantic Versioningを採用する。
**バージョン形式**: `MAJOR.MINOR.PATCH`
- `MAJOR`: 破壊的変更
- `MINOR`: 新機能追加(後方互換性あり)
- `PATCH`: バグ修正(後方互換性あり)
良い例:
```bash
# パッチリリース(バグ修正)
git tag -a v1.0.1 -m "ログインバグを修正"
# マイナーリリース(新機能)
git tag -a v1.1.0 -m "ユーザープロフィール機能を追加"
# メジャーリリース(破壊的変更)
git tag -a v2.0.0 -m "認証APIのエンドポイントを変更Breaking Change"
git push origin --tags
```
## ベストプラクティス
- 頻繁にコミットする
- 定期的にリモートにpushするバックアップ
- 実験的なブランチは気軽に作成する(個人開発の場合)
- 不要になったブランチはこまめに削除する
- developブランチを常に最新に保つチーム開発の場合
- PRは小さく保つ500行以内を目安
- レビューは24時間以内に対応するチーム開発の場合
- コンフリクトは早めに解消する
- コミット前にテストを実行する
- 機密情報をコミットしない
## チェックリスト
### ブランチ作成時
- [ ] 最新のコードを取得した(個人開発: main、チーム開発: develop
- [ ] 適切なブランチ名を付けた(個人開発: feat/fix/、チーム開発: feature/fix/
- [ ] ブランチの目的が明確である
### コミット時
- [ ] Conventional Commits形式でコミットメッセージを記述した
- [ ] メッセージを英語で記述したチームの主要言語が英語以外の場合はその言語でOK
- [ ] 本文を箇条書き(-)で記述した
- [ ] AI自動生成署名を含めていない
- [ ] 論理的な変更単位でコミットした
- [ ] テストが通ることを確認した
- [ ] 機密情報を含めていない
- [ ] コーディング規約に従っている
### PR作成時
- [ ] PRテンプレートに従って記載したプロジェクトにテンプレートがある場合はそちらを優先
- [ ] 説明を英語で記述したチームの主要言語が英語以外の場合はその言語でOK
- [ ] AI自動生成署名を含めていない
- [ ] 関連Issueを参照したCloses #123
- [ ] 動作確認を実施した
- [ ] テストを追加した
- [ ] ドキュメントを更新した(必要に応じて)
- [ ] レビュアーを指定した(チーム開発の場合)
### マージ時
- [ ] 動作確認が完了している
- [ ] レビュー承認を得た個人開発の場合はセルフレビュー、チーム開発の場合は最低1名
- [ ] CI/CDが通っている
- [ ] コンフリクトが解消されている
- [ ] ベースブランチが最新であるチーム開発の場合は特にdevelopブランチ
- [ ] テストが通っている
### リリース時
- [ ] 動作確認が完了している
- [ ] releaseブランチから最終確認を実施したチーム開発の場合
- [ ] セマンティックバージョニングに従ってタグを付けた
- [ ] リリースノートを作成した
- [ ] mainとdevelopの両方に反映したチーム開発の場合