Claude Codeの「いちいち聞いてくる問題」を安全に解決する方法

Claude Codeの「いちいち聞いてくる問題」を安全に解決する方法 プログラミング
スポンサーリンク

Claude Codeを使っていて、毎回「このコマンドを実行してもよろしいですか?」的なことを聞かれて毎回イライラしていませんか?
作業が頻繁に中断されて、せっかくの便利なAIツールが使いづらくなってしまいますよね。

確かに公式には--dangerously-skip-permissionsというオプションがありますが、
これは、通常のClaude Codeの起動コマンドに追加することで権限確認をスキップできる機能です。

# 通常の起動
claude

# 権限確認をスキップする起動
claude --dangerously-skip-permissions

しかし、このコマンドの最大の弱点は、その名前の通り「危険」が伴うことにあります。

この記事では、–dangerously-skip-permissionsオプションの権限問題を安全に解決する方法をご紹介します。

参考資料
--dangerously-skip-permissionsの詳細については、Anthropicの公式ベストプラクティスガイドセキュリティドキュメントをご確認ください。

そもそも、なぜClaude Codeは毎回確認してくるのか?

Claude Codeが権限確認を求める理由は、ユーザーのシステムを保護するためです。
AIが自動でコマンドを実行することで、以下のような重大な問題が起こる可能性があります:

  • 重要なファイルの削除
  • システム設定の変更
  • 不正なソフトウェアのインストール
  • セキュリティホールの作成

そのため、安全性を重視して毎回確認を求める仕様になっています。

--dangerously-skip-permissionsの危険性

公式オプションの--dangerously-skip-permissionsを使えば確認をスキップできますが、文字通りデンジャラス(危険)です。

そうこれは「デンジャラスモード」なのです。

最悪の場合、何が起こるのか?

このオプションを使うと、Claude Codeはすべてのコマンドを無制限に実行できるようになります。

  1. システムファイルの削除rm -rf /でシステム全体が消去される
  2. 管理者権限の取得sudoコマンドで不正な権限昇格
  3. マルウェアのダウンロード: 危険なスクリプトの自動実行
  4. 個人情報の流出: 機密ファイルの外部送信
  5. システムの完全破壊: 復旧不可能な状態に陥る

一度実行されれば取り返しがつかないため、このオプションをそのまま使うのは非常に危険です。

安全な解決策:設定ファイルによる制御

ではどうすればよいのでしょうか?
答えはズバリ「危険なコマンドのみを制限する設定ファイル」を作成することです。
WindowsとMac/Linux別に具体的に説明します。

1. 設定ファイルの作成

まず、Claude Codeの設定ディレクトリに設定ファイルを作成します:

Windows (PowerShell):

# ディレクトリ作成
New-Item -ItemType Directory -Path "$env:USERPROFILE\.claude" -Force

# 設定ファイル作成
New-Item -ItemType File -Path "$env:USERPROFILE\.claude\claude_config.json"

Mac/Linux:

# ディレクトリ作成
mkdir -p ~/.claude

# 設定ファイル作成
touch ~/.claude/claude_config.json

2. 安全な設定内容

設定ファイルに以下の内容を記述します:

既存の設定がある場合の注意
claude_config.jsonが既に存在する場合は、ファイルを完全に置き換えるのではなく、既存の設定に必要な項目のみを追記してください。
特にpermissionsセクションのdeny配列に、危険なコマンドを追加する形で設定することをお勧めします。

{
  "maxFileLineThreshold": 10000,
  "alwaysApproveList": [],
  "alwaysRejectList": [],
  "permissions": {
    "deny": [
      "Bash(rm -rf /*)",
      "Bash(rm -rf ~/*)",
      "Bash(rm -rf $HOME/*)",
      "Bash(sudo *)",
      "Bash(su *)",
      "Bash(git config *)",
      "Bash(brew install *)",
      "Bash(chmod 777 *)",
      "Bash(chmod -R 777 /*)",
      "Bash(dd *)",
      "Bash(mkfs *)",
      "Bash(shutdown *)",
      "Bash(reboot *)",
      "Bash(curl * | bash)",
      "Bash(wget * | bash)",
      "Bash(curl * | sh)",
      "Bash(wget * | sh)",
      "Bash(:(){ :|:& };:)",
      "Bash(gh repo delete *)"
    ]
  },
  "hooks": {
    "stop": {
      "command": "curl -X POST http://localhost:3333/notify -H 'Content-Type: application/json' -d '{\"title\":\"Claude Code\",\"message\":\"タスクが完了しました!\",\"sound\":true}'",
      "runInTerminal": false
    }
  }
}

