Claude CodeやCodexのようなコーディングエージェントは便利ですが、ホームディレクトリを破壊したりといった怖い話も聞きますよね。今回はCanonicalがリリースしたWorkshopというツールでサンドボックス環境を構築し、ホスト環境を守りながらコーディングエージェントを動作させる方法を紹介します。
Workshopとは
Workshopとは、Ubuntuを開発しているCanonical社がリリースした、開発環境のサンドボックスをUbuntu等の環境に作成するツールです。
workshopコマンドを実行するとサンドボックスを作成でき、そのサンドボックス内でコーディングエージェントを動作させることで、コーディングエージェントの非決定的な挙動からホスト側OSへの影響を抑えられます。
また、環境の設定はYAMLによって定義できるため、Gitレポジトリ等に設定ファイルを配置しておけば、各開発者のPCで同じ環境を作成できます。
Workshopの特徴
設定ファイルで環境を作るだけなら、例えばDockerでもいいのではないかと思われる方もいると思います。Docker等と比較した場合のWorkshopの大きな特徴は、システムコンテナで動作することです。
Dockerに代表されるようなアプリケーションコンテナは一般に、Node.
このOS環境が一式入っているという特徴により、ユーザーがサンドボックス内の環境構築を行いやすく、作業もしやすい環境を作れます。開発環境では、言語Aと言語Bがどちらも必要だったり、様々なツールを入れておいたりしたいものですが、この特徴により複数のライブラリやツールをインストールしやすいです。また、複数のライブラリやツールを入れやすいということは、マルチレポジトリで動作するようなアプリケーションの環境構築にも向いています。
もちろん、アプリケーションコンテナの環境にコーディングエージェントをインストールすることもできますが、Dockerfileのような設定ファイルが複雑になりがちです。
また、Workshopの環境はコンテナでありつつも、Dockerコンテナも簡単に動作させられるため、既存のDockerを利用した環境から移行しやすいのもポイントです。
Workshopのインストール
まず前提の環境ですが、ドキュメント上ではUbuntuの他、snap-enabled Linux distributionとWSL2でも利用可能となっています。筆者はUbuntu 24.
WorkshopはLXD 6.
$ sudo snap install --channel=6/stable lxd
あるいは、更新が必要な場合は以下のとおり実行します。
$ sudo snap refresh --channel=6/stable lxd
その後、Workshopをインストールします。
$ sudo snap install --classic workshop
これでインストールは完了です。
macOSのようなUbuntuでない環境でも、Multipassを利用し、仮想マシンを作ることで構築できます。Multipassについては2019年の記事で紹介していますので、こちらを参照ください。筆者もMultipassでセットアップされたUbuntu上でWorkshopを利用しています。
プロジェクトディレクトリとworkshop定義の作成
Workshopでは、各サンドボックスのことを
workshop定義ファイルを作成するには、適当なディレクトリworkshop initコマンドを実行します。
以下のコマンド例では、devという名前のworkshopを、Ubuntu 24.
$ workshop init dev --sdks node --base ubuntu@24.04 "dev" workshop created at /home/yoichi/proj/workshop-demo1/.workshop/dev.yaml
このコマンドを実行すると、.workshop/に以下のようなファイルが出力されます。
name: dev base: ubuntu@24.04 sdks: - name: node
これでworkshop定義ファイルができました。
このあとworkshop launchコマンドを実行すると起動できます。定義がひとつだけの場合は、名前を指定しなくてもそのひとつを探してくれます。
$ workshop launch "dev" launched $ workshop list WORKSHOP STATUS NOTES dev Ready -
workshopが立ち上がったら、workshop shellコマンドを実行すると、サンドボックス環境内でシェルが起動します。
$ workshop shell workshop@dev:/project$ node --version v24.11.0
サンドボックス環境内では、この.workshopがあるディレクトリが/projectに自動的にマウントされるため、このパスを介してファイルにアクセスできます。
以下は、workshop内でb.を作成し、ホスト側からも参照できることを示した例です。
user@myhost:~/shops/ws-sample$ ls -l 合計 4 -rw-rw-r-- 1 user user 4 7月 19 21:48 a.txt ←元々はa.txtのみ存在している user@myhost:~/shops/ws-sample$ workshop shell workshop@dev:/project$ echo foo > b.txt ←workshop内でファイルを書き込む workshop@dev:/project$ exit exit user@myhost:~/shops/ws-sample$ ls -l 合計 8 -rw-rw-r-- 1 user user 4 7月 19 21:48 a.txt -rw-rw-r-- 1 user user 4 7月 19 21:49 b.txt ←ホストに戻ってきても見えている
/projectでアクセスできるということは、プロジェクトディレクトリは保護されないということを意味します。このディレクトリに入るファイル群は、Git管理やバックアップによって保護することをおすすめします。
SDKの追加
次にソフトウェアのインストールについてです。できた環境もUbuntuであるため、もちろんシェルに入ってaptコマンドでもインストールできます。しかし、Workshopにはそれよりも簡単な
Go言語の追加
まずはGo言語のコンパイラのインストールを例に説明します。
インストールしたいSDKは、sdk findコマンド及びsdk infoコマンドによって探せます。
$ sdk find go NAME VERSION PUBLISHER SUMMARY agy 1.1.2 Rajan Patel Google Antigravity CLI wrapper SDK for Canonical Workshop flutter 3.41.6 Canonical✓ Google's UI toolkit for multi-platform apps go 1.26.3 Canonical✓ The Go programming language $ sdk info go name: go publisher: Canonical✓ license: BSD-3-Clause website: https://github.com/canonical/go-sdk This SDK provides the official Go toolchain for efficient Go development. Module downloads are persisted on the host to speed up builds across workshop updates, and Go environment settings are preserved between workshop updates. (中略) CHANNELS CHANNEL VERSION BUILD BASE REV SIZE latest/stable 1.26.3 2026-05-20 all 18 56.07MB latest/candidate ↑ latest/beta ↑ latest/edge ↑ 1.26/stable 1.26.4 2026-06-22 all 48 56.07MB 1.26/candidate ↑ 1.26/beta ↑ 1.26/edge ↑ (略)
goというnameのSDKが見つかりました。1.といったバージョン別のchannelがあることもわかります。
ここまでわかったら、設定ファイルを以下のように書き換えます。
name: dev
base: ubuntu@24.04
sdks:
- name: node
- name: go
channel: 1.26
あとは、workshop refreshコマンドによって設定ファイルのとおりに環境を再構成できます。
$ workshop refresh
以下、毎回の操作となるためworkshop refreshは省略します。
コーディングエージェントの追加
Claude CodeやCodexもSDKとしてインストールできます。
同じようにsdk findで検索し、sdksに追加すればよいです。
name: dev
base: ubuntu@24.04
sdks:
- name: claude-code
workshop shellでシェルから起動しても良いですが、workshop execでホスト側から直接起動してみてもよいでしょう。
$ workshop exec -- claude --version 2.1.197 (Claude Code)
Dockerの追加
DockerもSDKの追加で利用できます。いわゆるDocker-in-Dockerの設定等を意識することはなく、非常に簡単です。
name: dev
base: ubuntu@24.04
sdks:
- name: docker-ce
$ workshop shell workshop@dev:/project$ docker run busybox echo Hello Hello workshop@dev:/project$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2e0c49861ba busybox "echo Hello" 2 seconds ago Exited (0) 1 second ago frosty_lewin
VS Code接続の追加
vscode-remote SDKを利用すると、VS Code Remote Development Extension PackがインストールされたVS Codeから接続できます。
name: dev
base: ubuntu@24.04
sdks:
- name: vscode-remote
SDKをインストール後、workshop infoで接続するホスト名を調べます。
$ workshop info name: dev base: ubuntu@24.04 project: ~/shops/ws-sample hostname: dev.ws-sample.wp ←接続するホスト名 (略)
ホスト名がわかったら、VS Codeを起動し、画面左下の
このホスト名はLXDとdnsmasqによって名前解決されるため、デフォルトでは、ホスト外からは名前解決できずネットワーク的にも到達できないことに注意してください。
actionを追加する
workshop内でよく使う操作は事前にactionsという形で定義できます。
YAMLに以下のように記述し、workshop run -- lintという形で実行します。
name: dev
base: ubuntu@24.04
sdks:
- name: node
actions:
lint: |
npm run lint
$ workshop run -- lint
筆者としては、Workshopはあくまで環境を提供するものであるため、actionsに記述するのは、例えば初期の準備などworkshopのための操作や、プロジェクト内のスクリプトやタスクランナーへの窓口にとどめるのをおすすめします。
タスクランナーへの窓口とするには、引数を与える形にするのが便利です。引数は、"$@"で利用できます。
name: dev
base: ubuntu@24.04
sdks:
- name: node
actions:
npm: |
npm "$@"
$ workshop run -- npm install
workshopを停止する/削除する
workshopが不要になった場合、workshop stopで停止、workshop removeで削除します。
$ workshop stop "dev" stopped
$ workshop remove "dev" removed
なお、設定のYAMLは当然残っているので、workshop remove後でも、workshop launchで起動すれば再び利用できます。
$ workshop launch "dev" launched
プロジェクト内SDKで環境をカスタマイズする
少し発展的なこととして、SDKを作ることもできます。SDKは配布するほか、プロジェクト内SDK
例えば、2026年7月時点でRubyのSDKはないのですが、プロジェクト内SDKを作成することで、他のSDK同様にworkshop launch時点から使えるようになります。
ここではプロジェクト内SDKを簡易に作成する手順を述べます。詳しいSDKの作成手順については、WorkshopのSketch SDKs tutorialも参照ください。
Rubyを利用可能にするSDKの作成
プロジェクト内SDKを作成するには、まずSDKの名前を決め、.workshop/{SDKの名前}/sdk.を記述します。
ここではSDKの名前をrubyとし、.workshop/に以下の内容を記述します。
name: ruby
version: "0.1"
summary: Ruby for local development
description: |
Project-specific Ruby
さらにsetup-base hookを追加し、SDKのセットアップの際にapt-getを使ってRubyをインストールします。
今回の例では、.workshop/に以下の内容を記述します。
#!/bin/sh
set -eu
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
rake \
ruby \
ruby-dev \
ruby-bundler
これでプロジェクト内SDKが定義できたので、.workshop/にproject-の接頭辞をつけた形
name: dev
base: ubuntu@24.04
sdks:
- name: node
- name: project-ruby
このあと、他のSDK追加と同様にworkshop refreshによってRubyが利用可能になります。
このように、コーディングエージェントのためのサンドボックスを、再現可能な形で動作させられます。Workshop自体のセットアップもお手軽なのでぜひ試してみてください。