CONSTRAINTS.md — 制約・禁止事項ファイル
バージョン:v3.0 | このファイルはプロジェクトルートに置く
1. コード品質の制約
1-1:ファイル・関数サイズ制限
ファイル:1ファイル最大500行(超えたら分割する)
関数:1関数最大50行(超えたら分割する)
クラス:1クラス最大200行(超えたら分割する)
ネスト:最大3階層まで(深すぎたら関数に切り出す)
1-2:命名規則
変数・関数:camelCase(例:getUserData)
定数:UPPER_SNAKE_CASE(例:MAX_RETRY_COUNT)
クラス:PascalCase(例:UserRepository)
ファイル:kebab-case(例:user-repository.ts)
テストファイル:[対象ファイル名].test.ts
1-3:コメントルール
✅ 「なぜ」を説明するコメントは書く
✅ 複雑なアルゴリズムには説明コメントを書く
✅ 全公開関数にJSDocを書く
❌ 「何をしているか」をコードで分かる場合はコメントしない
❌ コメントアウトしたコードを残さない(削除する)
2. セキュリティの制約
2-1:絶対に守るルール
❌ APIキー・パスワード・トークンをコードに直書きしない
❌ .envファイルをgitにコミットしない
❌ ユーザー入力を検証なしにDBに保存しない
❌ SQLを文字列結合で組み立てない(SQLインジェクション)
❌ innerHTML に未検証のユーザー入力を代入しない(XSS)
❌ 本番DBに直接接続してテストしない
2-2:必ず実装するセキュリティ対策
✅ 全APIエンドポイントに認証チェックを実装する
✅ パスワードはbcrypt(コスト12以上)でハッシュ化する
✅ JWTの有効期限を設定する(最大24時間)
✅ レートリミットを実装する(APIエンドポイントごと)
✅ エラーメッセージに内部情報を含めない
✅ CORS設定を適切に行う(全オリジン許可しない)
3. データ管理の制約
3-1:データベース操作
❌ 本番DBに対してDROP TABLE / TRUNCATE を実行しない
❌ バックアップなしにデータ移行を実行しない
❌ トランザクションなしに複数テーブルを更新しない
✅ マイグレーションは必ずバージョン管理する
✅ 本番データの変更前に必ずバックアップを取る
✅ dry-runオプションを実装してから本番実行する
3-2:ログ管理
❌ ログにパスワード・APIキー・個人情報を出力しない
✅ エラーログには必ずスタックトレースを含める
✅ ログレベルを適切に使い分ける(DEBUG/INFO/WARN/ERROR)
✅ 本番環境ではDEBUGログを無効にする
4. 開発プロセスの制約
4-1:コミットルール
コミットメッセージ形式:
[種別] 要件ID: 変更内容の要約
種別:
feat: 新機能追加
fix: バグ修正
test: テスト追加・修正
docs: ドキュメント更新
refactor: リファクタリング
chore: その他の変更
例:
feat: FR-AUTH-001: ユーザー登録機能を実装
fix: FR-ART-002: スケジュール投稿が1分ずれる問題を修正
test: FR-AUTH-001: ユーザー登録のE2Eテストを追加
4-2:ブランチ戦略
main: 本番環境(直接コミット禁止)
develop: 開発環境(フィーチャーブランチをマージ)
feature/[要件ID]-[機能名]: 機能開発ブランチ
fix/[バグID]-[バグ概要]: バグ修正ブランチ
4-3:レビュー基準
以下の全項目を確認してからマージする:
□ テストが全て通過している
□ SRSの受け入れ基準を満たしている
□ セキュリティチェックリストを確認した
□ コードコメントが適切に書かれている
□ progress.mdが更新されている
5. AI(Claude Code)への制約
5-1:Claude Codeが守るべきルール
✅ 実装前に必ずSRSの要件IDを確認する
✅ 不明な点は実装前に質問する
✅ テストを先に書いてから実装する(TDD)
✅ 実装完了時に受け入れ基準で動作確認する
✅ セッション終了前にprogress.mdを更新する
❌ SRSにない機能を「良かれと思って」追加しない
❌ テストを削除・スキップして「完了」と報告しない
❌ エラーを無視して処理を続けない
❌ 「後で直す」でコミットしない
5-2:コンテキスト管理の制約
会話50往復でセッション切り替えを提案する
セッション切り替え前に必ずprogress.mdを更新する
新セッション開始時は必ずCLAUDE.mdとprogress.mdを読む
同じエラーを3回繰り返したら別のアプローチを試みる
6. 禁止ライブラリ・パターン
6-1:使用禁止
❌ eval() / Function() コンストラクタ(セキュリティリスク)
❌ document.write()(XSSリスク)
❌ any型の多用(TypeScriptの型安全性を損なう)
❌ console.log を本番コードに残す
❌ 非推奨(deprecated)のAPIを新規使用する
6-2:代替手段
eval() → JSON.parse() / 関数オブジェクト
document.write() → DOM操作(createElement等)
any型 → unknown型 + 型ガード
console.log → ロギングライブラリ(winston/pino)