3. 安全に権限スキップを使用

この設定により、以下のような本当に危険なコマンドのみが制限され、それ以外は自由に実行できるようになります:

重要な注意事項
この設定ファイルは--dangerously-skip-permissionsオプションと組み合わせて使用するものです。
通常のclaudeコマンドでは、この設定に関係なく毎回確認が表示されます。
設定を有効にするには、必ずclaude --dangerously-skip-permissionsで実行してください。

制限される危険なコマンド:

  • システム削除コマンド (rm -rf /)
  • 権限昇格コマンド (sudo, su)
  • ディスク破壊コマンド (dd, mkfs)
  • システム停止コマンド (shutdown, reboot)
  • 危険なスクリプト実行 (curl|bash, wget|sh)
  • Git設定変更やパッケージインストール

これで--dangerously-skip-permissionsを使っても、重要なシステムは保護されます。

オプション名が長すぎる問題の解決

--dangerously-skip-permissionsは27文字もあり、毎回入力するのは非常に大変です。
なぜこんなに長いのでしょうか?理由はちゃんとあります。

疑問:なぜオプション名が長いのか?

Anthropicがわざと長い名前にしているのは、心理的な安全装置としての役割があるからです:

  1. うっかり使用の防止 – 長い名前で危険性を意識させる
  2. 慎重な判断の促進 – 入力中に危険性を再認識させる
  3. 安全文化の醸成 – 危険なオプションは面倒にすべきという思想

他の開発ツールでも同様の命名が採用されています:

  • --force-with-lease
  • --allow-run-as-root
  • --disable-web-security

解決法:エイリアスによる短縮

長いオプション名は、エイリアス(ショートカット)で解決できます:

Mac/Linux (.bashrc または .zshrc):

設定ファイルを編集します:

# zshの場合(macOSのデフォルト)
vi ~/.zshrc

# bashの場合(Linux等)
vi ~/.bashrc

ファイルの末尾に以下を追加:

# エイリアス設定(名前は任意に変更可能)
alias claude-skip='claude --dangerously-skip-permissions'

# 設定の反映
source ~/.zshrc  # zshの場合
source ~/.bashrc # bashの場合

Windows (PowerShell Profile):

# プロファイル確認
$PROFILE

# プロファイルファイルを開いて以下を追加:
function claude-skip { claude --dangerously-skip-permissions $args }

# 設定反映
. $PROFILE

これでclaude-skipという短いコマンドで実行できるようになります。
ちなみにclaude-skipという名前は、別の名前に変えてもOKです。

おまけ:処理完了時に通知音を鳴らす設定

Claude Codeで長時間の処理を実行していると、いつ作業が完了したかが分からず、定期的に画面を確認する必要があります。
他の作業をしている間にタスクが終わっていることも多く、時間の無駄になってしまいます。

また、複雑な開発タスクでは処理に数分から数十分かかることもあり、完了通知がないと効率的な並行作業ができません。
以下の設定により、これらの不便さを解消できます。

作業完了時に通知を受け取りたい場合は、設定ファイルのhooksセクションを活用します:

Mac:

{
  "hooks": {
    "stop": {
      "command": "osascript -e 'display notification \"Claude Codeのタスクが完了しました\" with title \"完了通知\" sound name \"Glass\"'",
      "runInTerminal": false
    }
  }
}

Windows:

{
  "hooks": {
    "stop": {
      "command": "powershell -Command \"Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('Claude Codeのタスクが完了しました', '完了通知')\"",
      "runInTerminal": false
    }
  }
}

まとめ

Claude Codeの権限問題は、適切な設定により安全かつ効率的に解決できます:

  1. 設定ファイルで危険なコマンドのみを制限(重要!)
  2. エイリアスで長いオプション名を短縮
  3. 通知機能で作業効率を向上

--dangerously-skip-permissionsそのまま使うのは危険ですが、適切な制限をかけることで安全に活用できます。
この設定により、Claude Codeの真の力を引き出しながら、システムの安全性も確保できるでしょう。

毎回の確認で作業が中断されるストレスから解放され、より快適な開発環境を手に入れてください。

では!

コメント

タイトルとURLをコピーしました