
2026/01/20 20:58
危険を冒しつつClaudeコードを安全に実行する
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
作者は、リスクのある
--dangerously-skip-permissions フラグを使用してClaude Codeを実行する場合、Vagrantベースの仮想マシン(VM)内で実行することが最も安全だと主張しています。この設定により、ホストシステムは保護されつつ、フラグが可能にする高速かつ自動化されたワークフローを維持できます。従来のアプローチ――ホスト上で実行したり、特権モードのDockerを使用したり、完全なクラウドVMをデプロイしたり――はいずれも隔離性を損ないかつ不要な複雑さとコストを増大させます。Vagrantは単一の設定ファイル、簡易的な共有フォルダー、即時破棄という利点により、セキュリティと便利さのバランスを取り、許容できるパフォーマンスを提供します。このVMを採用するユーザーはClaude Codeタスクを安全に自動化できます。もしより厳格な隔離が必要になれば、一方向のrsync同期や他の設定に切り替えることも可能です。ホストシステムを意図しないファイルシステム変更やパッケージインストールから保護することで、この手法は自動化されたAIコード生成に依存するチームを支援し、セキュアなAI開発環境のベストプラクティスガイドラインの形成にも寄与します。
(もしすべての重要ポイントを明示的に列挙した簡潔版が必要であれば、以下をご覧ください。)
簡潔・完全な要約(任意):
--dangerously-skip-permissions フラグはClaude Codeに対しプロンプトなしでアクションを実行させるため、自動化を可能にしますが安全リスクも伴います。ホスト上で実行すると危険です。Dockerの隔離は特権モードまたは Docker‑in‑Docker を必要とし、サンドボックス機能を破棄します。他の隔離方法も検討しましたが、単純さやコスト面で劣っていました。Vagrantは単一設定ファイルとローカル共有フォルダーにより再現可能なVM隔離を提供し、Docker‑in‑Docker の複雑性を回避します。最小限の Vagrantfile は bento/ubuntu‑24.04 ボックスを使用し、4 GB RAM、2 CPU を割り当て、オーディオとUSBを無効化し、Docker、Node.js、npm、Git、および Claude Code をプロビジョニングします。プロビジョンスクリプトは @anthropic-ai/claude-code をインストールし、Vagrantユーザーを Docker グループに追加し、/agent-workspace のフォルダー所有権を設定します。ワークフローは次の通りです:vagrant up → vagrant ssh → claude --dangerously-skip-permissions; その後Claudeはパッケージをインストールし、設定を変更し、Docker コンテナを起動し、VM 内でその他のシステムタスクを実行できます。パフォーマンスは許容範囲内です。VirtualBox の共有フォルダー同期に遅延はなく、Linux ホスト上でもリソース使用率は低く抑えられます。安全性メリットとしては、ホストのファイルシステム破壊、不要なパッケージインストール、および設定変更を防ぎ、必要に応じてVMを即座に破棄・再構築できます。保護の制限点としては、プロジェクトファイルが双方向で同期されるためまだ変更可能、稀に VM から逃げる脆弱性、VM からのネットワークレベル攻撃、およびインターネットアクセスによるデータ漏洩の可能性があります。より厳格な隔離を求める場合は config.vm.synced_folder に type: "rsync" を設定して一方向同期に切り替えることができますが、その場合手動で再同期する必要があります。作者は、危険フラグ付きClaude Codeを使用するユーザーに対し、ホストへの偶発的な損傷を防ぎつつワークフロー効率を維持するためにこの Vagrant セットアップを推奨しています。本文
背景
最近、Claude Code をますます利用しています。
ある時点で、処理が完了するまで別の作業を行うよりも、
「もう一度許可が必要か」などと頻繁に確認している自分に気付きました。
それは、エージェントが何かをやる本来の目的から外れてしまっていたようです。
そこで
--dangerously-skip-permissions フラグを付けて Claude Code を使おうと考えました。
まだ試したことがない方へ――このフラグは名前の通りで、
「許可を求める前に何でも実行する」ことができます。
「このパッケージをインストールしてもいいですか?」「設定を変更しても良いですか?」と
聞くことなく、単に処理を進めます。
処理の流れはスムーズですが、その分危険性も増します。
ファイルシステムを安全に保ちたいので、OS アカウント上で直接実行しない方針です。
考えたオプション
Docker
一番自然なイメージは Docker コンテナ。
コンテナは隔離のためにあるはずですが、Claude が
Docker イメージをビルドしたり、コンテナを走らせたり、
さらにはオーケストレーションまで行う必要があるので
「Docker‑in‑Docker」状態になります。
その場合
--privileged モードが必須で、結果として
- Claude がファイルシステムを壊す可能性 → 「ファイルシステムは安全」
- 逆にコンテナランタイムへのルート権限 → 「隔離は失敗」
というジレンマに。
さらに、ネットワークのネストやボリュームマウント時の権限問題、
ツールを使うよりも逆に対処する感覚が強くなります。
他にも考えたもの:
- yolo – そのまま裸で実行:いいえ、いや、絶対にやりません
- sandbox‑runtime – ACL ベース。Claude が何でもできるようにしたいので不要
- firejail 等 – Docker‑in‑Docker と同じ問題
- 手動 VM 設定 – 動くが面倒で再現性なし
- クラウド VM – コスト・レイテンシーが発生し、コードをアップロードする必要あり
Vagrant
ここで思い出したのは、Docker が流行る前に使っていた Vagrant です。
Vagrant はローカル開発環境をインフラコード化してくれるツールで、
次のようなメリットがあります。
- 完全な VM 隔離(共有カーネルなし)
- 簡単に破棄・再構築
- ローカル感覚で使えるシェアフォルダ
- Docker‑in‑Docker という無駄がない
私は長らく VirtualBox を使っていませんでしたが、
最新バージョン(7.2.4)を入れて試してみました。
最初に
vagrant up を実行すると、VM が CPU を 100%+ 消費しながら
何もせずにアイドル状態になることに気付きました。数時間にわたり VM の設定変更・検索・LLM に質問を投げた結果、
VirtualBox 7.2.4 はアイドル時に高 CPU を消費する回帰がある
という GitHub issue を発見しました。
Vagrantfile
以下は私のシンプルな
Vagrantfile です。
vm_name = File.basename(Dir.getwd) Vagrant.configure("2") do |config| config.vm.box = "bento/ubuntu-24.04" # config.vm.network "forwarded_port", guest: 3000, host: 3000, auto_correct: true config.vm.synced_folder ".", "/agent-workspace", type: "virtualbox" config.vm.provider "virtualbox" do |vb| vb.memory = "4096" vb.cpus = 2 vb.gui = false vb.name = vm_name vb.customize ["modifyvm", :id, "--audio", "none"] vb.customize ["modifyvm", :id, "--usb", "off"] end config.vm.provision "shell", inline: <<-SHELL export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y docker.io nodejs npm git unzip npm install -g @anthropic-ai/claude-code --no-audit usermod -aG docker vagrant chown -R vagrant:vagrant /agent-workspace SHELL end
実際に使う手順
cd ~/my-projectvagrant upvagrant sshclaude --dangerously-skip-permissions
これで Claude に任せるだけ。
最初の起動は数分かかりますが、以降は高速です。
作業終了時は
vagrant destroy で VM を破棄し、次回からは新規構築。
強化された Claude
VM 内で実行しているため、sudo 権限を与え、
「何でもできる」と認識させました。具体的には:
- 手動で Web アプリ API を起動し、curl で検証
- ブラウザをインストール・手動確認後にエンドツーエンドテスト作成
- Postgres データベース構築 → SQL テスト実行、マイグレーション確認
- Docker イメージのビルド・起動
ホスト上でやりたくない操作を、フラグが有効な状態でも安全に実行できます。
Claude が自律的に作業するため、コマンド入力・結果確認・反復処理を
私自身が手間取る必要はありません。
パフォーマンス
Claude Code はリソース消費がそれほど高くないので、
VM には十分余裕があります。
シェアフォルダの同期もスムーズで、ファイル変更時に遅延や不具合は発生しません。
これは Linux + VirtualBox 環境で確認済みです。他プラットフォームでは結果が異なる可能性があります。
安全対策
防ぎたいもの
- ファイルシステムへの偶発的損傷
- 過剰なパッケージインストール
- 変更を見逃す設定変更
- 「Claude がやってほしくないこと」を誤実行
守れないもの
- プロジェクトファイル自体の削除(同期は双方向)
- VM エスケープ脆弱性(稀で、意図的な攻撃が必要)
- ネットワークレベルの攻撃
- データ漏洩:VM はインターネットに接続していますが、コード以外にはほぼデータはありません
脅威モデル
自分自身がエージェントの動作を常に監視できるわけではないので、
偶発的な事故を防ぐ設定です。
プロジェクトはすべて Git で管理しているため、
破損してもローカルコピーから復旧可能です。
さらに Vagrant の
config.vm.synced_folder は type: "rsync" を指定でき、
一方向の同期(ホスト → VM)に制限することも可能です。
結論
VirtualBox の CPU バグを解消し、設定を整えるまでに少々時間がかかりましたが、
現在はスムーズに動作しています。
Claude Code を危険フラグ付きで使う際には、この構成をおすすめします。
VM を破棄して再起動するだけで、いつでも安全なサンドボックス環境を手に入れられます。
Vagrantfile は短く、どのプロジェクトディレクトリにもコピーして
vagrant up すれば、隔離された環境が整います。