Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
90 changes: 90 additions & 0 deletions .claude/commands/check-coverage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# check-coverage

## 目的

テストカバレッジが全リポジトリ70%以上、クリティカルパス100%の基準を満たしているか確認する。カバレッジの詳細レポートを生成し、改善点を特定。

## 実行手順

1. **カバレッジの測定**
```bash
# カバレッジ付きでテストを実行
npm run test -- --coverage
```

2. **カバレッジサマリの確認**
```bash
# コンソールでサマリを表示
npm run coverage:summary
```

3. **詳細レポートの生成**
```bash
# HTMLレポートを生成
npm run coverage:html

# レポートの場所を表示
echo "Coverage report: ./coverage/lcov-report/index.html"
```

4. **クリティカルパスの確認**
```bash
# クリティカルパスのリストを確認
echo "クリティカルパス:"
echo "- 認証/認可関連機能"
echo "- 決済処理"
echo "- セキュリティ関連機能"
echo "- データの保存/削除処理"
echo "- エラーハンドリング"
```

5. **カバレッジが低いファイルの特定**
```bash
# カバレッジが50%未満のファイルをリスト
npm run coverage:low-files
```

6. **カバレッジレポートのCI用出力**
```bash
# CI用のJUnit形式で出力
npm run coverage:ci
```

7. **カバレッジ履歴の確認**
```bash
# 過去のカバレッジと比較
git show HEAD~1:coverage/coverage-summary.json 2>/dev/null || echo "履歴なし"
```

## 成功基準

- ✅ 全体のラインカバレッジが70%以上
- ✅ ブランチカバレッジが60%以上
- ✅ 関数カバレッジが65%以上
- ✅ クリティカルパスのカバレッジが100%
- ✅ カバレッジレポートが正常に生成される

## トラブルシューティング

### カバレッジが基準を満たさない場合
1. HTMLレポートで未カバーのコードを確認
2. 優先度順にテストを追加:
- クリティカルパス > ビジネスロジック > ユーティリティ
3. テストが難しいコードはリファクタリングを検討

### カバレッジが測定されない場合
1. `jest.config.js` またはテスト設定を確認
2. `collectCoverageFrom` の設定を確認
3. テストが実行されているか確認

### クリティカルパスの特定が難しい場合
1. ビジネス要件を確認
2. セキュリティチームと連携
3. リスクアセスメントを実施
4. `.critical-paths.json` ファイルで明示的に定義

### カバレッジの向上方法
1. TDDを徹底(テストファースト)
2. モックを活用して依存関係を分離
3. エッジケースのテストを追加
4. カバレッジ目標を段階的に設定(60% → 70% → 80%)
122 changes: 122 additions & 0 deletions .claude/commands/fix-ci.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# fix-ci

## 目的

CI失敗時の対応手順を提供し、24時間以内修正ルールを遵守する。CI Red → Slack #ci-alerts → 24h以内修正 or Owner Escalateのフローを実行。

## 実行手順

1. **CIエラーの特定**
```bash
# GitHub Actionsのログを確認
gh run list --limit 5
gh run view <run-id>

# 失敗したジョブの詳細を確認
gh run view <run-id> --log-failed
```

2. **エラータイプの分類**
```bash
echo "エラータイプを確認:"
echo "1. テスト失敗"
echo "2. Lintエラー"
echo "3. ビルドエラー"
echo "4. セキュリティ/脆弱性"
echo "5. デプロイ失敗"
```

3. **ローカルでの再現**
```bash
# CI環境と同じコマンドを実行
npm ci
npm run test:all
npm run quality:check
npm run build
```
Comment on lines +32 to +36

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Package-manager inconsistency (pnpm vs npm)

Earlier docs recommend pnpm; this section uses npm ci. Mixing tools can create divergent lockfiles and caches. Standardise on one (or note both variants).

🤖 Prompt for AI Agents
In .claude/commands/fix-ci.md around lines 32 to 36, the commands use `npm ci`
while earlier documentation recommends `pnpm`, causing inconsistency. Update
this section to use `pnpm install` or the equivalent pnpm commands consistently,
or clearly note both npm and pnpm variants to avoid divergent lockfiles and
caches.


4. **修正の実施**

### テスト失敗の場合
```bash
# 失敗したテストを特定
npm run test -- --verbose
# 修正後、再度テスト
npm run test -- --watch
```

### Lintエラーの場合
```bash
# 自動修正を試す
npm run lint -- --fix
npm run format:fix
```

### ビルドエラーの場合
```bash
# キャッシュをクリア
rm -rf node_modules package-lock.json
npm install
npm run build
```

### セキュリティ問題の場合
```bash
# 脆弱性を修正
npm audit fix
# 強制的に修正(注意が必要)
npm audit fix --force
```

5. **修正の確認とプッシュ**
```bash
# ローカルでCIと同じチェックを実行
npm run ci:check

# 修正をコミット
git add .
git commit -m "fix: CIエラーを修正 (#<issue-number>)"

# プッシュ
git push
```

6. **CIの再実行を確認**
```bash
# CIがグリーンになるまでモニタリング
gh run watch
```

7. **対応完了の報告**
```bash
# Slack #ci-alertsへの報告テンプレート
echo "CI修正完了報告:"
echo "- エラー: <エラー内容>"
echo "- 原因: <原因>"
echo "- 対応: <対応内容>"
echo "- PR: #<PR番号>"
```

