OpenShell

OpenShell 技術概要 — AIターミナルコーディングエージェントの全容

本記事は、NVIDIAが開発したオープンソースのAIエージェント実行環境「OpenShell」について、アーキテクチャ、セキュリティモデル、導入方法、活用パターン、そして類似ツールとの比較まで、包括的に解説する技術文書である。


目次

  1. はじめに — OpenShellとは何か
  2. アーキテクチャ概要
  3. インストールとセットアップ
  4. コア機能 — サンドボックス、ポリシー、クレデンシャル
  5. ツールシステムとケイパビリティ
  6. モデルサポートと構成
  7. ワークフローパターンとユースケース
  8. 類似ツールとの比較
  9. 拡張とカスタマイズ
  10. 実践的な使用例
  11. ベストプラクティス
  12. 制限事項と今後の方向性

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 サンドボックスのライフサイクル

サンドボックスは以下のライフサイクルステートを持つ。

  1. Creating(作成中): サンドボックスのコンテナが構築されている状態
  2. Running(実行中): エージェントがアクティブに動作している状態
  3. Paused(一時停止): サンドボックスが一時的に中断されている状態
  4. Stopped(停止): サンドボックスが正常に停止された状態
  5. Failed(障害): エラーにより停止した状態
  6. 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のクレデンシャル管理は、以下のセキュリティ原則に基づいている。

  1. 最小権限の原則: サンドボックスには、必要なクレデンシャルのみがインジェクションされる
  2. 一時的な露出: クレデンシャルは環境変数としてのみ存在し、ファイルシステムに永続化されない
  3. 分離: 異なるサンドボックス間でクレデンシャルは共有されない
  4. 監査: クレデンシャルの使用はゲートウェイレベルでログに記録される
  5. ローテーション対応: 環境変数を更新することで、クレデンシャルをローテーション可能

5. ツールシステムとケイパビリティ

5.1 ビルトインツール

OpenShellのサンドボックスには、開発に必要な基本的なツールがプリインストールされている。

カテゴリツール用途
ランタイムPython 3.12+, Node.js 20+コードの実行
バージョン管理Gitリポジトリの操作
パッケージ管理pip, npm, cargo依存関係の管理
ビルドツールmake, cmakeプロジェクトのビルド
テキスト処理grep, sed, awk, jqテキストの検索・変換
ネットワークcurl, wgetHTTP通信(ポリシーの範囲内)

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 CodeAnthropicClaude Sonnet 4, Claude Opus 4安定版
OpenCode複数対応各種モデル安定版
CodexOpenAIGPT-4.1, o3, o4-mini安定版
GitHub Copilot CLIGitHub/OpenAICopilotモデル安定版
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コーディングツールの比較を以下に示す。

特性OpenShellClaude CodeCursorGitHub Copilot CLIAiderCodex 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 ポリシーの設計原則

  1. 最小権限の原則: 必要最小限のアクセス権のみを付与する
  2. 明示的な拒否: デフォルトで全てを拒否し、必要なものだけを許可する
  3. レイヤード防御: 複数のポリシードメインを組み合わせて防御層を構築する
  4. 監査可能性: ポリシーの意図が明確で、レビューが容易であること

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 セキュリティのベストプラクティス

  1. 最小権限を徹底する: 開発に必要最小限のアクセスのみを許可する
  2. 機密ファイルを明示的に拒否する: .env、秘密鍵、認証情報ファイルは常にdenied_pathsに含める
  3. ネットワークアクセスをホワイトリスト方式で管理する: default_action: denyを基本とする
  4. 読み取り専用マウントを活用する: レビューや分析目的の場合は読み取り専用でマウント
  5. ポリシーをバージョン管理する: ポリシーファイルをGitリポジトリに含める

11.2 運用のベストプラクティス

  1. 標準ポリシーを策定する: チーム全体で使用する標準ポリシーを定義する
  2. テンプレートを活用する: よく使うサンドボックス構成をテンプレート化する
  3. ポリシーのレビュープロセスを確立する: セキュリティレビューを実施する
  4. 定期的な監査を実施する: サンドボックスの使用状況を定期的にレビューする

11.3 パフォーマンス最適化

  1. 適切なリソース割り当て: タスクの要件に基づいてメモリとCPUを割り当てる
  2. キャッシュの活用: パッケージマネージャーのキャッシュをマウントする
  3. 不要なサンドボックスは速やかに削除する: リソースの無駄遣いを低減する

12. 制限事項と今後の方向性

12.1 現在の制限事項

12.1.1 アルファステージの制約

OpenShellは2026年4月現在、アルファ段階にある。「シングルプレイヤーモード — 1人の開発者、1つの環境、1つのゲートウェイ」という制約がある。

  1. マルチテナント非対応: 複数の開発者が同一のゲートウェイを共有する構成は未サポート
  2. エンタープライズ機能の欠如: RBAC、監査ログのエクスポート、SSOは未実装
  3. クラスターモードの不在: 複数ノードにわたる分散デプロイメントは未対応
  4. 安定性の課題: アルファ版であるため、予期しないエラーが存在する可能性がある

12.1.2 技術的な制限

  1. Docker依存: Docker環境が必須
  2. リソースオーバーヘッド: K3sとコンテナ化によるオーバーヘッド
  3. GPUサポートの未成熟: NVIDIA GPUのみ、実験的機能
  4. Windowsサポートの限定: Linux環境が推奨
  5. macOSでのDocker Desktop必要: ライセンスやパフォーマンスの考慮が必要

12.2 セキュリティに関する考慮事項

  1. エスケープリスク: コンテナエスケープの脆弱性によるサンドボックス隔離の破壊リスク
  2. サイドチャネル攻撃: 共有リソースを介した攻撃の完全な防止は困難
  3. ポリシーの設定ミス: 不適切なポリシー設定による意図しないアクセスの許可
  4. サプライチェーンリスク: サンドボックス内ツールへのサプライチェーン攻撃はOpenShellの範囲外

12.3 今後の方向性

12.3.1 短期的なロードマップ

  1. マルチテナントサポート
  2. ポリシーの高度化(条件付きルール)
  3. 監査ログの強化
  4. 追加エージェントのサポート
  5. 安定性の向上(ベータ版へ)

12.3.2 中長期的な展望

  1. エンタープライズ機能(RBAC、SSO、コンプライアンスレポート)
  2. クラウドネイティブデプロイメント
  3. AIガバナンスの統合(使用量追跡、コスト管理)
  4. マルチクラウド対応
  5. オブザーバビリティ(トレーシング、メトリクス)

まとめ

OpenShellは、AIコーディングエージェントの時代における重要なインフラストラクチャツールである。以下の核心的な価値を提供する。

  1. 安全性: サンドボックス化と多層ポリシーにより、AIエージェントの安全な実行を保証する
  2. 柔軟性: 複数のエージェントとモデルをサポートし、開発者の選択の自由を維持する
  3. 制御性: 宣言的ポリシーにより、アクセス制御を透明かつ監査可能な形で管理する
  4. 拡張性: オープンソースであり、カスタムポリシー、テンプレート、スキルによる拡張が可能

アルファ段階ではあるものの、OpenShellは「AIエージェントの安全な実行環境」という重要な課題に対する、実用的かつ体系的なソリューションを提示している。NVIDIAの支援とオープンソースコミュニティの貢献により、AI開発のセキュリティスタンダードとなる可能性を秘めている。


参考情報


本記事は2026年4月時点の情報に基づいて執筆されています。OpenShellはアルファ段階のソフトウェアであり、機能や仕様は今後変更される可能性があります。最新の情報については、公式リポジトリとドキュメントを参照してください。