Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 0 additions & 56 deletions .claude/commands/doc.md

This file was deleted.

14 changes: 0 additions & 14 deletions .claude/commands/pr.md

This file was deleted.

52 changes: 34 additions & 18 deletions .claude/commands/git.md → .claude/skills/git/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
---
description: Git 操作ルール
name: git
description: Git 操作ルール(コミット作成、メッセージ形式、事前チェック)
disable-model-invocation: true
---

# コミット作成

- 「コミット」を求められた場合:
- **重要: まず `git branch --show-current` で現ブランチを確認すること**
- **重要: `main` / `master` / `dev` / `develop` にいる場合、コミットを進めず、ユーザーにトピックブランチ作成を提案する**
- **重要: 必ず `git status` で現在の状態を確認すること**
- **重要: 以前の状態やメモリを信用しない — 必ずステージングエリアの現状を確認**
1. ファイルが既にステージングされている場合:
Expand All @@ -29,8 +33,33 @@ description: Git 操作ルール

# コミット前コンテンツチェック

- `git commit` を実行する前に、必ず `git diff --staged` をスキャンし、プロジェクト固有の名称、企業名、顧客情報など、リポジトリに含めるべきでない情報がないか確認する。
- 該当するものがあれば、コミット前にステージングから除外する。
`git commit` を実行する前に、必ず `git diff --staged` をスキャンして以下の 2 点を確認する。

## 1. 機密・案件情報の検出

プロジェクト固有の名称、企業名、顧客情報、API キー・トークンなど、リポジトリに含めるべきでない情報がないか確認する。

## 2. サンプル値の慣例チェック

サンプル値が「無いこと」ではなく「**予約済み慣例に従っていること**」を確認する。

**許可される値(予約済み慣例):**

- ドメイン: `example.com` / `example.org` / `example.net`、`*.example` / `*.test` / `*.invalid` / `*.localhost`(RFC 2606 / RFC 6761)
- IP: `127.0.0.1`、TEST-NET(`192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`)、`2001:db8::/32`
- メール: `user@example.com` 系

**検出対象(混入してはいけない値):**

- 実在する無関係ドメイン・URL・パス
- 未取得の創作ドメイン(もっともらしい造語ドメインは将来第三者が取得しうる — supply-chain / SEO リスク)
- 案件キーワード・顧客識別子・実データ由来の識別子
- 実データ・実コーパスでの実験・デバッグの残骸(実 URL、実ページタイトル、実クエリ値など)

**検出時の対処:**

- ステージングから除外するのではなく、**汎用値(example.com 等)へ書き換える**(fixture 内の実ドメインは除外しても解決しない)。書き換え後にテストが通ることを確認してからコミットする
- 判断が難しい場合(実データが検証に不可欠に見える等)はユーザーに確認する

# コミットメッセージの形式

Expand All @@ -39,7 +68,7 @@ description: Git 操作ルール
- Conventional Commits を使用すること
- 使用するタイプ: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`
- 使用するスコープ:
- 各パッケージ名(ネームスペースなし): `a11y-check`, `a11y-check-core`, `a11y-check-axe-scenario`, `a11y-check-scenarios`, `archaeologist`, `backlog-projects`, `beholder`, `cli-core`, `dealer`, `filematch`, `fs`, `google-auth`, `google-sheets`, `html-distiller`, `notion`, `print`, `proc-talk`, `puppeteer-dealer`, `puppeteer-general-actions`, `puppeteer-page-scan`, `puppeteer-screenshot`, `puppeteer-scroll`, `readtext`, `remote-inspector`, `replicator`, `roar`, `shared`
- 各パッケージ名(ネームスペースなし): `a11y-check`, `a11y-check-axe-scenario`, `a11y-check-core`, `a11y-check-scenarios`, `archaeologist`, `backlog-projects`, `beholder`, `cli-core`, `dealer`, `filematch`, `fs`, `google-auth`, `google-sheets`, `html-distiller`, `notion`, `page-cluster`, `print`, `proc-talk`, `puppeteer-dealer`, `puppeteer-general-actions`, `puppeteer-page-scan`, `puppeteer-screenshot`, `puppeteer-scroll`, `readtext`, `remote-inspector`, `replicator`, `roar`, `shared`
- `repo`, `deps`, `github`
- メッセージ本文の各行は100文字以下
- 件名は sentence-case, start-case, pascal-case, upper-case にしない
Expand All @@ -52,11 +81,7 @@ description: Git 操作ルール

## Heredoc 形式(破壊的変更では必須)

heredoc とコマンド置換を使って複数行のコミットメッセージを渡す。これにより:

- 特殊文字(感嘆符など)が正しく保持される
- 複数行メッセージが適切にフォーマットされる
- commitlint がメッセージを正しくパースできる
heredoc とコマンド置換を使って複数行のコミットメッセージを渡す。

**形式:**

Expand All @@ -73,17 +98,8 @@ EOF
)"
```