## 成功基準

- ✅ CIがグリーンになる
- ✅ 24時間以内に修正完了
- ✅ Slack #ci-alertsに報告済み
- ✅ 根本原因が特定され、再発防止策が実施される

## トラブルシューティング

### 24時間以内に修正できない場合
1. Ownerにエスカレーション
2. 一時的なワークアラウンドを検討
3. RevertしてCIをグリーンにし、後日修正

### ローカルで再現しない場合
1. CI環境との差分を確認(Nodeバージョン、環境変数等)
2. DockerでCI環境を再現
3. CIのキャッシュをクリア

### 繰り返しCIが失敗する場合
1. Flakyテストの可能性を確認
2. テストの安定性を改善(タイムアウト設定、非同期処理の改善)
3. CIパイプラインのリトライ設定を追加
44 changes: 44 additions & 0 deletions .claude/commands/init-project.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@

このプロジェクトは`.devcontainer/devcontainer.json`に定義されたDevContainerで開発することを前提としています。

すでに初期化されており、このコマンドが実行されている場合には、以下の内容を踏まえプロジェクト特有のfeaturesを追加/その他の設定の追加をしてください。
プロジェクトの実際の要件を確認して、必要なfeaturesのみを含むように設定してください。

#### 推奨されるFeatures

- **Node.js & pnpm**: プロジェクトのパッケージ管理
Expand Down Expand Up @@ -55,3 +58,44 @@ npm ci && npm run prepare
- `~/.claude`: Claude設定
- `~/.cursor`: Cursor設定
- `~/.claude.json`: Claude設定ファイル
- `~/.gitconfig`: Git設定
- `~/.gitignore`: Git ignore設定
- `~/.config/gh/hosts.yml`: GitHub CLIの設定

## 推奨Git設定

### Commitlint設定(日本語対応)

プロジェクトで日本語のコミットメッセージを使用する場合、`commitlint.config.js`に以下の設定を推奨します:

```javascript
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'subject-case': [0], // 日本語対応のため無効化
'subject-empty': [2, 'never'],
'type-empty': [2, 'never'],
'scope-empty': [0]
}
};
```

この設定により、日本語のコミットメッセージでも`subject-case`エラーが発生しなくなります。

### Conventional Commits

以下の形式でコミットメッセージを記述します:

```
<type>(<scope>): <subject>

<body>

<footer>
```

- **type**: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`など
- **scope**: 変更の影響範囲(オプション)
- **subject**: 変更内容の要約(日本語可)
- **body**: 詳細な説明(オプション)
- **footer**: Breaking Changeやissue参照(オプション)
83 changes: 83 additions & 0 deletions .claude/commands/pr-create.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# pr-create

## 目的

Pull Request作成時の手順とチェックリストを提供し、Git Workflowの基準(Diff ≤ 400行、ファイル数 ≤ 25)を遵守する。

## 実行手順

1. **ブランチの確認**
```bash
# ブランチ名が規約に沿っているか確認
git branch --show-current
# 形式: feat|fix|chore/<issue#>-slug
```

2. **変更内容の確認**
```bash
# 変更ファイル数の確認
git diff --name-only origin/master | wc -l

# 変更行数の確認
git diff --shortstat origin/master

# ファイルごとの変更行数
git diff --stat origin/master
```

3. **コミットメッセージの確認**
```bash
# Conventional Commitsに沿っているか確認
git log --oneline origin/master..HEAD
```

4. **品質チェックの実行**
```bash
# テストと品質チェックを実行
npm run test:all
npm run quality:check
```

5. **PR作成前の最終チェック**
```bash
# チェックリストを確認
echo "☑︎ 変更ファイル数が25以下"
echo "☑︎ 各ファイルの変更行数が400行以下"
echo "☑︎ Issueがリンクされている"
echo "☑︎ すべてのテストがパス"
echo "☑︎ Lintエラーが0件"
echo "☑︎ コミットメッセージがConventional Commitsに沿っている"
```

6. **PRの作成**
```bash
# GitHub CLIを使用してPRを作成
gh pr create --title "feat: <機能の説明>" \
--body "Closes #<issue-number>\n\n## 概要\n<変更内容の説明>\n\n## 変更内容\n- [ ] <変更点1>\n- [ ] <変更点2>\n\n## テスト\n- [ ] Unitテスト追加/更新\n- [ ] E2Eテスト確認\n- [ ] カバレッジ70%以上" \
--assignee @me
```

## 成功基準

- ✅ 変更ファイル数が25以下
- ✅ 各ファイルの変更行数が400行以下
- ✅ Issueがリンクされている
- ✅ すべてのテストがグリーン
- ✅ 品質ゲートをパス
- ✅ PRが正常に作成される

## トラブルシューティング

### 変更が大きすぎる場合
1. 機能を分割し、複数のPRに分ける
2. リファクタリングと機能追加を別PRにする
3. 大きなファイルを小さなモジュールに分割

### Issueがリンクされない場合
1. `gh issue create` でIssueを作成
2. PRタイトルまたは本文に `Closes #<issue-number>` を追加

### テストが失敗する場合
1. `npm run test:all` で詳細を確認
2. 失敗しているテストを修正
3. テストが不足している場合は追加
Loading