From 2857b95a04750e1d3d827cb8bcc2c6e11b852113 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 1 Aug 2025 09:50:11 +0000 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E5=93=81=E8=B3=AA=E3=83=81?= =?UTF-8?q?=E3=82=A7=E3=83=83=E3=82=AF=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89?= =?UTF-8?q?=E3=81=AE=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - check-coverageコマンドの追加 - fix-ciコマンドの追加 - pr-createコマンドの追加 - quality-checkコマンドの追加 - test-allコマンドの追加 - update-depsコマンドの追加 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .claude/commands/check-coverage.md | 90 +++++++++++++++++++++ .claude/commands/fix-ci.md | 122 +++++++++++++++++++++++++++++ .claude/commands/init-project.md | 5 ++ .claude/commands/pr-create.md | 83 ++++++++++++++++++++ .claude/commands/quality-check.md | 77 ++++++++++++++++++ .claude/commands/test-all.md | 51 ++++++++++++ .claude/commands/update-deps.md | 112 ++++++++++++++++++++++++++ 7 files changed, 540 insertions(+) create mode 100644 .claude/commands/check-coverage.md create mode 100644 .claude/commands/fix-ci.md create mode 100644 .claude/commands/pr-create.md create mode 100644 .claude/commands/quality-check.md create mode 100644 .claude/commands/test-all.md create mode 100644 .claude/commands/update-deps.md diff --git a/.claude/commands/check-coverage.md b/.claude/commands/check-coverage.md new file mode 100644 index 00000000..b0f97181 --- /dev/null +++ b/.claude/commands/check-coverage.md @@ -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%) \ No newline at end of file diff --git a/.claude/commands/fix-ci.md b/.claude/commands/fix-ci.md new file mode 100644 index 00000000..db4455e6 --- /dev/null +++ b/.claude/commands/fix-ci.md @@ -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 + + # 失敗したジョブの詳細を確認 + gh run view --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 + ``` + +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エラーを修正 (#)" + + # プッシュ + git push + ``` + +6. **CIの再実行を確認** + ```bash + # CIがグリーンになるまでモニタリング + gh run watch + ``` + +7. **対応完了の報告** + ```bash + # Slack #ci-alertsへの報告テンプレート + echo "CI修正完了報告:" + echo "- エラー: <エラー内容>" + echo "- 原因: <原因>" + echo "- 対応: <対応内容>" + echo "- 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パイプラインのリトライ設定を追加 \ No newline at end of file diff --git a/.claude/commands/init-project.md b/.claude/commands/init-project.md index 62b64e0b..a64fba4c 100644 --- a/.claude/commands/init-project.md +++ b/.claude/commands/init-project.md @@ -8,6 +8,9 @@ このプロジェクトは`.devcontainer/devcontainer.json`に定義されたDevContainerで開発することを前提としています。 +すでに初期化されており、このコマンドが実行されている場合には、以下の内容を踏まえプロジェクト特有のfeaturesを追加/その他の設定の追加をしてください。 +プロジェクトの実際の要件を確認して、必要なfeaturesのみを含むように設定してください。 + #### 推奨されるFeatures - **Node.js & pnpm**: プロジェクトのパッケージ管理 @@ -55,3 +58,5 @@ npm ci && npm run prepare - `~/.claude`: Claude設定 - `~/.cursor`: Cursor設定 - `~/.claude.json`: Claude設定ファイル +- `~/.gitconfig`: Git設定 +- `~/.gitignore`: Git ignore設定 diff --git a/.claude/commands/pr-create.md b/.claude/commands/pr-create.md new file mode 100644 index 00000000..68e09d87 --- /dev/null +++ b/.claude/commands/pr-create.md @@ -0,0 +1,83 @@ +# pr-create + +## 目的 + +Pull Request作成時の手順とチェックリストを提供し、Git Workflowの基準(Diff ≤ 400行、ファイル数 ≤ 25)を遵守する。 + +## 実行手順 + +1. **ブランチの確認** + ```bash + # ブランチ名が規約に沿っているか確認 + git branch --show-current + # 形式: feat|fix|chore/-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 #\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 #` を追加 + +### テストが失敗する場合 +1. `npm run test:all` で詳細を確認 +2. 失敗しているテストを修正 +3. テストが不足している場合は追加 \ No newline at end of file diff --git a/.claude/commands/quality-check.md b/.claude/commands/quality-check.md new file mode 100644 index 00000000..03960f72 --- /dev/null +++ b/.claude/commands/quality-check.md @@ -0,0 +1,77 @@ +# quality-check + +## 目的 + +Lint、Prettier、SCA(Static Code Analysis)等の品質ゲートをチェックし、コード品質を保証する。CIブロッカーレベルのエラーを事前に検出。 + +## 実行手順 + +1. **Lintチェック** + ```bash + # JavaScript/TypeScript + npm run lint + + # Pythonの場合 + # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + ``` + +2. **コードフォーマットチェック** + ```bash + # Prettierチェック + npm run format:check + + # 自動修正を実行する場合 + npm run format:fix + ``` + +3. **型チェック(TypeScriptプロジェクトの場合)** + ```bash + npm run type-check + ``` + +4. **依存関係の脆弱性チェック** + ```bash + npm audit + ``` + +5. **ライセンスチェック** + ```bash + npm run license-check + ``` + +6. **SAST(静的アプリケーションセキュリティテスト)** + ```bash + # Semgrepを使用する場合 + semgrep --config=auto + ``` + +7. **統合品質レポート** + ```bash + npm run quality:report + ``` + +## 成功基準 + +- ✅ Lintエラーが0件 +- ✅ フォーマットの差分がない +- ✅ 型エラーが0件 +- ✅ Criticalレベルの脆弱性が0件 +- ✅ 禁止ライセンスの混入がない +- ✅ SASTでCriticalレベルの問題が0件 + +## トラブルシューティング + +### Lintエラーが出る場合 +1. `npm run lint -- --fix` で自動修正を試す +2. 自動修正できないエラーは手動で修正 +3. ルールの無効化が必要な場合は、理由をコメントで記載 + +### 脆弱性が検出された場合 +1. `npm audit fix` で自動修正を試す +2. 互換性の問題がある場合は `npm audit fix --force` +3. 修正できない場合は、代替パッケージを検討 + +### ライセンス問題が発生した場合 +1. 問題のあるパッケージを特定 +2. 代替パッケージを検索 +3. 必要に応じてホワイトリストに追加(承認が必要) \ No newline at end of file diff --git a/.claude/commands/test-all.md b/.claude/commands/test-all.md new file mode 100644 index 00000000..0f133e76 --- /dev/null +++ b/.claude/commands/test-all.md @@ -0,0 +1,51 @@ +# test-all + +## 目的 + +すべてのテストを実行し、カバレッジを確認する。TDD原則に基づき、Unit/Component/E2Eテストを網羅的に実行。 + +## 実行手順 + +1. **依存関係の確認** + ```bash + npm ci + ``` + +2. **Unitテストの実行** + ```bash + npm run test:unit -- --coverage + ``` + +3. **Componentテストの実行** + ```bash + npm run test:component -- --coverage + ``` + +4. **E2Eテストの実行** + ```bash + npm run test:e2e + ``` + +5. **統合カバレッジレポートの生成** + ```bash + npm run coverage:report + ``` + +## 成功基準 + +- ✅ すべてのテストがグリーン(Pass) +- ✅ 全体の行カバレッジが70%以上 +- ✅ クリティカルパスのカバレッジが100% +- ✅ カバレッジレポートが正常に生成される + +## トラブルシューティング + +### テストが失敗する場合 +1. エラーメッセージを確認し、失敗箇所を特定 +2. `npm run test:unit -- --watch` で該当テストのみ実行 +3. デバッグモードで詳細を確認: `npm run test:debug` + +### カバレッジが基準を満たさない場合 +1. カバレッジレポートで未カバー箇所を確認 +2. 優先度の高い箇所から順にテストを追加 +3. `npm run coverage:html` でHTMLレポートを生成し、詳細を確認 \ No newline at end of file diff --git a/.claude/commands/update-deps.md b/.claude/commands/update-deps.md new file mode 100644 index 00000000..9c5a1f20 --- /dev/null +++ b/.claude/commands/update-deps.md @@ -0,0 +1,112 @@ +# update-deps + +## 目的 + +依存関係を最新に更新し、脆弱性をチェックする。Criticalレベルの脆弱性が0件であることを保証し、セキュリティリスクを最小化。 + +## 実行手順 + +1. **現在の依存関係の状態確認** + ```bash + # インストール済みパッケージの一覧 + npm list --depth=0 + + # 古いパッケージの確認 + npm outdated + ``` + +2. **脆弱性のチェック** + ```bash + # 脆弱性の詳細を確認 + npm audit + + # Criticalレベルのみ表示 + npm audit --audit-level=critical + ``` + +3. **バックアップの作成** + ```bash + # package-lock.jsonのバックアップ + cp package-lock.json package-lock.json.backup + ``` + +4. **脆弱性の自動修正** + ```bash + # セキュリティ修正を実行 + npm audit fix + + # 修正結果を確認 + npm audit + ``` + +5. **メジャーアップデートの検討** + ```bash + # メジャーアップデートが必要な場合の確認 + npm audit fix --dry-run --force + + # テスト環境での確認が必要な場合 + # npm audit fix --force + ``` + +6. **通常の依存関係更新** + ```bash + # パッチバージョンの更新 + npm update + + # 特定のパッケージを最新に更新 + # npm install @latest + ``` + +7. **テストの実行** + ```bash + # 更新後の動作確認 + npm run test:all + npm run build + ``` + +8. **ライセンスチェック** + ```bash + # 禁止ライセンスの確認 + npm run license-check + ``` + +9. **変更のコミット** + ```bash + # 変更内容を確認 + git diff package.json package-lock.json + + # コミット + git add package.json package-lock.json + git commit -m "chore: 依存関係を更新し脆弱性を修正" + ``` + +## 成功基準 + +- ✅ Criticalレベルの脆弱性が0件 +- ✅ Highレベルの脆弱性が最小化されている +- ✅ すべてのテストがパス +- ✅ ビルドが成功 +- ✅ 禁止ライセンスが含まれていない + +## トラブルシューティング + +### 自動修正できない脆弱性がある場合 +1. `npm ls <脆弱性のあるパッケージ>` で依存関係を確認 +2. 直接依存しているパッケージを更新 +3. 代替パッケージを検討 +4. `npm audit fix --force` を慎重に実行(テスト必須) + +### 更新後にテストが失敗する場合 +1. バックアップから復元: `cp package-lock.json.backup package-lock.json` +2. `npm ci` で再インストール +3. 問題のあるパッケージを特定し、個別に更新 + +### ライセンス問題が発生した場合 +1. 問題のあるパッケージを特定 +2. ライセンス互換の代替パッケージを検索 +3. 承認プロセスを経てホワイトリストに追加 + +### npm auditがハングする場合 +1. npmキャッシュをクリア: `npm cache clean --force` +2. ネットワーク接続を確認 +3. npmレジストリの状態を確認: https://status.npmjs.org/ \ No newline at end of file From 877e826cbe3662a7423c397e565357f0cac9b1c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 1 Aug 2025 09:58:05 +0000 Subject: [PATCH 2/5] feat: add GitHub CLI configuration documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .claude/commands/init-project.md | 1 + .claude/settings.local.json | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.claude/commands/init-project.md b/.claude/commands/init-project.md index a64fba4c..217fe9f0 100644 --- a/.claude/commands/init-project.md +++ b/.claude/commands/init-project.md @@ -60,3 +60,4 @@ npm ci && npm run prepare - `~/.claude.json`: Claude設定ファイル - `~/.gitconfig`: Git設定 - `~/.gitignore`: Git ignore設定 +- `~/.config/gh/hosts.yml`: GitHub CLIの設定 diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 4695659e..2468ef72 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -24,8 +24,9 @@ "mcp__filesystem__list_allowed_directories", "Bash(claude config get:*)", "Bash(bash:*)", - "Bash(./script/export.sh:*)" + "Bash(./script/export.sh:*)", + "Bash(git fetch:*)" ], "deny": [] } -} +} \ No newline at end of file From eae78ec6a8e787c09bc99e7444dc426961393cbf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 1 Aug 2025 09:58:54 +0000 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=82=B3?= =?UTF-8?q?=E3=83=9F=E3=83=83=E3=83=88=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=81=99=E3=82=8B=E3=81=9F?= =?UTF-8?q?=E3=82=81subject-case=E3=83=AB=E3=83=BC=E3=83=AB=E3=82=92?= =?UTF-8?q?=E7=84=A1=E5=8A=B9=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commitlintのsubject-caseルールが日本語の文字を大文字として認識し、 エラーになる問題を修正しました。 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- commitlint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitlint.config.js b/commitlint.config.js index 936c7cbd..23283bf0 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,7 +1,7 @@ module.exports = { extends: ['@commitlint/config-conventional'], rules: { - 'subject-case': [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']], + 'subject-case': [0], // 日本語対応のため無効化 'subject-empty': [2, 'never'], 'type-empty': [2, 'never'], 'scope-empty': [0] From 6d5a4e352e6e5056e0ec032cde21f13df781bcaa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 1 Aug 2025 10:01:13 +0000 Subject: [PATCH 4/5] =?UTF-8?q?docs:=20init-project=E3=82=B3=E3=83=9E?= =?UTF-8?q?=E3=83=B3=E3=83=89=E3=81=AB=E6=97=A5=E6=9C=AC=E8=AA=9E=E5=AF=BE?= =?UTF-8?q?=E5=BF=9Ccommitlint=E8=A8=AD=E5=AE=9A=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 日本語コミットメッセージでのsubject-caseエラーを回避する設定を明記 - Conventional Commitsの形式説明を追加 - 日本語での利用を前提とした推奨設定として記載 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .claude/commands/init-project.md | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/.claude/commands/init-project.md b/.claude/commands/init-project.md index 217fe9f0..f08b8c99 100644 --- a/.claude/commands/init-project.md +++ b/.claude/commands/init-project.md @@ -61,3 +61,41 @@ npm ci && npm run prepare - `~/.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 + +以下の形式でコミットメッセージを記述します: + +``` +(): + + + +