マルチリポジトリ対応コミットスキル
サブモジュールを含むリポジトリで、複数のリポジトリにまたがる変更を適切な順序でコミットします。
このスキルの目的
- •複数リポジトリの変更管理 - 親リポジトリとサブモジュールの変更を一括管理
- •不要ファイルの自動除外 - ビルド成果物・一時ファイル等を自動判定して除外
- •適切なコミット順序 - サブモジュール → 本リポジトリの順序でコミット
- •確認プロセス - ステージング対象をユーザーに確認してからコミット
前提条件
- •Git リポジトリであること
- •サブモジュールが設定されていること(
.gitmodulesが存在)
処理フロー
フェーズ 1: 変更の検出と分析
1.1 サブモジュールの検出
bash
# リポジトリルートに移動
cd {repository_root}
# サブモジュール一覧を取得
git submodule status --recursive
1.2 各リポジトリの変更確認
本リポジトリ(親):
bash
# 親リポジトリの変更確認 git status --porcelain
各サブモジュール:
bash
# サブモジュールごとに変更確認
cd {submodule_path}
git status --porcelain
フェーズ 2: 不要ファイルの自動除外
2.1 除外ルールの適用
変更されたファイルに対して除外ルールを適用します。
詳細は references/exclusion-rules.md を参照してください。
2.2 除外対象の判定
bash
# 変更ファイル一覧を取得 git status --porcelain | while read -r status file; do # 除外ルールに該当するか判定 # 該当する場合は除外リストに追加 done
2.3 除外ファイルの報告
各リポジトリごとに除外されたファイルと理由を表示:
code
📁 サブモジュール: libs/common
❌ 除外されたファイル:
- dist/bundle.js (ビルド成果物)
- node_modules/... (依存関係ディレクトリ)
- .DS_Store (一時ファイル)
✅ ステージング対象:
- src/utils.ts
- README.md
フェーズ 3: ステージング確認
3.1 確認内容の提示
各リポジトリごとに以下を表示:
- •ステージング対象ファイル一覧
- •除外されたファイルと理由
- •変更内容の概要(追加/変更/削除ファイル数)
3.2 ユーザー確認
🚨 重要:必ずユーザーに確認を取ってください 🚨
ask_user ツールを使用して以下を確認:
code
以下の変更をコミットします。よろしいですか? 📁 サブモジュール: libs/common - 変更: 3ファイル(追加: 1, 変更: 2, 削除: 0) - 除外: 5ファイル 📁 本リポジトリ - 変更: 2ファイル(追加: 2, 変更: 0, 削除: 0) - 除外: 1ファイル [続行] / [キャンセル] / [詳細を表示]
フェーズ 4: サブモジュールのコミット
4.1 サブモジュールごとにコミット
🚨 重要:サブモジュールを先にコミットしてください 🚨
各サブモジュールで以下を実行:
bash
cd {submodule_path}
# ステージング(除外ファイル以外)
git add {staging_files}
# 変更内容の確認
git diff --cached --stat
git diff --cached
# コミットメッセージ生成(日本語)
# 変更内容を分析して適切なメッセージを生成
4.2 コミットメッセージの生成規則
🚨 重要:コミットメッセージは必ず日本語で生成してください 🚨
変更内容から適切なプレフィックスを判定:
| 変更タイプ | プレフィックス | 例 |
|---|---|---|
| 新機能追加 | feat: | feat: ユーザー認証機能を追加 |
| バグ修正 | fix: | fix: APIレスポンスの形式を修正 |
| ドキュメント | docs: | docs: README更新 |
| リファクタリング | refactor: | refactor: 共通処理を抽出 |
| テスト | test: | test: 単体テストを追加 |
| スタイル | style: | style: コードフォーマット修正 |
| 設定変更 | chore: | chore: 依存関係を更新 |
コミットメッセージフォーマット:
code
{プレフィックス}: {変更内容の要約(日本語)}
変更内容:
- {詳細1}
- {詳細2}
変更ファイル:
- {ファイル1}
- {ファイル2}
4.3 コミット実行
bash
git commit -m "{生成したコミットメッセージ}"
# コミット成功を確認
git log --oneline -1
フェーズ 5: 本リポジトリのコミット
5.1 サブモジュール参照の更新確認
サブモジュールのコミット後、親リポジトリでサブモジュール参照が更新されます:
bash
cd {repository_root}
# サブモジュール参照の変更を確認
git status
# 出力例:
# modified: libs/common (new commits)
5.2 ステージングと確認
bash
# サブモジュール参照 + その他の変更をステージング
git add {staging_files}
# ステージング内容確認
git diff --cached --stat
5.3 本リポジトリのコミットメッセージ生成
サブモジュール更新を含むコミットメッセージ:
code
{プレフィックス}: {変更内容の要約(日本語)}
変更内容:
- {詳細1}
- {詳細2}
サブモジュール更新:
- libs/common: {サブモジュールのコミットメッセージ要約}
例:
code
docs: サブモジュール概要ドキュメントを追加 変更内容: - 各サブモジュールの概要説明を追加 - アーキテクチャ図を更新 サブモジュール更新: - libs/common: feat: 共通ユーティリティを追加 - libs/api: fix: APIレスポンス形式を修正
5.4 コミット実行
bash
git commit -m "{生成したコミットメッセージ}"
# コミット成功を確認
git log --oneline -1
フェーズ 6: 結果報告
コミット完了後、以下の情報を報告:
code
✅ マルチリポジトリコミット完了 📁 サブモジュール: libs/common - コミット: abc1234 - メッセージ: feat: 共通ユーティリティを追加 - ファイル数: 3 📁 サブモジュール: libs/api - コミット: def5678 - メッセージ: fix: APIレスポンス形式を修正 - ファイル数: 2 📁 本リポジトリ - コミット: ghi9012 - メッセージ: docs: サブモジュール概要ドキュメントを追加 - ファイル数: 4
エラーハンドリング
サブモジュールコミット失敗時
🚨 重要:サブモジュールのコミット失敗時は処理を中止してください 🚨
code
❌ コミット失敗
📁 サブモジュール: libs/common
- エラー: {エラーメッセージ}
⚠️ 処理を中止しました。
サブモジュール libs/common のコミットに失敗したため、
後続の処理は実行されていません。
🔄 ロールバックオプション:
1. 変更を確認して再試行
2. 手動でコミット
3. 変更を取り消す
ロールバック対応
サブモジュールでコミット完了後に本リポジトリでエラーが発生した場合:
bash
# コミット済みサブモジュールをロールバック
cd {submodule_path}
git reset --soft HEAD^
# ステージングは維持されるため、再コミット可能
エラー種別と対応
| エラー | 対応 |
|---|---|
| サブモジュールが未初期化 | git submodule update --init を提案 |
| サブモジュールでコンフリクト | コンフリクト解消を案内して中止 |
| ステージング対象が空 | 「変更がありません」として正常終了 |
| コミットメッセージ生成失敗 | 手動入力を求める |
| 本リポジトリコミット失敗 | サブモジュールのロールバックを提案 |
注意事項
- •🚨 コミットメッセージは必ず日本語を使用してください(英語は禁止)🚨
- •サブモジュールは必ず先にコミットしてください(参照整合性のため)
- •除外ルールは
references/exclusion-rules.mdで管理されています - •ユーザー確認を省略しないでください
- •このスキルはコミットのみ実行し、プッシュは行いません
典型的なワークフロー
code
[サブモジュール検出] --> git submodule status で一覧取得
|
[変更確認] --> 各リポジトリの変更を確認
|
[除外判定] --> 不要ファイルを自動除外
|
[ユーザー確認] --> ステージング対象の確認
|
+--> キャンセル --> [終了]
|
[サブモジュールコミット] --> 各サブモジュールで順次コミット
|
+--> 失敗 --> [エラー報告・中止]
|
[本リポジトリコミット] --> 親リポジトリでコミット
|
+--> 失敗 --> [ロールバック提案]
|
[結果報告] --> 全コミット情報を表示
使用例
基本的な使用
code
マルチリポジトリコミットスキルを使用して、 サブモジュールと本リポジトリの変更をコミットしてください。
特定のサブモジュールのみ
code
libs/common サブモジュールと本リポジトリの変更のみをコミットしてください。 他のサブモジュールの変更は無視してください。
関連ファイル
- •
references/exclusion-rules.md- 除外ルール定義