Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How I Built a Zero-Trust Docker Sandbox for AI Coding Agents & Untrusted Repos

2026年08月25日に「Dev.to」が公開したITニュース「How I Built a Zero-Trust Docker Sandbox for AI Coding Agents & Untrusted Repos」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

AIエージェントや未確認コードをホストOSを汚染せず安全に実行するDockerサンドボックス「saferun」を開発。非rootでのファイル権限問題を解消し、使い捨てコンテナで開発環境を絶対的に隔離。IDE連携も可能で、安心してPython開発ができる。

ITニュース解説

システムエンジニアとして、新しいプロジェクトに参加したり、インターネットで見つけた便利なコードを試したりする機会は多くある。しかし、見知らぬコードをそのまま自分のパソコン(ホストOS)で実行するのは危険が伴う。例えば、悪意のあるコードがパソコン内の重要なファイルを削除したり、設定を勝手に変更したりする可能性がある。最近では、AIが自動でコードを書いたり、修正したりする「AIコーディングエージェント」も登場しているが、これらのAIが生成・実行するコマンドにも同様のリスクが伴う。自分の大切な開発環境や個人データを守るためにも、コードを実行する場所を安全に隔離することが非常に重要となる。

この課題を解決するために考案されたのが、「saferun」というツールだ。saferunは、Dockerという技術を使って、コードを安全に実行するための「サンドボックス」(砂場)環境を提供する。サンドボックスとは、何かを試すための、他の部分に影響を与えない独立した環境のことである。saferunは特にPython開発者やAIエージェントの利用を想定しており、macOSやLinux上で利用できる。

saferunは、開発者が安心して作業できる環境を提供するために、以下の五つの目標を掲げている。第一に「絶対的な隔離」で、コードの実行、テスト、コードチェック、AIエージェントのコマンドなど、すべての処理は、パソコン本体から完全に独立した使い捨てのLinuxコンテナ内で行われる。これにより、万が一危険なコードが実行されても、パソコン本体には一切影響が及ばない。第二に「シームレスなIDE統合」で、普段使っている開発ツール(PyCharmやVS Codeなど)でパソコン本体のファイルを編集すると、その変更が即座にコンテナ内の環境にも反映される。コンテナとホストOSの間でファイルを手動で同期する手間がないため、普段通りの快適な開発体験が維持できる。第三に「権限の課題なし」で、コンテナ内で生成されたファイルが、パソコン本体で作業しているユーザー(あなた自身)の所有物として扱われる。これにより、ファイルにアクセスできなくなったり、権限エラーに悩まされたりすることがなくなる。第四に「永続的な速度」で、開発に必要なライブラリやパッケージのダウンロードは、一度行われるとキャッシュされる。これにより、コンテナを起動するたびに毎回ダウンロードし直す必要がなく、環境の立ち上げが非常に高速になる。第五に「資格情報の隔離」で、SSHキーやGitの認証情報など、デリケートな情報がパソコン本体に安全に保管され、コンテナ内に直接持ち込まれることはない。これにより、コンテナ内で情報が漏洩するリスクを防ぐ。

saferunの核となるDockerは、アプリケーションとその実行環境を「コンテナ」と呼ばれる独立したパッケージにまとめる技術である。コンテナは非常に軽量で、仮想マシンよりも高速に起動し、異なる環境間での一貫した動作を保証する。しかし、Dockerを使った開発環境には特有の課題がある。特に「ファイル所有権」の問題だ。Dockerコンテナは通常、rootユーザー(最高管理者権限を持つユーザー)で実行される。このため、コンテナ内でファイルが生成されると、そのファイルはコンテナ内のrootユーザーが所有することになる。問題は、生成されたファイルがパソコン本体(ホストOS)に同期された際にも、ホストOS上でrootユーザーが所有している状態になってしまうことである。こうなると、ホストOSで普段使っている自分のユーザーアカウントでは、そのファイルにアクセスしたり編集したりする権限がなくなり、「Permission Denied」(アクセス拒否)のエラーに直面することになる。また、この問題を解決しようと、コンテナをホストOSのユーザーIDで実行しようとすると、今度はコンテナ内の特定のディレクトリ(例えばキャッシュ用ディレクトリ)が存在しないため、そこにファイルを書き込もうとしたツールがエラーを起こすという別の問題が発生する。これは、コンテナ内でのユーザーIDと、本来そのディレクトリに期待される権限設定とのミスマッチによって引き起こされる。