**重要な注意点:**

- `<<'EOF'`(クォート付き)で変数展開を防ぐ
- `EOF` の後に `)` で閉じてコマンド置換を完了
- 破壊的変更で複数の `-m` フラグを使用しない
- メッセージ全体を `"$(cat <<'EOF' ... EOF)"` で囲む

## シンプルなコミット(非破壊的変更)

破壊的変更のないシンプルな1行コミット:

```bash
git commit -m 'type(scope): subject line'
```
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
---
description: ユーザーの計画・考えを徹底的に grill し、共通認識を構築するコマンド
name: grill-me
description: ユーザーの計画・考えを徹底的に grill し、共通認識を構築するスキル
disable-model-invocation: true
---

この計画のあらゆる側面について、私たちが共通の認識に達するまで、徹底的に私に質問を投げかけてください。設計のツリーを枝分かれの先まで一つひとつたどり、決定事項間の依存関係を順番に解決していきましょう。各質問に対し、あなたの推奨する回答も併せて提示してください。質問は一度に一つずつ、AskUserQuestion ツールを使って投げかけてください。もしコードベースを探索することで答えが得られる質問であれば、質問する代わりにコードベースを調査してください。
23 changes: 12 additions & 11 deletions .claude/skills/impl/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
---
description: 合意済み計画を実装し、レビュー・QA・PdM・ドキュメント・lint/test を通して PR 作成まで進める実行系オーケストレーター
description: 合意済み計画を実装し、レビュー・QA・PdM・lint/test を通して PR 作成まで進める実行系オーケストレーター
when_to_use: ユーザーが「実装して」「進めて」「/impl」と指示した場合。grill-me で合意済みの計画を実装フェーズに進めるとき
disable-model-invocation: true
---

# 手順

1. 実装スコープ・アプローチ・トレードオフの合意が会話文脈で成立しているか確認する。未成立なら `/grill-me` を起動し、合意してから次へ
2. 合意した計画の通りに実装する
3. `/code-review xhigh` を実行し、指摘を fix all
4. `/qa-engineer` を実行し、指摘を fix all
5. `/product-manager` を実行し、指摘を fix all
6. `/doc` を実行し、指摘を fix all
7. `yarn lint` を実行し、エラーを修正
8. `yarn test` を実行し、失敗を修正
9. `/git` の手順でコミット
10. `/pr` の手順で PR 作成
2. **ブランチ確認**: 現在のブランチを確認し、`dev` / `main` / エピックの base branch 上にいる場合は `git checkout -b` でサブブランチを切ってから進む。git worktree かどうかの確認は行わない(エージェントは worktree 起動が前提のため、あえてチェックしない)
3. **索引確認**: ARCHITECTURE.md の索引(Reading paths / 不変条件・負の知識 / 境界と所有権)を確認し、該当する Reading path に従って対象コードを読んでから実装に入る(索引が無いリポジトリではこのステップをスキップ)
4. 合意した計画の通りに実装する
5. `/code-review medium` を実行し、指摘を fix all
6. `/qa-engineer` を実行し、指摘を fix all
7. `/product-manager` を実行し、指摘を fix all(ドキュメント整合 — JSDoc・コメント原則・索引と実装の一致 — のチェックを含む)
8. `yarn lint` を実行し、エラーを修正
9. `yarn test` を実行し、失敗を修正
10. `/git` の手順でコミット
11. `/pr` の手順で PR 作成

