← AI開発 資料アーカイブ
ハーネス・設定ファイル

CONSTRAINTS.md 制約・禁止事項ファイル v3.0

元ファイル: システム要件定義の分析と汎用化方法/CONSTRAINTS.md

要約

Claude Codeに守らせる制約・禁止事項を体系化したCONSTRAINTS.md(v3.0)。コード品質(ファイル500行/関数50行/ネスト3階層)、命名規則、セキュリティ(APIキー直書き禁止・SQLインジェクション/XSS対策)、データ管理(本番DBへのDROP/TRUNCATE禁止・dry-run必須)、コミット規約、ブランチ戦略、AIへの制約(SRS外機能の追加禁止・テスト削除禁止・50往復でセッション切替)、禁止ライブラリと代替手段を規定する。

要点

CONSTRAINTS禁止事項コード品質セキュリティコミット規約AI制約ハーネス

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)

↑ トップへ戻る