Skip to content

権限設定のベストプラクティス

Claude Codeはデフォルトで、起動したディレクトリ以下のファイルを読み書きできます。

デフォルトでできること:

  • カレントディレクトリ以下のファイルの読み書き
  • シェルコマンドの実行(許可した場合)
  • ネットワークアクセス(MCPサーバー経由)

デフォルトでできないこと:

  • 親ディレクトリへのアクセス
  • システムファイルの変更

MCP: Model Context Protocol の略。Claude Codeと外部ツール(GitHub・Supabaseなど)を接続するための標準プロトコル。

特定のディレクトリのみ許可する

Section titled “特定のディレクトリのみ許可する”

プロジェクトのサブディレクトリでのみ作業させたい場合、そのディレクトリで起動する:

Terminal window
cd src/features/user-auth
claude

こうするとClaude Codeは src/features/user-auth/ 以下のみを操作する。

settings.jsonautoApprove は、デフォルトで false にしておく:

{
"autoApprove": false
}

true にすると全ての操作が確認なしで実行される。本番環境に近い環境では特に注意。


MCPサーバーには必要最小限の権限だけを与える。

{
"mcpServers": {
"supabase-readonly": {
"command": "npx",
"args": [
"@supabase/mcp-server-supabase",
"--url", "https://xxx.supabase.co",
"--key", "anon-key-not-service-role" // anonキーで読み取りのみ
]
}
}
}

本番DBへの書き込みが不要な場面では、anon キー(RLSで制限される)を使う。

必要なスコープだけを選ぶ:

  • コードを読むだけ → read:repo
  • PRにコメントするだけ → public_repo の最小限
  • リポジトリ全体の管理は不要なら repo スコープは避ける

リポジトリ: Gitでコードと変更履歴を管理するフォルダ。GitHubなどのサービスで共有できる。

本番DBに接続するMCPサーバーを設定するときの原則:

  1. 別の設定ファイルを使う: settings.production.json に分けて、普段は使わない
  2. 読み取り専用ユーザーを作る: 本番DBに書き込みできないユーザーのキーを使う
  3. 使用後は無効化する: MCPサーバーの設定を削除してから不要になったら

Terminal window
# .gitignore に追加(シークレットを含む可能性がある)
.claude/settings.local.json
*.env

チームで共有する settings.json には、シークレットを直接書かない。環境変数で渡す。

環境変数: APIキーやデータベース接続情報など、コードに直接書きたくない値をOSやサーバーに設定する仕組み。