はじめに
IBM BobのCLIツールであるBobshellでは、コマンド実行を隔離環境で行うサンドボックス機能が提供されています。本記事では、MacOS環境でBobshellのサンドボックス機能を実際に動かした検証記録を紹介します。
Bobshellを使い始めたばかりの方や、サンドボックス機能を有効化するための設定などを具体的に知りたい方の参考になれば幸いです。
Bobshellとは
Bobshell(Bob Shell)は、IBM BobのAI機能をコマンドラインで利用できるツールです。ターミナル上でAI支援を受けながら、スクリプト自動化、コマンド実行、ドキュメント生成、トラブルシューティングなどを行えます。
Bobshellのサンドボックス機能とは
Bobshellのサンドボックス機能は、ツール実行(シェルコマンドやファイル操作など)を制限された環境で実行する仕組みです。これにより、誤ったプロンプトや予期しない動作によってホストシステムに影響を与えるリスクを軽減できます。
AIコーディングエージェントは強力である反面、意図しないコマンド実行や機密情報へのアクセスが発生する可能性がありますが、サンドボックス化により、こうしたリスクを最小限に抑えながら安全にBobshellのAI機能を活用できます。
サンドボックス化の2つの方法
MacOS環境では、以下の2つの方式でサンドボックス化を実現できます。
1. macOS Seatbelt方式
macOSのsandbox-execコマンドを使用する方式です。macOS標準の機能を利用するため、追加のソフトウェアは不要です。
- メリット: 追加ソフトウェア不要、軽量
- デメリット: macOS専用、制約の細かい調整が必要な場合がある
2. コンテナベース方式
コンテナ実行環境であるDockerまたはPodmanを使用してコンテナ内でツールを実行する方式です。
MacOS以外の環境でも使用することができるため、クロスプラットフォーム対応が可能です。
- メリット: クロスプラットフォーム対応、隔離レベルが高い
- デメリット: DockerまたはPodmanのインストールが必要
デフォルトでは、MacOS環境でbob --sandbox(またはbob -s)を実行すると、Seatbelt方式が優先的に選択されます。コンテナベース方式を使用したい場合は、環境変数BOB_SHELL_SANDBOX=docker/podmanを設定する必要があります。
サンドボックス機能の動作確認(コンテナベース)
今回は主にコンテナベース方式でサンドボックス機能を検証してみました。
使用した環境
- OS: macOS Sequoia 15.7.4
- Bobshell: 1.0.1
- Rancher Desktop: 1.22
コンテナ実行環境には、Rancher Desktopのdockerdを利用しました。
事前設定
環境変数の設定
コンテナベースのサンドボックスを使用するため、以下の環境変数を設定します。
% export BOB_SHELL_SANDBOX=docker
Rancher Desktopでの/optマウント設定
Bobshellのコンテナベースサンドボックスでは、/opt/homebrew配下のディレクトリをコンテナにマウントする必要があります。しかし、Rancher Desktop(macOS)では、デフォルトで/opt配下がコンテナのbind mountソースとして許可されていません。
この問題を解決するため、override.yamlを作成して明示的にマウント許可を設定しました。
% mkdir -p "$HOME/Library/Application Support/rancher-desktop/lima/_config"
% nano "$HOME/Library/Application Support/rancher-desktop/lima/_config/override.yaml"
override.yamlの内容:
mounts:
- location: /opt/homebrew
writable: true
設定後、Rancher Desktopを再起動することで、/opt/homebrew配下をコンテナにマウントできるようになります。
Bobshellサンドボックスの起動
通常起動の場合
まず、通常モードでBobshellを起動してみます。
% bob
通常モードでは、起動時に Sandbox mode Disabled のメッセージが表示されます 。
サンドボックス起動の場合
次に、サンドボックスモードで起動します。
% bob -s
コンテナベース方式のサンドボックスでは起動時のメッセージにnode-25-trixie-0と表示されていることが確認できます。
これはサンドボックスとして実行されているコンテナイメージnode:25-trixieに由来するようです。
環境変数の隔離確認
サンドボックスが正しく機能しているかを確認するため、環境変数の隔離状況をチェックしました。
まず環境変数の隔離を確認するため、Bobshellの起動前にホスト側でテスト用の環境変数を設定しました。
% export TEST_API_KEY=xxxxxxxxxxxx
Bobshell起動後、以下のように自然言語で指示を出します。
> 変数名に'TEST_API_KEY'を含む環境変数をリストして
通常モードの場合
通常モードでは、ホスト側で設定したTEST_API_KEY環境変数が表示されます。
サンドボックスモード(コンテナベース)の場合
サンドボックスモードでは、TEST_API_KEY環境変数が見つからないことが確認できます。これは、コンテナ内の隔離された環境で実行されているため、ホスト側の環境変数にアクセスできないことを示しています。
この結果から、サンドボックス機能が正しく動作し、環境変数が隔離されていることが確認できました。
(参考)macOS Seatbeltモードの場合
macOS Seatbelt方式でも同様の検証を行いました。
環境変数BOB_SHELL_SANDBOXを設定せずにbob -sを実行すると、macOS Seatbeltモードで起動します。
% unset BOB_SHELL_SANDBOX
% bob -s
起動メッセージにmacOS Seatbeltと表示されます。
環境変数の確認もやっておきます。
Seatbeltモードでは、コンテナベースとは異なり、ホスト側で設定した環境変数が見えています。より厳密な隔離が必要な場合は、コンテナベース方式の使用を検討してください。
まとめ
本記事では、MacOS環境でBobshellのサンドボックス機能を実際に動かし、以下の点を確認しました。
- MacOSではmacOS Seatbeltとコンテナベースの2つのサンドボックス方式が利用可能
- コンテナベース方式では、コンテナ環境に対する
/opt配下のマウント設定が必要 - サンドボックスにより、ホストから隔離された環境でBobshellを利用することが可能
サンドボックス機能を活用することで、Bobshellをより安全に利用できます。特に、機密情報を扱う環境や、予期しないコマンド実行のリスクを減らしたい場合に有効です。
今後Bobshellを使用する際は、用途に応じてサンドボックス機能の利用を検討してみてください。





