メインコンテンツへスキップ
Kanau Tech™ - かなうテック
← ブログ一覧に戻る
AI開発ツール

Claude Code Workspace・Hooks・Permissions 設定 — /goal完全無人実行の環境整備

2026-05-22by DO XUAN HIEN
Claude Code Workspace・Hooks・Permissions 設定 — /goal完全無人実行の環境整備

/goal を Auto Mode と組み合わせて完全無人実行するには、Permissions(許可ルール)・Permission Mode(実行モード)・Additional Directories(アクセス範囲)の3要素を正しく設定する必要がある。

この記事では公式 settings.json 仕様に準拠した4ステップのセットアップを示す。

⚠️ : 本記事は Claude Code v2.1.147 時点の公式ドキュメント(https://code.claude.com/docs/en/permissions)に基づく。settings.jsonキー名はバージョンで変わる可能性があるため、最新公式仕様を必ず確認してほしい。

3要素の役割

要素役割公式キー
PermissionsTool単位の許可/拒否ルールpermissions.allow / ask / deny
Permission Modeセッション全体の挙動defaultMode または --permission-mode <mode>
Additional Directoriesアクセス可能ディレクトリの拡張additionalDirectories または --add-dir <path>

Auto Mode(--permission-mode auto)は背景チェック付きでツール呼び出しを自動承認するモード(公式ドキュメント: "Currently a research preview")。設定済みallow/denyルールはAuto Modeでも常に効く。

Permission Modes — 6種類

公式仕様の全モード(defaultMode または起動フラグ --permission-mode):

Mode説明
defaultデフォルト。初回使用時に承認プロンプト
acceptEditsファイル編集と一般的なfsコマンド(mkdir/touch/mv等)を working directory + additionalDirectories配下で自動承認
planPlan Mode。ファイル読み取り+read-onlyコマンドのみ、編集不可
auto背景チェック付き自動承認(research preview)
dontAsk事前承認以外は自動拒否
bypassPermissions全プロンプトスキップ(rm -rf /rm -rf ~ のみsafety circuit-breaker残る)

サンドボックス環境以外で bypassPermissions は非推奨。 通常運用は auto を選ぶ。

ステップ1: アクセス範囲を additionalDirectories で限定

~/.claude/settings.json

{
  "additionalDirectories": [
    "/Users/me/Projects/kanautech-hp"
  ]
}

または起動時に claude --add-dir /Users/me/Projects/kanautech-hp で同等。働ディレクトリ + これら追加ディレクトリの外には、編集権限が及ばない。

ステップ2: permissions.deny で危険操作をブロック

{
  "permissions": {
    "deny": [
      "Bash(rm -rf *)",
      "Bash(sudo *)",
      "Bash(git push --force *)",
      "Edit(.env)",
      "Edit(.env.*)",
      "Edit(secrets/**)"
    ]
  }
}

評価順は deny → ask → allow。deny が付いたツール呼び出しは他のallowでもブロックされる。 プロジェクト共通の安全装置はこの方式で実装する。

📘 全パターン構文は公式ドキュメントを参照。

ステップ3: permissions.allow で承認不要な操作を pre-approve

頻繁に使う安全コマンドを事前承認すれば、Auto Mode起動後に毎回の承認待ちが消える。

{
  "permissions": {
    "allow": [
      "Bash(npm test *)",
      "Bash(npm run *)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Edit(src/**)",
      "Edit(content/**)"
    ]
  }
}

glob ワイルドカードBash(ls *)ls -la にマッチ(空白あり)、Bash(ls*)lsof も含む(空白なし)。

ステップ4: Auto Mode で /goal を起動

3要素の設定が完了したら、Auto Mode で起動する。

# 完全無人モード
claude --permission-mode auto

# プロンプト内(ターン上限を必ず併記)
/goal test/auth 全件通過, or stop after 15 turns

起こること

  1. additionalDirectories 配下のみが編集対象
  2. permissions.deny 一致操作はブロック
  3. permissions.allow パターンは承認プロンプト無しで実行
  4. それ以外は Auto Mode の背景チェックで判定
  5. /goal のターン上限で暴走停止

完全な settings.json サンプル(公式仕様準拠)

実務で使う完成形:

{
  "additionalDirectories": [
    "/Users/me/Projects/kanautech-hp"
  ],
  "permissions": {
    "allow": [
      "Bash(npm test *)",
      "Bash(npm run *)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Edit(src/**)",
      "Edit(content/**)",
      "Edit(scripts/**)"
    ],
    "deny": [
      "Bash(rm -rf /)",
      "Bash(rm -rf ~)",
      "Bash(sudo *)",
      "Bash(git push --force *)",
      "Edit(.env)",
      "Edit(.env.*)",
      "Edit(secrets/**)"
    ]
  },
  "defaultMode": "default"
}

defaultMode はセッション開始時のモード。--permission-mode auto で個別オーバーライド可能。

セキュリティ運用の3原則

公式仕様で実現可能な安全運用パターン。

原則1: ターン上限は /goal 文に必ず書く

/goal リファクタ完了, or stop after 15 turns

/goal の公式仕様にコスト/ターン上限を settings.json で定義する機構はない/goal 文内の or stop after N turns または or stop after N minutes で明示するのが唯一の公式方法。

原則2: permissions.deny で実行禁止コマンドを明示

破壊操作は permissions.deny で先回りブロック:

{
  "permissions": {
    "deny": [
      "Bash(rm -rf *)",
      "Bash(DROP TABLE *)",
      "Bash(TRUNCATE *)",
      "Bash(wrangler pages delete *)",
      "Bash(git push --force *)",
      "Edit(.env*)",
      "Edit(production/**)"
    ]
  }
}

原則3: 本番接続は別 settings で隔離

本番DB / 本番API用の認証情報を含む.envpermissions.deny で読み取り禁止。本番運用は bypassPermissions 非対応の隔離環境で実行。

プロジェクト共有用の .claude/settings.json

チーム共有用のプロジェクト設定。git管理対象にして全員に同じ設定を配布する。

// <project-root>/.claude/settings.json
{
  "permissions": {
    "deny": [
      "Edit(migrations/**)",
      "Bash(wrangler pages delete *)",
      "Bash(DROP TABLE *)"
    ]
  }
}

マネージド設定 → コマンドライン → プロジェクトlocal → プロジェクト共有 → ユーザー設定 の precedence で、上位 deny は下位で覆せない。

よくある質問

Auto Mode で安全に無人実行する方法は?

claude --permission-mode auto で起動し、settings.jsonpermissions.deny / ask で危険操作を明示的にブロックする。bypassPermissions モードは多くの承認をスキップするが、rm -rf /rm -rf ~ は依然プロンプトが出るサーキットブレーカーが組み込まれている。本番DB操作・認証情報書き換えは別ワークフローに分離してほしい。

permissions.allow / deny / ask の優先順位は?

deny → ask → allow の順で評価され、deny が最強優先。マネージド設定 → コマンドライン → プロジェクト local → プロジェクト共有 → ユーザー設定の順で、どの階層でも deny が付けばその時点で他の allow は効かない。

ファイル書き込みを特定ディレクトリだけに制限するには?

permissionsEdit(/path/**) 形式で許可ルール、または additionalDirectories 設定で Claude がアクセス可能なディレクトリを明示する。acceptEdits モードでも、working directory または additionalDirectories 配下のみが対象。

settings.json はどこに置きますか?

  • ユーザー設定: ~/.claude/settings.json
  • プロジェクト共有: <project-root>/.claude/settings.json
  • プロジェクト local: <project-root>/.claude/settings.local.json

後者2つはgit管理可能(機密情報を含めないこと)。マネージド設定は管理者がOS/MDM経由で配布。

/goal のターン上限はどこに書きますか?

/goal 文内に or stop after N turns を併記するのが公式仕様(条件は4000字以内)。settings.jsonに上限を書く方法は公式にはない。安全装置は permissions.deny で危険コマンドをブロック + /goal 文にターン上限を必ず書く、の二段構えが現実的。

関連記事

参照

御社のDX力、3分でチェックしませんか?

10問の簡単な質問でIT基盤・業務デジタル化・AI活用度を無料診断。改善のヒントもわかります。

無料DX診断を受ける →