# 重要ルール

- **fix all の範囲**: コードレベル・テスト追加・ドキュメント修正の指摘はその場で適用。仕様変更やスコープ拡張を伴う指摘はユーザーに許可を取る
- **ループバック**: いずれかのステップで重大な方向転換や巨大なコード変更が発生したら、ステップ 3(`/code-review xhigh`)からやり直す
- **ループバック**: いずれかのステップで重大な方向転換や巨大なコード変更が発生したら、ステップ 5(`/code-review medium`)からやり直す
- **スコープ厳守**: grill-me で合意したスコープを勝手に拡張しない
28 changes: 28 additions & 0 deletions .claude/skills/pr/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
name: pr
description: プルリクエストの作成とプッシュ(プリフライトチェック、base 追従、コンフリクト検知含む)
disable-model-invocation: true
---

1. `dev` や `main` ではないトピックブランチにいることを確認する。
2. **base 追従(コンフリクト予防)**: `git fetch origin <base>` を実行し、`git log HEAD..origin/<base> --oneline` で base が進んでいないか確認する。進んでいれば push 前に `git rebase origin/<base>` する。ドキュメント系のコンフリクトは機械的に解決せず、base 側で追加された内容を方針(索引・JSDoc 配置)に沿って取り込むこと。
3. **プリフライトチェック(必須 — 省略不可):**
- `yarn lint`、`yarn build`、`yarn test` がこのセッション内でまだ実行・成功していない場合、続行する前に**今すぐ実行**する。rebase を行った場合は rebase 後に再実行する。
- 全てがパスしなければならない。失敗があれば続行前に修正する。
4. 適切な `git` コマンドを使って現在のトピックブランチの変更をレビューする。
- **サンプル慣例のダブルチェック**: base branch との全 diff(`git diff <base>...HEAD`)に対して、`.claude/skills/git/SKILL.md` の「サンプル値の慣例チェック」を再実行する。コミット単位のチェックをすり抜けた実在ドメイン・未取得ドメイン・案件識別子・実データ断片がないかを PR 全体で確認する。検出したら汎用値へ書き換えて追加コミットする。
5. **PR body を一時ファイルに保存する**: scratchpad ディレクトリに PR body(markdown)を書き出す。
6. **push と PR 作成はユーザーが実行する**: エージェントは `git push` / `gh pr create` を実行せず、ユーザーがそのまま実行できる `!` 付きコマンドを提示する。ファイルパス引数は必ずダブルクオーテーションで囲む。

```
! git push -u origin <branch>
! gh pr create --title "<title>" --body-file "<PR body の一時ファイルパス>"
```

7. **マージ可能性の確認(CI watch では捕捉できない):**
- ユーザーから PR 作成の報告を受けたら、まず `gh pr view <number> --json mergeable,mergeStateStatus` で **`CONFLICTING` / `DIRTY` を検知**する。`gh pr checks --watch` はステータスチェックしか見ないため、コンフリクトは黙って素通りする。
- `CONFLICTING` なら CI を待たずにステップ 2 の base 追従(rebase + 方針に沿った解決)に戻り、解決後にユーザーへ `! git push --force-with-lease` を依頼する。
8. **CI 監視:**
- `gh pr checks --watch` を**バックグラウンド実行**で起動して CI の完了を待機する(フォアグラウンド実行はターン内タイムアウトで出力が欠損する)。
- テストが途中で失敗した場合は完了を待たずに修正作業に戻る。
- 全テストが通りマージ可能になったらユーザーに報告する。
Loading
Loading