はじめに
AIエージェントを使うにあたって、安全な隔離された環境を用意する事は、安全性にまつわる課題のひとつです。実務的には、人間が画面の前で承認ボタンをポチポチ押している訳にはいかないので出来るだけ自律実行して欲しい訳ですが、かといってオートモード放置にはまだ不安があります。
勝手に rm -rf / されたとかいう噂も聞いたり聞かなかったりし、いや未だにそんな事あるのかよと思ったりもしますが、最悪何をされても被害の上限が知れていればそれだけで気にするべき要素が減るのは確かです。
- プロジェクトに関係のないファイルやデータを読まれる可能性
- ログイン情報入りのブラウザを渡してしまう可能性
など。
安直には、専用パソコンをあてがったり、仮想サーバーをリモートに建てたりするのが思いつきますが、単純にコスト増となります。
加えて、ちょっと規模の大きな開発をしていると、エージェントに指示を出して結果を待っている間、同じリポジトリで平行作業をするのが難しい事にすぐ気づきます。Dockerfileをゴリゴリ書かせながらコンテナビルドをトライアンドエラーさせたり、ちょっと重いテストをしたりすると、平気で数時間待たされるというシチュエーションに頻繁に遭遇するようになりました。
安全な環境を切り出して人間の承認作業を減らせても、浮いた時間を有効利用できない訳です。横着して別のブランチにチェックアウトしている間にAIが作業再開でもしようものなら、何が起こるか予想できません。自然と、待ち時間で別のクローンを作り、そちらで独立セッションを作ることになるのですが、平行しているクローンが増えるごとに管理しきれなくなるのが目に見えています。結局管理コストが上がって本末転倒感があります。
同様の問題意識に既に回答がないはずもなく、Orcaというツールが目に留まったので試してみることにしました。私の理解では、同時進行しているセッションを1画面に集約して管理しやすくするものとの理解です。ローカル環境だけでなく、リモートホストにも接続して管理できるとのこと。
https://www.onorca.dev/
ということで、リモートアクセス可能なコンテナ環境を作って、Orcaから実際に接続してセッションを立ち上げてみることにしました。
隔離環境
単純なSSHサーバーをDockerで作り、Claude Codeが動くようにしました。Orcaは各社のエージェントが動作しますが、私が今のところClaude使いなので。
Orcaで接続する際にnpmを要求されたので、node.jsを入れています。
ClaudeはBashを使いたがるようで、うっかり入れ忘れたらシェルが無いと怒られました。Ubuntuなどを使うなら最初から入っているので問題無いかと思いますが…
Orca
サーバーを立ち上げたら、 左ペインからプロジェクトを追加を選び、ホストからリモートホストの追加 => SSHホストの追加と選択。接続情報を入れる画面が出るので、アドレスやポート番号を入力。ローカル環境で動かしているなら user@localhost:2222となります。
接続確立すると、以下の画面になります。
この画面から、リポジトリを指定してcloneできるということで試してみます。上記のリポジトリ自身を使いました。
左ペインのProjectsに追加されました。
さて、同一プロジェクトで独立したセッションを並列させる事が目的のひとつでした。プロジェクト名の右側の+から「ワークツリー」が作れます。既存のブランチから作ったり、「スマート」モードで簡単に作ったりできるようです。ひとまず、「スマート」からforkという名前で作成。
エージェントもここで選べますね。作成ボタンを押します。
ClaudeのCLIが無事に起動しています。
ホームディレクトリを確認すると、以下のようになっていました:
$ ls
fork sandbox-for-agents
sandbox-for-agentsが最初にクローンしたリポジトリです。forkという名前で独立のリポジトリができていることになります。
Orcaのワークツリーは、リポジトリレベルで分離されているということですね。作業がバッティングする心配はなさそうです。
最後に、適当な指示を出して動作を確認しました。
❯ このリポジトリを説明して!
Read 3 files, listed 1 directory
● リポジトリ概要
このリポジトリは、SSH経由でアクセス可能な開発用コンテナ環境を構築するため
の設定一式です。コードは非常に小さく、Dockerfile・docker-compose.yml・READ
ME.mdの3ファイルのみです。
構成
- Dockerfile(Alpine 3.20ベース)
- openssh-server, git,github-cli,python3/pip,build-base,
fishシェルなどをインストール
- Node.jsはnode:24-alpineのビルド済みバイナリをコピーして流用(軽量化の
ため独自ビルドせず借用)
- npm install -g @anthropic-ai/claude-codeでClaudeCodeCLI
をグローバルインストール
- userという一般ユーザーを作成し、ホームディレクトリを/worksに固定、whee
lグループでsudo権限付与
- sshdをポート2222で待受、root/パスワード認証設定を調整
-docker-compose.yml
- ssh-hostという1サービスのみ定義
-ホストの2222番ポートをコンテナの2222番にマッピング
-/worksディレクトリを名前付きボリューム(work_data)で永続化
- README.md
-起動方法(docker-compose up --build -d)
- SSH接続方法(ssh user@localhost -p 2222)
- GitHub CLIでの認証手順(gh auth login/logout)
用途の推測
Claude Codeがプリインストールされ、GitHub
CLIも使える状態のコンテナに、SSH経由でリモートログインして開発作業を行うた
めの「使い捨て/持ち運び可能な開発サンドボックス」を作るためのリポジトリの
ようです(現在の作業ディレクトリ名も/works/sandbox-for-agentsとなっており
、エージェント作業用サンドボックスの構築が目的と思われます)。
✻Cogitated for 21s
※recap: You asked me to explain this repo, which is a small Docker/SSH
sandbox setup for running Claude Code remotely; I gave you a full rundown
of the Dockerfile, compose file, and README. No further action pending
unless you want something changed. (disable recaps in /config)
────────────────────────────────────────────────────────────────────────────
❯
────────────────────────────────────────────────────────────────────────────
⏵⏵ bypass permissions on (shift+tab to cycle) · ← for agents
無事に動作させることができました。
まとめ
差し当たって、やりたかった事の本質はできたかなと思います。
プロジェクトに合わせて環境を調整したりが必要そうで、管理コストがどこまで下げられるか分からない部分もありますが、AIの管理コスト最適化は引き続き追っていきたいテーマです。



