ssot-check
SKILL.md
/ssot-check — SSOT 整合性チェック
SSOT(Single Source of Truth)と各消費者の値が一致するか検証する静的チェック。
Available Subcommands
| サブコマンド | SSOT ソース | 消費者 | 状態 |
|---|---|---|---|
pricing |
src/lib/stripe/config.ts |
messages/ja.json, messages/en.json |
実装済み |
rate-limit |
src/lib/security/rate-limiter/presets.ts(認証・機能・翻訳系)+ src/constants/limits.ts(Admin API・Preview API) |
src/**/*.ts, .claude/**/*.md, CLAUDE.md |
実装済み |
env |
.env.example |
src/**/*.ts の process.env.* |
Phase 2 |
routes |
src/app/api/**/route.ts |
vercel.json functions |
Phase 2 |
Usage
# npm script 経由
npm run audit:ssot
# 直接実行
node scripts/audit/ssot-pricing.mjs
node scripts/audit/ssot-pricing.mjs --fix # 修正ヒント付き
# Claude Code スキル
/ssot-check pricing
/ssot-check pricing --fix
What It Checks (pricing)
- 価格一致:
PLAN_CONFIGS.price(number) → messages のplans.*.price(formatted string) - 表示名一致:
PLAN_CONFIGS.displayName→messages/ja.jsonのplans.*.name - プラン存在: SSOT に定義されたプランが全 messages に存在するか
- 余剰プラン: messages に SSOT にないプランが定義されていないか
SSOT の定義
src/lib/stripe/config.ts → PLAN_CONFIGS (Record<PlanName, PlanConfig>)
├── free: { price: 0, displayName: "フリープラン" }
├── standard: { price: 980, displayName: "スタンダードプラン" }
└── pro: { price: 2980, displayName: "プロプラン" }
消費者がこの値と矛盾する場合、消費者側を修正する。SSOT 自体を変更する場合は config.ts を先に変更し、チェックを再実行。
What It Checks (rate-limit)
- コード内ハードコード:
src/**/*.tsでレート制限の数値がpresets.tsを経由せず直接定義されていないか - ドキュメント転記:
.claude/**/*.md,CLAUDE.mdにレート制限の具体的数値が転記されていないか - SSOT参照: 消費者が
RATE_LIMIT_PRESETS/ADMIN_RATE_LIMITSを import して使用しているか
手動チェック手順
# 1. SSOT の現在値を確認
grep -n "max:" src/lib/security/rate-limiter/presets.ts
grep -n "maxRequests:" src/constants/limits.ts
# 2. コード内で SSOT を経由せずハードコードされた数値を検索
# (presets.ts / limits.ts 以外で windowMs / max を直接定義している箇所)
rg -n "windowMs:\s*[0-9]|max:\s*[0-9]" src/ --type ts -g '!presets.ts' -g '!limits.ts'
rg -n "maxRequests:\s*[0-9]" src/ --type ts -g '!limits.ts' -g '!presets.ts'
# 3. ドキュメント内の転記を検索(レート制限に関する具体的数値)
rg -n "requests?\s+(per|/)\s*\d+\s*(min|hour|second)" .claude/ CLAUDE.md
原則: レート制限の具体的数値はドキュメント・チェックスクリプトに転記しない。
presets.ts/limits.tsを SSOT として直接参照する指示のみ記載。チェックは構造的パターン(フィールド名の存在)で検出する。
CI Integration
# GitHub Actions example
- name: SSOT Check
run: npm run audit:ssot
AI Assistant Instructions
このスキルが有効化された時:
npm run audit:ssotを実行して現状を把握- エラーがあれば SSOT (config.ts) の値を確認
- 消費者ファイル(messages/*.json)を SSOT に合わせて修正
- 再度
npm run audit:ssotで修正を検証
Never:
- SSOT 側(config.ts)を messages に合わせて変更しない(逆方向)
- 手動で価格フォーマットを推測しない(スクリプトの変換ロジックに従う)
Weekly Installs
1
Repository
yusuketsunoda/ppt-transFirst Seen
Mar 1, 2026
Security Audits
Installed on
amp1
cline1
opencode1
cursor1
continue1
kimi-cli1