saferunでは、この複雑なファイル所有権の課題をDockerイメージの「Dockerfile」という設計図の段階で解決している。Dockerfileとは、Dockerコンテナを作成するための指示を記述したテキストファイルである。saferunのDockerfileでは、まずPythonの軽量な基本イメージを元に、必要なツール(curluvOpenCode)をインストールする。そして、最も重要なステップとして、パッケージのキャッシュやアプリケーションデータが保存される予定のディレクトリ(例: /uv-cache, /app-data, /tmp/.config)を事前にコンテナ内に作成する。さらに、これらの新しく作成されたディレクトリに対して、chmod 777というコマンドを使って、すべてのユーザーが読み書き実行できるように「オープンな書き込み権限」を付与する。これにより、コンテナがどのようなユーザーIDで起動されても、これらのディレクトリには自由にファイルを書き込めるようになる。そして、これらのディレクトリが後でホストOS側のボリューム(データを保存する場所)にマウントされることで、ホストOS側のユーザーが生成されたファイルにアクセスできるようになるのだ。

Dockerイメージの準備が完了すると、saferunはたった一つの簡単なコマンドで利用できるようになる。通常、Dockerコンテナを起動するには長いオプションをたくさん指定する必要があるが、saferunではこれをsaferunという短い「エイリアス」(別名)として設定することで、開発者が手軽に使えるようにしている。このエイリアスは、~/.zshrc~/.bashrcといったシェル設定ファイルに追加される。このエイリアスに含まれる主要なオプションとして、--rmはコンテナが終了したときに、そのコンテナを自動的に削除し、常にクリーンな状態を保つ。-itはコンテナと対話的に操作できるようにする。-u "$(id -u):$(id -g)"は、ホストOSで現在ログインしているユーザーのIDとグループIDをコンテナに渡し、そのユーザーとしてコンテナ内のプロセスを実行させることで、ファイル所有権の問題を解決する鍵となる。-e HOME=/tmp -e UV_CACHE_DIR=/uv-cache -e XDG_DATA_HOME=/app-dataは、環境変数を設定し、例えばuvというパッケージ管理ツールのキャッシュディレクトリをコンテナ内の/uv-cacheに指定する。-v "$(pwd):/app"は、現在パソコン本体で作業しているディレクトリを、コンテナ内の/appというディレクトリに「ライブマウント」し、パソコン本体で編集したファイルが即座にコンテナ内でも利用できるようにする。-v uv-cache:/uv-cacheは、uvのパッケージキャッシュを保存するための専用の「Dockerボリューム」をコンテナ内の/uv-cacheにマウントする。Dockerボリュームは、コンテナが削除されてもデータが失われない永続的なストレージであり、次回以降の起動時にキャッシュを再利用できるため、高速化に貢献する。さらに、-v ~/.config/opencode:/tmp/.config/opencode -v ~/.local/share/opencode:/app-data/opencodeは、AIエージェント「OpenCode」の認証情報や設定ファイルを、パソコン本体からコンテナ内にマッピングし、コンテナを起動するたびに再認証する手間を省く。

saferunを使った開発ワークフローは非常にシンプルだ。まず、GitHubなどから任意のプロジェクトのリポジトリを自分のパソコンにクローンする。次に、そのプロジェクトのルートディレクトリでターミナルを開き、「saferun」と入力するだけでよい。すると、あなたはすぐに完全に隔離されたLinuxシェル環境に入ることができる。この環境で、AIエージェントにコードの修正を依頼したり、疑わしいビルドスクリプトを実行したり、uv run pytestのようなコマンドで安全にテストを実行したりできる。作業が終わり、コンテナから抜け出すには「exit」と入力するだけである。コンテナは瞬時に消滅するが、コンテナ内で行ったコードの編集はすべてパソコン本体に安全に保存されているため、失われる心配はない。

saferunは、Dockerの強力な隔離機能と、賢い権限管理の工夫を組み合わせることで、システムエンジニアが安心して新しい技術やAIエージェントを活用できる開発環境を提供する。ホストOSの安全性を守りつつ、快適な開発体験を維持できるため、オープンソースプロジェクトへの貢献や、AIを活用したプログラミングの効率化に大いに役立つだろう。この仕組みを理解し、活用することで、より安全で効率的な開発が可能となる。

関連コンテンツ

関連IT用語

関連ITニュース