openspec-sync-specs について
openspec-sync-specs は、OpenSpec の変更差分をメイン仕様へ反映するエージェントスキルです。差分に含まれない内容を保ちながら、要件を種類に応じて更新します。
主な機能
- 01差分仕様をメイン仕様に統合
- 02要件の追加・変更・削除・改名
- 03無関係なシナリオや内容の保持
- 04変更の選択をユーザーに依頼
- 05同期した仕様変更の報告
活用シーン
- 01変更内容をメイン仕様に反映
- 02既存シナリオを保ってシナリオを追加
- 03差分ファイルを確認して仕様を更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pbh-btn/ peerbanhelper --skill openspec-sync-specsインストール後、Claude Code で/openspec-sync-specsを入力して読み込まれたか確認します。
詳細
変更による差分仕様をメイン仕様に同期します。
これはエージェント主導の操作です。差分仕様を読み、変更を適用するためにメイン仕様を直接編集します。 これにより、インテリジェントなマージが可能になります(例:要件全体をコピーせずにシナリオを追加できます)。
入力:変更名を指定できます。省略した場合は、会話の文脈から推測できるか確認します。不明瞭または 曖昧な場合は、利用可能な変更を必ずユーザーに尋ねてください。
手順
-
変更名が指定されていない場合、選択を求める
openspec list --jsonを実行して利用可能な変更を取得します。AskUserQuestion tool を使ってユーザーに選択してもらいます。差分仕様がある変更(
specs/ディレクトリ内)を表示します。重要:変更を推測したり、自動選択したりしないでください。必ずユーザーに選んでもらいます。
-
差分仕様を見つける
openspec/changes/<name>/specs/*/spec.mdにある差分仕様ファイルを探します。各差分仕様ファイルには、次のようなセクションが含まれています。
## ADDED Requirements- 追加する新しい要件## MODIFIED Requirements- 変更する既存の要件## REMOVED Requirements- 削除する要件## RENAMED Requirements- 名前を変更する要件(FROM:/TO: 形式)
差分仕様が見つからない場合は、ユーザーに伝えて停止します。
-
各差分仕様について、変更をメイン仕様に適用する
openspec/changes/<name>/specs/<capability>/spec.mdに差分仕様がある各機能について、次の手順を実行します。a. 差分仕様を読む:意図された変更を把握します
b. メイン仕様を読む:
openspec/specs/<capability>/spec.mdを読みます(まだ存在しない場合があります)c. 変更をインテリジェントに適用する:
ADDED Requirements:
- メイン仕様に要件が存在しない場合 → 追加する
- 要件がすでに存在する場合 → 内容が一致するように更新する(暗黙的な MODIFIED として扱う)
MODIFIED Requirements:
- メイン仕様内で要件を見つける
- 変更を適用する。次のような変更が可能です。
- 新しいシナリオを追加する(既存のシナリオをコピーする必要はありません)
- 既存のシナリオを変更する
- 要件の説明を変更する
- 差分で言及されていないシナリオや内容は保持します
REMOVED Requirements:
- 要件ブロック全体をメイン仕様から削除する
RENAMED Requirements:
- FROM の要件を見つけ、TO に名前を変更する
d. 機能がまだ存在しない場合は、新しいメイン仕様を作成する:
openspec/specs/<capability>/spec.mdを作成する- Purpose セクションを追加する(簡潔な内容で構いません。「TBD」と記載しても構いません)
- ADDED 要件を含む Requirements セクションを追加する
-
概要を表示する
すべての変更を適用した後、次の内容を要約します。
- 更新した機能
- 実施した変更(要件の追加/変更/削除/名前変更)
差分仕様の形式に関するリファレンス
## ADDED Requirements
### Requirement: New Feature
The system SHALL do something new.
#### Scenario: Basic case
- **WHEN** user does X
- **THEN** system does Y
## MODIFIED Requirements
### Requirement: Existing Feature
#### Scenario: New scenario to add
- **WHEN** user does A
- **THEN** system does B
## REMOVED Requirements
### Requirement: Deprecated Feature
## RENAMED Requirements
- FROM: `### Requirement: Old Name`
- TO: `### Requirement: New Name`
重要な原則:インテリジェントなマージ
プログラムによるマージとは異なり、部分的な更新を適用できます。
- シナリオを追加する場合は、既存のシナリオをコピーせず、そのシナリオだけを MODIFIED の下に記載します
- 差分が示すのは意図であり、全体の置き換えではありません
- 変更を適切にマージするために、自分で判断してください
成功時の出力
## Specs Synced: <change-name>
Updated main specs:
**<capability-1>**:
- Added requirement: "New Feature"
- Modified requirement: "Existing Feature" (added 1 scenario)
**<capability-2>**:
- Created new spec file
- Added requirement: "Another Feature"
Main specs are now updated. The change remains active - archive when implementation is complete.
ガードレール
- 変更を加える前に、差分仕様とメイン仕様の両方を読みます
- 差分で言及されていない既存の内容は保持します
- 不明点があれば、明確化を求めます
- 作業を進めながら、変更内容を表示します
- 操作は冪等である必要があります。つまり、2 回実行しても同じ結果になるようにします