OpenShell
OpenShell 技術概要 — AIターミナルコーディングエージェントの全容
本記事は、NVIDIAが開発したオープンソースのAIエージェント実行環境「OpenShell」について、アーキテクチャ、セキュリティモデル、導入方法、活用パターン、そして類似ツールとの比較まで、包括的に解説する技術文書である。
目次
- はじめに — OpenShellとは何か
- アーキテクチャ概要
- インストールとセットアップ
- コア機能 — サンドボックス、ポリシー、クレデンシャル
- ツールシステムとケイパビリティ
- モデルサポートと構成
- ワークフローパターンとユースケース
- 類似ツールとの比較
- 拡張とカスタマイズ
- 実践的な使用例
- ベストプラクティス
- 制限事項と今後の方向性
1. はじめに — OpenShellとは何か
1.1 背景と課題
2024年から2026年にかけて、AIコーディングエージェントは急速に進化し、ソフトウェア開発の現場に浸透している。Claude Code、GitHub Copilot CLI、Cursor、Aiderなど、多数のツールが登場し、開発者はターミナルやIDE内でAIの支援を受けながらコーディングを行えるようになった。
しかし、これらのツールの普及に伴い、セキュリティに関する重大な懸念が浮上している。AIエージェントは、コードの生成や編集だけでなく、ファイルシステムへのアクセス、ネットワーク通信、外部APIの呼び出しなど、広範な権限を必要とする。自律的に動作するエージェントが、意図しないデータ漏洩やシステム破壊を引き起こすリスクは無視できない。
1.2 OpenShellの誕生
このセキュリティ課題に対するNVIDIAの回答が「OpenShell」である。OpenShellは、AIエージェントのための安全な実行環境(ランタイム)を提供するオープンソースプロジェクトだ。2026年4月にアルファ版としてリリースされ、Apache 2.0ライセンスの下で公開されている。
OpenShellの中核的な哲学は「安全にAIエージェントを実行する」ことにある。具体的には、各AIエージェントをサンドボックス化されたコンテナ内で実行し、宣言的なYAMLベースのポリシーによってファイルアクセス、ネットワーク通信、プロセス実行、推論ルーティングを厳密に制御する。
1.3 ポジショニング
OpenShellは、AIコーディングエージェントそのものではなく、エージェントが安全に動作するための「実行プラットフォーム」である。Claude Code、OpenCode、Codex、GitHub Copilot CLIなど、複数のAIエージェントをサポートしており、開発者は好みのエージェントを選択してOpenShellのサンドボックス内で実行できる。
この点で、OpenShellは「AIエージェントのDocker」あるいは「AIエージェントのKubernetes」と例えることができる。アプリケーション(AIエージェント)とインフラストラクチャ(実行環境)を分離し、セキュリティとガバナンスを提供する。
1.4 主要な特徴
OpenShellの主要な特徴は以下の通りである。
- サンドボックス化された実行環境: 各エージェントは独立したコンテナ内で実行され、ホストシステムから隔離される
- ポリシーベースのセキュリティ: YAMLで定義された宣言的ポリシーにより、アクセス制御を細粒度で管理
- クレデンシャル管理: APIキーやトークンを環境変数としてインジェクションし、ファイルシステムへの露出を防止
- ネットワーク制御: アウトバウンド接続をインターセプトし、ポリシーに基づいて評価
- リアルタイムターミナルUI: k9sに着想を得たダッシュボードでゲートウェイ、サンドボックス、システムステータスを監視
- ホットリロード可能なポリシー: ネットワークポリシーと推論ルーティングは、サンドボックスを再起動せずに更新可能
- マルチエージェントサポート: Claude Code、OpenCode、Codex、GitHub Copilot CLI、OpenClaw、Ollamaなど複数のエージェントに対応
- GPUサポート(実験的): ローカル推論のためのGPUパススルーアクセス
2. アーキテクチャ概要
2.1 全体構成
OpenShellのアーキテクチャは、セキュリティを最優先に設計された多層構造を採用している。システム全体は以下の主要コンポーネントで構成される。
┌──────────────────────────────────────────────────┐
│ OpenShell CLI │
│ (openshell コマンド) │
├──────────────────────────────────────────────────┤
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Gateway │ │ Policy │ │ Credential │ │
│ │ Manager │ │ Engine │ │ Provider │ │
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │
│ │ │ │ │
│ ┌─────┴───────────────┴───────────────┴──────┐ │
│ │ K3s Kubernetes │ │
│ │ (Single Docker Container) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Sandbox │ │ Sandbox │ │ Sandbox │ │ │
│ │ │ (Claude) │ │(OpenCode)│ │ (Codex) │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────┘
2.2 ゲートウェイ
ゲートウェイは、OpenShellシステムの中核的なコンポーネントである。その役割は以下の通り。
- サンドボックスのライフサイクル管理: サンドボックスの作成、起動、停止、削除を制御
- ポリシーの適用: ポリシーエンジンと連携し、各サンドボックスに適切なアクセス制御を適用
- ネットワークトラフィックの仲介: アウトバウンド接続をインターセプトし、ポリシーに基づいて許可または拒否
- クレデンシャルのインジェクション: クレデンシャルプロバイダーから取得した認証情報をサンドボックスに注入
ゲートウェイは単一のDockerコンテナ内でK3s(軽量Kubernetes)として動作する。これにより、別途Kubernetesクラスターを構築する必要がなく、開発者のローカル環境で容易に実行できる。
2.3 サンドボックス
サンドボックスは、AIエージェントが実際に実行される隔離環境である。各サンドボックスは独立したコンテナとして動作し、以下の特性を持つ。
- ファイルシステムの隔離: サンドボックス内のファイルシステムは、ポリシーで明示的に許可されたパスのみアクセス可能
- ネットワークの制御: デフォルトでアウトバウンド接続は制限され、ポリシーで許可されたエンドポイントのみ通信可能
- プロセスの制限: 特権昇格が防止され、許可されたプロセスのみ実行可能
- ビルトインツール: Python、Node.js、Git、サポートされるAIエージェントのツールがプリインストール
2.4 ポリシーエンジン
ポリシーエンジンは、OpenShellのセキュリティモデルの基盤となるコンポーネントである。4つのドメインにわたる防御を実装する。
2.4.1 ファイルシステムポリシー
ファイルシステムポリシーは、サンドボックス作成時にロックされ、実行中の変更はできない。これにより、エージェントが意図しないディレクトリにアクセスすることを確実に防止する。
filesystem:
allowed_paths:
- /workspace/project
- /tmp
denied_paths:
- /etc/passwd
- /root/.ssh
read_only_paths:
- /workspace/config
2.4.2 ネットワークポリシー
ネットワークポリシーは動的にリロード可能であり、サンドボックスの実行中でも更新できる。デフォルトでは最小限のアウトバウンド接続のみ許可される。
network:
default_action: deny
rules:
- destination: api.anthropic.com
ports: [443]
action: allow
- destination: api.openai.com
ports: [443]
action: allow
- destination: "*.github.com"
ports: [443]
action: allow
2.4.3 プロセスポリシー
プロセスポリシーは、サンドボックス内で実行可能なプロセスを制限する。サンドボックス作成時にロックされる。
process:
allow_privilege_escalation: false
allowed_executables:
- /usr/bin/python3
- /usr/bin/node
- /usr/bin/git
max_processes: 50
max_memory: "4Gi"
2.4.4 推論ルーティングポリシー
推論ルーティングポリシーは、AIモデルのAPI呼び出しを制御する。ホットリロード可能であり、使用するモデルやプロバイダーを動的に切り替えることができる。
inference:
default_provider: anthropic
routes:
- model_pattern: "claude-*"
provider: anthropic
endpoint: https://api.anthropic.com/v1
- model_pattern: "gpt-*"
provider: openai
endpoint: https://api.openai.com/v1
- model_pattern: "llama-*"
provider: local
endpoint: http://localhost:11434/v1
2.5 クレデンシャルプロバイダー
クレデンシャルプロバイダーは、APIキーやトークンなどの認証情報を安全に管理するコンポーネントである。主な特徴は以下の通り。
- 環境変数によるインジェクション: クレデンシャルはサンドボックスの環境変数として注入される
- ファイルシステムへの非露出: クレデンシャルはファイルシステム上に保存されないため、エージェントが直接読み取ることはできない
- 名前付きバンドル: 複数のクレデンシャルを論理的なグループ(プロバイダー)としてまとめて管理
- 自動検出: 環境変数からのクレデンシャルの自動検出をサポート
credentials:
providers:
- name: anthropic
env_vars:
ANTHROPIC_API_KEY: "${ANTHROPIC_API_KEY}"
- name: openai
env_vars:
OPENAI_API_KEY: "${OPENAI_API_KEY}"
- name: github
env_vars:
GITHUB_TOKEN: "${GITHUB_TOKEN}"
2.6 ターミナルUI
OpenShellは、k9sに着想を得たリアルタイムターミナルUIを提供する。このダッシュボードにより、以下の情報をリアルタイムで監視できる。
- ゲートウェイのステータス
- アクティブなサンドボックスの一覧と状態
- 適用されているポリシーの概要
- ネットワークトラフィックのモニタリング
- リソース使用状況(CPU、メモリ、ディスク)
3. インストールとセットアップ
3.1 前提条件
OpenShellをインストールするには、以下の前提条件を満たす必要がある。
- Python 3.12以上: OpenShellのCLIはPythonで実装されている
- Docker: サンドボックスのコンテナランタイムとして必要
- オペレーティングシステム: Linux(推奨)、macOS(Docker Desktop必要)
- ディスク容量: 最低10GB以上(コンテナイメージ用)
- メモリ: 最低8GB RAM(推奨16GB以上)
3.2 インストール方法
OpenShellは2つの方法でインストールできる。
3.2.1 バイナリインストール(推奨)
最も簡単な方法は、公式インストールスクリプトを使用することである。
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
このスクリプトは、プラットフォームを自動検出し、適切なバイナリをダウンロードしてインストールする。
3.2.2 PyPIからのインストール
Python開発者向けに、PyPIからのインストールもサポートされている。
# uvを使用する場合(推奨)
uv tool install -U openshell
# pipを使用する場合
pip install openshell
3.3 初期セットアップ
インストール後、ゲートウェイを起動してOpenShellの使用を開始する。
# ゲートウェイの初期化と起動
openshell gateway start
# ステータスの確認
openshell gateway status
ゲートウェイが起動すると、K3sクラスターがDockerコンテナ内で自動的にプロビジョニングされる。
3.4 クレデンシャルの設定
AIエージェントを使用するには、対応するAPIキーを設定する必要がある。
# Anthropic APIキーの設定
export ANTHROPIC_API_KEY="sk-ant-..."
# OpenAI APIキーの設定(Codex使用時)
export OPENAI_API_KEY="sk-..."
# GitHub トークンの設定(Copilot CLI使用時)
export GITHUB_TOKEN="ghp_..."
OpenShellは環境変数からクレデンシャルを自動検出し、サンドボックスに安全にインジェクションする。
3.5 最初のサンドボックスの作成
クレデンシャルを設定したら、最初のサンドボックスを作成してAIエージェントを起動できる。
# Claude Codeでサンドボックスを作成
openshell sandbox create -- claude
# OpenCodeでサンドボックスを作成
openshell sandbox create -- opencode
# Codexでサンドボックスを作成
openshell sandbox create -- codex
sandbox createコマンドは、指定されたエージェント用のサンドボックスを作成し、デフォルトポリシーを適用して起動する。
3.6 動作確認
サンドボックスが正常に起動したことを確認する。
# サンドボックスの一覧表示
openshell sandbox list
# 特定のサンドボックスの詳細情報
openshell sandbox info <sandbox-id>
# ターミナルUIでダッシュボードを表示
openshell dashboard
4. コア機能 — サンドボックス、ポリシー、クレデンシャル
4.1 サンドボックスの詳細
サンドボックスは、OpenShellの最も重要な機能である。AIエージェントの実行環境を完全に隔離し、ホストシステムへの影響を最小限に抑える。
4.1.1 サンドボックスのライフサイクル
サンドボックスは以下のライフサイクルステートを持つ。
- Creating(作成中): サンドボックスのコンテナが構築されている状態
- Running(実行中): エージェントがアクティブに動作している状態
- Paused(一時停止): サンドボックスが一時的に中断されている状態
- Stopped(停止): サンドボックスが正常に停止された状態
- Failed(障害): エラーにより停止した状態
- Destroyed(破棄): サンドボックスが完全に削除された状態
# サンドボックスの作成と起動
openshell sandbox create --name my-dev-env -- claude
# サンドボックスの一時停止
openshell sandbox pause my-dev-env
# サンドボックスの再開
openshell sandbox resume my-dev-env
# サンドボックスの停止
openshell sandbox stop my-dev-env
# サンドボックスの削除
openshell sandbox destroy my-dev-env
4.1.2 サンドボックスの構成オプション
サンドボックスは作成時にさまざまなオプションで構成できる。
# カスタムポリシーを適用してサンドボックスを作成
openshell sandbox create \
--name production-review \
--policy strict-review.yaml \
--mount /path/to/project:/workspace \
--env MY_VAR=value \
--memory 8Gi \
--cpus 4 \
-- claude
# GPUサポートを有効にしてサンドボックスを作成(実験的)
openshell sandbox create \
--name local-inference \
--gpu passthrough \
-- ollama
4.1.3 ワークスペースのマウント
サンドボックス内でプロジェクトファイルにアクセスするために、ホストのディレクトリをマウントする。
# 読み書き可能なマウント
openshell sandbox create \
--mount /home/user/project:/workspace \
-- claude
# 読み取り専用マウント
openshell sandbox create \
--mount /home/user/config:/config:ro \
-- claude
マウントされたディレクトリは、ファイルシステムポリシーのallowed_pathsに自動的に追加される。
4.2 ポリシーシステムの詳細
4.2.1 ポリシーの種類と特性
OpenShellのポリシーは、変更可能性に基づいて2つのカテゴリに分類される。
| カテゴリ | ドメイン | 変更タイミング | 説明 |
|---|---|---|---|
| 静的ポリシー | ファイルシステム、プロセス | 作成時にロック | セキュリティ上の理由から、実行中の変更不可 |
| 動的ポリシー | ネットワーク、推論ルーティング | ホットリロード | 運用中の柔軟な変更が可能 |
この設計は、セキュリティと柔軟性のバランスを取るためのものである。ファイルシステムやプロセスの制限は、変更されるとセキュリティホールを生む可能性があるため静的にロックされる。一方、ネットワーク接続先やモデルの切り替えは、運用上頻繁に変更が必要となるため動的に更新可能とされている。
4.2.2 ポリシーテンプレート
OpenShellは、一般的なユースケースに対応するポリシーテンプレートを提供している。
最小権限ポリシー(Minimal):
name: minimal
description: "Minimal permissions for code review"
filesystem:
allowed_paths:
- /workspace
denied_paths:
- /workspace/.env
- /workspace/.git/config
read_only_paths:
- /workspace
network:
default_action: deny
rules:
- destination: api.anthropic.com
ports: [443]
action: allow
process:
allow_privilege_escalation: false
allowed_executables:
- /usr/bin/python3
- /usr/bin/node
- /usr/bin/git
max_processes: 20
max_memory: "2Gi"
inference:
default_provider: anthropic
開発用ポリシー(Development):
name: development
description: "Standard development environment"
filesystem:
allowed_paths:
- /workspace
- /tmp
denied_paths:
- /workspace/.env
- /workspace/secrets
network:
default_action: deny
rules:
- destination: api.anthropic.com
ports: [443]
action: allow
- destination: "*.npmjs.org"
ports: [443]
action: allow
- destination: "*.pypi.org"
ports: [443]
action: allow
- destination: "*.github.com"
ports: [443]
action: allow
process:
allow_privilege_escalation: false
allowed_executables:
- /usr/bin/python3
- /usr/bin/node
- /usr/bin/npm
- /usr/bin/git
- /usr/bin/make
- /usr/bin/cargo
max_processes: 100
max_memory: "8Gi"
inference:
default_provider: anthropic
routes:
- model_pattern: "claude-*"
provider: anthropic
- model_pattern: "*"
provider: anthropic
4.2.3 ポリシーの適用と更新
# サンドボックス作成時にポリシーを適用
openshell sandbox create --policy development.yaml -- claude
# 動的ポリシーのホットリロード
openshell policy reload my-sandbox network-policy.yaml
# 現在適用されているポリシーの確認
openshell policy show my-sandbox
# ポリシーの検証(ドライラン)
openshell policy validate my-policy.yaml
4.3 クレデンシャル管理の詳細
4.3.1 クレデンシャルプロバイダーの構成
OpenShellは、複数のクレデンシャルプロバイダーを同時に管理できる。各プロバイダーは名前付きバンドルとして構成され、サンドボックスに選択的にインジェクションできる。
# credentials.yaml
providers:
- name: anthropic-prod
description: "Production Anthropic API"
env_vars:
ANTHROPIC_API_KEY: "${ANTHROPIC_API_KEY_PROD}"
- name: anthropic-dev
description: "Development Anthropic API"
env_vars:
ANTHROPIC_API_KEY: "${ANTHROPIC_API_KEY_DEV}"
- name: github-ci
description: "CI/CD GitHub token"
env_vars:
GITHUB_TOKEN: "${GITHUB_CI_TOKEN}"
GH_TOKEN: "${GITHUB_CI_TOKEN}"
- name: aws-staging
description: "AWS Staging credentials"
env_vars:
AWS_ACCESS_KEY_ID: "${AWS_STAGING_KEY_ID}"
AWS_SECRET_ACCESS_KEY: "${AWS_STAGING_SECRET}"
AWS_REGION: "us-west-2"
4.3.2 クレデンシャルのセキュリティモデル
OpenShellのクレデンシャル管理は、以下のセキュリティ原則に基づいている。
- 最小権限の原則: サンドボックスには、必要なクレデンシャルのみがインジェクションされる
- 一時的な露出: クレデンシャルは環境変数としてのみ存在し、ファイルシステムに永続化されない
- 分離: 異なるサンドボックス間でクレデンシャルは共有されない
- 監査: クレデンシャルの使用はゲートウェイレベルでログに記録される
- ローテーション対応: 環境変数を更新することで、クレデンシャルをローテーション可能
5. ツールシステムとケイパビリティ
5.1 ビルトインツール
OpenShellのサンドボックスには、開発に必要な基本的なツールがプリインストールされている。
| カテゴリ | ツール | 用途 |
|---|---|---|
| ランタイム | Python 3.12+, Node.js 20+ | コードの実行 |
| バージョン管理 | Git | リポジトリの操作 |
| パッケージ管理 | pip, npm, cargo | 依存関係の管理 |
| ビルドツール | make, cmake | プロジェクトのビルド |
| テキスト処理 | grep, sed, awk, jq | テキストの検索・変換 |
| ネットワーク | curl, wget | HTTP通信(ポリシーの範囲内) |
5.2 エージェント固有のケイパビリティ
各AIエージェントは、OpenShellのサンドボックス内で独自のツールセットを使用できる。
5.2.1 Claude Code のツール
Claude Codeは、OpenShellのサンドボックス内で以下のツールを使用する。
- ファイル操作: ファイルの読み取り、書き込み、編集
- Bash実行: シェルコマンドの実行(プロセスポリシーの範囲内)
- コード検索: grep、ripgrepを使用したコードベースの検索
- Git操作: コミット、ブランチ操作、差分確認
- ウェブフェッチ: URL からのコンテンツ取得(ネットワークポリシーの範囲内)
5.2.2 Codex のツール
Codexは、以下のツールをサンドボックス内で使用する。
- ファイル操作: コードの生成と編集
- ターミナル操作: コマンドの実行
- コードベースの理解: プロジェクト構造の分析
5.2.3 GitHub Copilot CLI のツール
Copilot CLIは、以下の機能を提供する。
- コマンド提案: 自然言語からシェルコマンドを生成
- コマンド説明: 既存のコマンドの説明
- Git操作支援: Gitコマンドの生成と実行
5.3 エージェントスキル
OpenShellは、プラットフォーム固有の「エージェントスキル」を提供している。これらは、OpenShell環境内でのデバッグやポリシー生成を支援する機能である。
# クラスターデバッグスキルの使用
openshell skills list
# ポリシー生成スキル
openshell skills run policy-generator --description "Web development environment"
注目すべきは、OpenShell自体がこれらのエージェントワークフローを使用して開発されたという点である。これは「エージェントファースト」の哲学を体現している。
5.4 コミュニティテンプレート
OpenShellは、一般的な開発シナリオに対応するコミュニティ提供のサンドボックステンプレートを提供している。
# テンプレートの一覧表示
openshell templates list
# テンプレートからサンドボックスを作成
openshell sandbox create --template web-dev -- claude
# 利用可能なテンプレートの例
# - web-dev: ウェブ開発用(Node.js, npm, ブラウザツール)
# - data-science: データサイエンス用(Python, Jupyter, pandas)
# - devops: DevOps/SRE用(kubectl, terraform, ansible)
# - security-review: セキュリティレビュー用(最小権限)
6. モデルサポートと構成
6.1 サポートされるAIエージェントとモデル
OpenShellは、以下のAIエージェントとモデルをサポートしている。
| エージェント | モデルプロバイダー | 対応モデル | ステータス |
|---|---|---|---|
| Claude Code | Anthropic | Claude Sonnet 4, Claude Opus 4 | 安定版 |
| OpenCode | 複数対応 | 各種モデル | 安定版 |
| Codex | OpenAI | GPT-4.1, o3, o4-mini | 安定版 |
| GitHub Copilot CLI | GitHub/OpenAI | Copilotモデル | 安定版 |
| OpenClaw | コミュニティ | 各種モデル | コミュニティ |
| Ollama | ローカル | Llama, Mistral, Gemma等 | 実験的 |
6.2 推論ルーティングの設定
推論ルーティングにより、AIエージェントからのモデルAPI呼び出しを適切なプロバイダーにルーティングできる。
6.2.1 基本的なルーティング
inference:
default_provider: anthropic
routes:
- model_pattern: "claude-*"
provider: anthropic
endpoint: https://api.anthropic.com/v1
priority: 1
- model_pattern: "gpt-*"
provider: openai
endpoint: https://api.openai.com/v1
priority: 2
6.2.2 ローカル推論の設定
Ollamaなどのローカル推論エンジンを使用する場合の設定。
inference:
default_provider: local
routes:
- model_pattern: "llama-*"
provider: local
endpoint: http://host.docker.internal:11434/v1
- model_pattern: "mistral-*"
provider: local
endpoint: http://host.docker.internal:11434/v1
- model_pattern: "gemma-*"
provider: local
endpoint: http://host.docker.internal:11434/v1
6.2.3 フォールバック設定
プライマリプロバイダーが利用できない場合のフォールバック設定。
inference:
default_provider: anthropic
fallback:
enabled: true
max_retries: 3
retry_delay_ms: 1000
routes:
- model_pattern: "claude-*"
provider: anthropic
fallback_provider: local
fallback_model: "llama-3-70b"
6.3 GPUサポート(実験的)
OpenShellは、ローカル推論のためのGPUパススルーアクセスを実験的にサポートしている。
# GPUパススルーでサンドボックスを作成
openshell sandbox create \
--gpu passthrough \
--name local-llm \
-- ollama
# GPU使用状況の確認
openshell sandbox gpu-status local-llm
GPUサポートにより、NVIDIAのGPU上でローカルモデルを実行し、クラウドAPIへの依存を削減できる。ただし、この機能はアルファ段階であり、以下の制限がある。
- NVIDIA GPUのみサポート
- CUDAドライバーのインストールが必要
- マルチGPUの分散推論は未対応
- メモリ管理は手動で行う必要がある
7. ワークフローパターンとユースケース
7.1 個人開発ワークフロー
7.1.1 日常的なコーディング
最も基本的なユースケースは、AIエージェントを安全な環境で使用した日常的なコーディングである。
# プロジェクトディレクトリをマウントしてClaude Codeを起動
openshell sandbox create \
--name daily-dev \
--mount ~/projects/my-app:/workspace \
--policy development.yaml \
-- claude
このワークフローでは、開発者はClaude Codeの全機能を使用しながら、以下のセキュリティ保証を得ることができる。
.envファイルや秘密鍵ファイルへのアクセスが禁止される- 許可されていない外部エンドポイントへの通信が阻止される
- プロジェクトの範囲外のファイルシステムへのアクセスが防止される
7.1.2 コードレビュー
AIエージェントを使用したコードレビューは、セキュリティ上特に注意が必要なユースケースである。レビュー対象のコードは読み取り専用でマウントし、AIエージェントによる変更を防止する。
# 読み取り専用でプロジェクトをマウントし、最小権限ポリシーを適用
openshell sandbox create \
--name code-review \
--mount ~/projects/feature-branch:/workspace:ro \
--policy minimal.yaml \
-- claude
7.1.3 セキュリティ監査
AIエージェントを使用したセキュリティ監査では、さらに厳密なポリシーが必要である。
# security-audit.yaml
name: security-audit
description: "Locked-down environment for security analysis"
filesystem:
allowed_paths:
- /workspace
read_only_paths:
- /workspace
denied_paths:
- /workspace/.env
- /workspace/.git/config
- /workspace/secrets
- /workspace/**/*.pem
- /workspace/**/*.key
network:
default_action: deny
rules:
- destination: api.anthropic.com
ports: [443]
action: allow
process:
allow_privilege_escalation: false
allowed_executables:
- /usr/bin/python3
- /usr/bin/grep
- /usr/bin/find
max_processes: 10
max_memory: "2Gi"
7.2 チーム開発ワークフロー
7.2.1 統一されたエージェント環境
チーム全体で統一されたAIエージェント環境を提供するために、共有ポリシーとテンプレートを使用する。
# チームメンバーは標準テンプレートを使用してサンドボックスを作成
openshell sandbox create \
--template .openshell/templates/backend-dev.yaml \
-- claude
7.2.2 マルチエージェント協調
異なるタスクに最適なエージェントを組み合わせて使用するパターン。
# コード生成にClaude Codeを使用
openshell sandbox create \
--name code-gen \
--mount ~/project:/workspace \
--policy development.yaml \
-- claude
# テスト生成にCodexを使用
openshell sandbox create \
--name test-gen \
--mount ~/project:/workspace \
--policy development.yaml \
-- codex
# コマンド生成にCopilot CLIを使用
openshell sandbox create \
--name ops-helper \
--policy minimal.yaml \
-- copilot-cli
7.3 CI/CDワークフロー
7.3.1 自動コードレビュー
CI/CDパイプラインにOpenShellを統合し、プルリクエストの自動レビューを実行する。
# .github/workflows/ai-review.yaml
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
ai-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install OpenShell
run: |
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
- name: Start Gateway
run: openshell gateway start
- name: Run AI Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
openshell sandbox create \
--name ci-review \
--mount ${{ github.workspace }}:/workspace:ro \
--policy .openshell/policies/ci-review.yaml \
--command "claude review --output /tmp/review.md" \
-- claude
7.3.2 自動テスト生成
新しいコードに対してAIエージェントが自動的にテストを生成するワークフロー。
openshell sandbox create \
--name test-generator \
--mount ./src:/workspace/src:ro \
--mount ./tests:/workspace/tests \
--policy test-gen.yaml \
--command "claude 'Generate unit tests for all new functions in /workspace/src'" \
-- claude
7.4 データサイエンスワークフロー
7.4.1 安全なデータ分析
機密データを扱うデータサイエンスワークフローでは、データの漏洩防止が最重要課題となる。
# data-science.yaml
name: data-science
description: "Secure data analysis environment"
filesystem:
allowed_paths:
- /workspace/data
- /workspace/notebooks
- /workspace/output
- /tmp
denied_paths:
- /workspace/data/raw # 生データへの直接アクセスを禁止
network:
default_action: deny
rules:
- destination: api.anthropic.com
ports: [443]
action: allow
process:
max_memory: "16Gi"
allowed_executables:
- /usr/bin/python3
- /usr/bin/jupyter
8. 類似ツールとの比較
8.1 比較マトリックス
OpenShellと主要なAIコーディングツールの比較を以下に示す。
| 特性 | OpenShell | Claude Code | Cursor | GitHub Copilot CLI | Aider | Codex CLI |
|---|---|---|---|---|---|---|
| タイプ | 実行プラットフォーム | AIエージェント | IDE統合 | CLIツール | CLIエージェント | CLIエージェント |
| オープンソース | はい (Apache 2.0) | はい | いいえ | いいえ | はい (Apache 2.0) | はい |
| サンドボックス | はい(コア機能) | 限定的 | いいえ | いいえ | いいえ | はい |
| ポリシー制御 | YAML宣言的 | 設定ベース | なし | なし | なし | 限定的 |
| マルチエージェント | はい | いいえ | いいえ | いいえ | いいえ | いいえ |
| クレデンシャル管理 | ビルトイン | 環境変数 | IDE統合 | GitHub統合 | 環境変数 | 環境変数 |
| ネットワーク制御 | 細粒度 | なし | なし | なし | なし | 限定的 |
| 対象ユーザー | セキュリティ重視の組織 | 個人/チーム | 個人/チーム | 個人 | 個人/チーム | 個人/チーム |
8.2 Claude Code との比較
OpenShellとClaude Codeは競合関係ではなく、相互補完的な関係にある。Claude Codeは「何をするか」(コード生成、編集、レビュー)を担当し、OpenShellは「どのように安全に実行するか」(隔離、制御、監視)を担当する。
8.3 Cursor との比較
CursorはIDE(統合開発環境)ベースのAIコーディングツールであり、開発者の生産性に焦点を当てている。OpenShellはターミナルベースの実行プラットフォームであり、セキュリティとガバナンスに焦点を当てている。
8.4 Aider との比較
Aiderは、ターミナルベースのオープンソースAIコーディングアシスタントであり、Git統合に優れている。OpenShellはAiderをサンドボックス内で実行し、セキュリティレイヤーを追加できる。
8.5 Codex CLI との比較
OpenAIのCodex CLIは内蔵サンドボックスを持つが、OpenShellはより包括的な隔離とポリシーベースのネットワーク制御を提供する。
8.6 選択の指針
| ニーズ | 推奨ツール |
|---|---|
| AIを使って素早くコードを書きたい | Claude Code、Cursor、Aider |
| エンタープライズでの安全なAIエージェント実行 | OpenShell + 好みのエージェント |
| ローカル環境でのAI活用 | Ollama + OpenShell |
| CI/CDでの自動化 | OpenShell + Claude Code/Codex |
| コマンドライン操作の支援 | GitHub Copilot CLI |
| IDE統合のAI支援 | Cursor |
9. 拡張とカスタマイズ
9.1 カスタムポリシーの作成
OpenShellの最大の強みの1つは、組織やプロジェクトのニーズに合わせてポリシーをカスタマイズできることである。
9.1.1 ポリシーの設計原則
- 最小権限の原則: 必要最小限のアクセス権のみを付与する
- 明示的な拒否: デフォルトで全てを拒否し、必要なものだけを許可する
- レイヤード防御: 複数のポリシードメインを組み合わせて防御層を構築する
- 監査可能性: ポリシーの意図が明確で、レビューが容易であること
9.1.2 プロジェクト固有のポリシー
Webアプリケーション開発ポリシー:
name: webapp-development
description: "Full-stack web application development"
version: "1.0"
filesystem:
allowed_paths:
- /workspace/frontend
- /workspace/backend
- /workspace/shared
- /tmp
- /workspace/node_modules
denied_paths:
- /workspace/.env
- /workspace/.env.local
- /workspace/.env.production
- /workspace/backend/secrets
- /workspace/**/*.pem
- /workspace/**/*.key
- /workspace/**/*.p12
read_only_paths:
- /workspace/infrastructure
- /workspace/docs
network:
default_action: deny
rules:
- destination: api.anthropic.com
ports: [443]
action: allow
- destination: "*.npmjs.org"
ports: [443]
action: allow
- destination: "*.github.com"
ports: [443]
action: allow
- destination: "localhost"
ports: [3000, 5173, 8080]
action: allow
process:
allow_privilege_escalation: false
allowed_executables:
- /usr/bin/python3
- /usr/bin/node
- /usr/bin/npm
- /usr/bin/npx
- /usr/bin/yarn
- /usr/bin/git
- /usr/bin/make
- /usr/bin/curl
max_processes: 150
max_memory: "12Gi"
inference:
default_provider: anthropic
9.2 カスタムサンドボックステンプレート
再利用可能なサンドボックステンプレートを作成することで、チーム全体で一貫した環境を提供できる。
# .openshell/templates/python-ml.yaml
name: python-ml
description: "Machine learning development environment"
base_image: nvidia/cuda:12.0-runtime-ubuntu22.04
tools:
- python3.12
- pip
- git
- jupyter
python_packages:
- numpy
- pandas
- scikit-learn
- torch
- transformers
- matplotlib
policy: .openshell/policies/data-science.yaml
default_mounts:
- host: ./data
container: /workspace/data
mode: ro
- host: ./notebooks
container: /workspace/notebooks
mode: rw
resources:
memory: "16Gi"
cpus: 8
gpu: passthrough
9.3 APIとプログラマティックアクセス
9.3.1 Python API
from openshell import OpenShellClient
client = OpenShellClient()
sandbox = client.sandbox.create(
name="api-sandbox",
agent="claude",
policy="development.yaml",
mounts=[
{"host": "/home/user/project", "container": "/workspace", "mode": "rw"}
],
resources={"memory": "8Gi", "cpus": 4}
)
status = client.sandbox.status(sandbox.id)
print(f"Status: {status.state}")
client.policy.reload(sandbox.id, "updated-network-policy.yaml")
client.sandbox.stop(sandbox.id)
client.sandbox.destroy(sandbox.id)
9.3.2 REST API
# サンドボックスの一覧取得
curl -X GET http://localhost:8080/api/v1/sandboxes
# サンドボックスの作成
curl -X POST http://localhost:8080/api/v1/sandboxes \
-H "Content-Type: application/json" \
-d '{
"name": "my-sandbox",
"agent": "claude",
"policy": "development",
"mounts": [{"host": "/project", "container": "/workspace"}]
}'
10. 実践的な使用例
10.1 例1: 既存プロジェクトのリファクタリング
# リファクタリング用のポリシーを作成し、サンドボックスで安全に実行
openshell sandbox create \
--name refactoring \
--mount ~/projects/legacy-app:/workspace \
--policy refactoring-policy.yaml \
-- claude
10.2 例2: マルチエージェントによるフルスタック開発
# バックエンド開発 - Claude Code
openshell sandbox create --name backend-dev --mount ~/projects/app:/workspace --policy development.yaml -- claude
# フロントエンド開発 - Codex
openshell sandbox create --name frontend-dev --mount ~/projects/app:/workspace --policy development.yaml -- codex
# インフラ管理 - Copilot CLI
openshell sandbox create --name infra-ops --mount ~/projects/app/deploy:/workspace:ro --policy minimal.yaml -- copilot-cli
10.3 例3: CI/CDパイプラインでの自動セキュリティレビュー
# .github/workflows/security-review.yaml
name: AI Security Review
on:
pull_request:
types: [opened, synchronize]
jobs:
security-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install OpenShell
run: curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
- name: Start Gateway
run: openshell gateway start
- name: Run Security Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
openshell sandbox create \
--name security-review \
--mount ${{ github.workspace }}:/workspace:ro \
--policy /tmp/security-review.yaml \
--command "claude 'Review for security vulnerabilities'" \
-- claude
10.4 例4: ローカルLLMを使用したオフライン開発
# オフライン用ポリシーでローカルOllamaのみ許可
openshell sandbox create \
--name offline-dev \
--mount ~/projects/secure-app:/workspace \
--policy offline-policy.yaml \
--gpu passthrough \
-- ollama
10.5 例5: データパイプラインの安全な開発
# 本番データへのアクセスを禁止し、サンプルデータのみ使用
openshell sandbox create \
--name data-pipeline-dev \
--mount ~/projects/data-platform:/workspace \
--policy data-pipeline-policy.yaml \
-- claude
11. ベストプラクティス
11.1 セキュリティのベストプラクティス
- 最小権限を徹底する: 開発に必要最小限のアクセスのみを許可する
- 機密ファイルを明示的に拒否する:
.env、秘密鍵、認証情報ファイルは常にdenied_pathsに含める - ネットワークアクセスをホワイトリスト方式で管理する:
default_action: denyを基本とする - 読み取り専用マウントを活用する: レビューや分析目的の場合は読み取り専用でマウント
- ポリシーをバージョン管理する: ポリシーファイルをGitリポジトリに含める
11.2 運用のベストプラクティス
- 標準ポリシーを策定する: チーム全体で使用する標準ポリシーを定義する
- テンプレートを活用する: よく使うサンドボックス構成をテンプレート化する
- ポリシーのレビュープロセスを確立する: セキュリティレビューを実施する
- 定期的な監査を実施する: サンドボックスの使用状況を定期的にレビューする
11.3 パフォーマンス最適化
- 適切なリソース割り当て: タスクの要件に基づいてメモリとCPUを割り当てる
- キャッシュの活用: パッケージマネージャーのキャッシュをマウントする
- 不要なサンドボックスは速やかに削除する: リソースの無駄遣いを低減する
12. 制限事項と今後の方向性
12.1 現在の制限事項
12.1.1 アルファステージの制約
OpenShellは2026年4月現在、アルファ段階にある。「シングルプレイヤーモード — 1人の開発者、1つの環境、1つのゲートウェイ」という制約がある。
- マルチテナント非対応: 複数の開発者が同一のゲートウェイを共有する構成は未サポート
- エンタープライズ機能の欠如: RBAC、監査ログのエクスポート、SSOは未実装
- クラスターモードの不在: 複数ノードにわたる分散デプロイメントは未対応
- 安定性の課題: アルファ版であるため、予期しないエラーが存在する可能性がある
12.1.2 技術的な制限
- Docker依存: Docker環境が必須
- リソースオーバーヘッド: K3sとコンテナ化によるオーバーヘッド
- GPUサポートの未成熟: NVIDIA GPUのみ、実験的機能
- Windowsサポートの限定: Linux環境が推奨
- macOSでのDocker Desktop必要: ライセンスやパフォーマンスの考慮が必要
12.2 セキュリティに関する考慮事項
- エスケープリスク: コンテナエスケープの脆弱性によるサンドボックス隔離の破壊リスク
- サイドチャネル攻撃: 共有リソースを介した攻撃の完全な防止は困難
- ポリシーの設定ミス: 不適切なポリシー設定による意図しないアクセスの許可
- サプライチェーンリスク: サンドボックス内ツールへのサプライチェーン攻撃はOpenShellの範囲外
12.3 今後の方向性
12.3.1 短期的なロードマップ
- マルチテナントサポート
- ポリシーの高度化(条件付きルール)
- 監査ログの強化
- 追加エージェントのサポート
- 安定性の向上(ベータ版へ)
12.3.2 中長期的な展望
- エンタープライズ機能(RBAC、SSO、コンプライアンスレポート)
- クラウドネイティブデプロイメント
- AIガバナンスの統合(使用量追跡、コスト管理)
- マルチクラウド対応
- オブザーバビリティ(トレーシング、メトリクス)
まとめ
OpenShellは、AIコーディングエージェントの時代における重要なインフラストラクチャツールである。以下の核心的な価値を提供する。
- 安全性: サンドボックス化と多層ポリシーにより、AIエージェントの安全な実行を保証する
- 柔軟性: 複数のエージェントとモデルをサポートし、開発者の選択の自由を維持する
- 制御性: 宣言的ポリシーにより、アクセス制御を透明かつ監査可能な形で管理する
- 拡張性: オープンソースであり、カスタムポリシー、テンプレート、スキルによる拡張が可能
アルファ段階ではあるものの、OpenShellは「AIエージェントの安全な実行環境」という重要な課題に対する、実用的かつ体系的なソリューションを提示している。NVIDIAの支援とオープンソースコミュニティの貢献により、AI開発のセキュリティスタンダードとなる可能性を秘めている。
参考情報
- OpenShell GitHubリポジトリ: https://github.com/NVIDIA/OpenShell
- OpenShell PyPIページ: https://pypi.org/project/openshell/
- Claude Code: https://github.com/anthropics/claude-code
- Claude Code ドキュメント: https://code.claude.com/docs/en/overview
- NVIDIA開発者ドキュメント: https://docs.nvidia.com/openshell/latest/
本記事は2026年4月時点の情報に基づいて執筆されています。OpenShellはアルファ段階のソフトウェアであり、機能や仕様は今後変更される可能性があります。最新の情報については、公式リポジトリとドキュメントを参照してください。