Devvm.dev: プロジェクトごとに1つのVM
Devvm.dev: One VM for every project (devvm.dev)
要約
Devvm.devは、プロジェクトごとに分離されたサンドボックス環境を提供するツールです。各VMにはプロジェクト固有のツールチェーンが用意されており、開発者やコーディングエージェントがすぐにコーディングを開始できます。これにより、セキュリティリスクを低減し、開発環境のセットアップを簡素化します。
全文翻訳
プロジェクトごとに1つのVM
プロジェクトのツールチェーンを備えた分離されたサンドボックスで、あなたやコーディングエージェントがコーディングを開始できます。
あなたのマシンでは、devvmを~/webで実行し、~/.ssh、~/.aws、~/DocumentsはVMの外に置かれます。VMのシェル(プロンプトは(devvm)で始まります)で、claudeを実行します。エージェントはそこで、プロジェクトフォルダを読み書き可能でマウントし、エージェントのスキルと設定は読み取り専用でアクセスします。そのネットワークはあなたのマシン上のプロキシを経由し、トークンを追加して、許可リストが許可するものだけをインターネットに送信します。
あなたのマシン
~/web $
devvm × ~/.ssh × ~/.aws × ~/Documents
VM
(devvm) ~/web $
claude█
~/web (rw)
スキル (ro)
設定 (ro)
トークン
プロキシ
許可リスト
クイックスタート
1. プロジェクトに移動する
ターミナルを開き、任意のプロジェクトフォルダにcdします。
あなたのマシンのターミナルで、cd ~/some-projectと入力します。
あなたのマシン
~ $
cd ~/some-project█
2. devvmを実行する
devvmは、新しいVMが何を取得するかを表示します。確認して作成するか、カスタマイズします。
devvmと入力すると、フォルダの新しいVMが取得するもの(ツールチェーンノード、エージェントclaude、サイズ、ネットワークティアの許可リスト)が表示されます。「Customize it? [y/N]」と尋ねられるので、Enterキーを押してVMを作成します。
あなたのマシン
~/some-project $
devvm█
このフォルダの新しいVMは以下を取得します:
ツールチェーンノード
エージェント claude
サイズ: 4 CPU、8 GiBメモリ
ネットワークティア: 許可リスト
カスタマイズしますか? [y/N]
Enter
3. エージェントを開始する
devvmはVM内のシェルを開きます(プロンプトは(devvm)で始まります)。そこでエージェントを開始してください。
VMのシェル(プロンプトは(devvm)で始まります)で、claudeと入力します。
VM
(devvm) ~/some-project $
claude█
Claude Codeは、初回起動時にClaudeログインを必要とします。これはdevvm agent login claudeコマンドでVM内から実行され、あなたのマシンに保存されます(最初のVM)。次に同じフォルダでdevvmを実行すると、同じVMが開かれ、devvm toolsは既存のVMにエージェントを追加します。
サポートされているもの
ツールチェーン
devvmはプロジェクトのファイルが要求するツールチェーンを選択しますが、新しいVMをカスタマイズする際や--toolsで名前を指定する際に、さらに選択することもできます(ツールチェーン)。
package.jsonとpyproject.tomlを持つフォルダ~/webは、nodeとpythonを取得します。devvmはフォルダのファイルを読み取ります。
~/web
package.json
pyproject.toml
node
python
コーディングエージェント
Claude Code、Codex、opencodeはVM内で実行されます。新しいVMをカスタマイズする際、またはdevvm setupで新しいVMごとに選択できます(コーディングエージェント)。
VM内のターミナルは~/webでclaudeを実行します。claude、codex、opencodeがそこで利用可能です。
VM
~/web $
claude█
claude
codex
opencode
レイヤー
devvmはdocker、nix、desktopレイヤーを配布しており、これらは新しいVMをカスタマイズする際に選択できます。また、devvm layer newで独自のカスタムレイヤーを作成し、任意のVMに適用できます(レイヤー)。
イメージdocker+nixは、ベースの上にnixレイヤー、その上にdockerレイヤーです。docker、nix、desktopは組み込みレイヤーです。
docker+nix
nix
docker
base
docker
nix
desktop
devvmを使用する理由
- 開発者は、サプライチェーン攻撃、漏洩したシークレット、プロンプトインジェクション、不正なエージェントなど、日々攻撃に直面しています。
- サンドボックスは、攻撃の影響範囲をその内部に限定します。
- コードやエージェントをサンドボックスで実行すべきだとわかっていても、ほとんどのツールは設定やセットアップが難しく、正しく行うのが困難です。
devvmは適切なデフォルト設定で提供されるため、単一のコマンドでサンドボックスでのコーディングを開始できます。
devvmがない場合、プロンプトインジェクション、漏洩したシークレット、サプライチェーン攻撃、不正なエージェントが次々とマシンに到達し、それぞれが到達したものを侵害します:プロジェクト、~/web、次に~/.aws、~/.ssh、そして別のプロジェクト~/api。devvmを使用すると、プロジェクトはVM内にあり、同じ4つの攻撃はVMに到達します。それぞれがマシンに向かう経路はVMの境界で終了するため、~/.ssh、~/.aws、~/apiは無傷のままです。
devvmなし
あなたのマシン
プロンプトインジェクション
漏洩したシークレット
サプライチェーン
不正なエージェント
~/web
~/.aws
~/.ssh
~/api
devvmあり
あなたのマシン
VM
~/web
~/.ssh
~/.aws
~/api
プロンプトインジェクション
漏洩したシークレット
サプライチェーン
不正なエージェント
×
×
×
×
開発者向け、ゼロコンフィグ
- ベースイメージには、
oh-my-bash、fzf、zoxide(z)、tree、tldrなどのオプションの追加機能が含まれています。 - 各VMにはgitの名前とメールアドレスが設定されるため、VM内で行われたコミットはあなたまたはあなたのエージェントによって作成されます。
- ポートは自動的に転送されるため、VM内のポート
:5173での開発サーバーは、あなたのマシンのlocalhost:5173で開きます(ポート)。 devvm codeはRemote-SSH経由でVS CodeでVMを開きます(devvm code)。
VM devvm-webでは、npm run devが:5173で利用可能になり、あなたのマシンのブラウザでlocalhost:5173で開かれます。devvm codeはSSH経由でエディタでVMを開きます。VM内で行われたコミットは、あなたを作者として記録します。
あなたのマシン
localhost:5173▓▓▓▓ ░░░░░░░░
devvm code
SSH: devvm-web
←───ポート───────ssh────→
devvm-web❯
npm run dev
:5173で利用可能
❯
git commit
作者: あなた
❯█
分離されたサンドボックス
- VMはプロジェクトフォルダを同じパスでマウントします。あなたのエージェントの設定(devvm独自のストアから読み取り専用で取得)を除き、ホームフォルダの他のものにはアクセスできません(VMがアクセスできるもの)。
- 新しいVMはデフォルトで許可リストネットワークティアを取得するため、あなたのマシン上のプロキシを経由して、許可リスト内のホストにのみアクセスできます。より緩いティア(
internetまたはopen)や、より厳しいティア(none)を選択することも可能です。 - macOSでは、
devvmは.gitのフックと設定をロックするため、VMはあなたのマシンでgitが実行するものを変更できません(.git保護)。 --cloneを使用すると、VMは独自のレポのクローン上で動作するため、VM内のものはワーキングツリーや.gitに影響を与えず、その作業はあなたがフェッチするまでレポに反映されません。- どのサンドボックスもすべてのギャップを完全に閉じることができるわけではないため、攻撃ベクトルには残されたものがリストされており、安全を保つにはほとんどのギャップを閉じる習慣がリストされています。
あなたのマシンでは、~/.ssh、~/.aws、~/Documentsはマウントされません。プロジェクトフォルダ~/webのみがVMに読み書き可能でマウントされ、.gitはロックされます。VMのネットワークはあなたのマシン上のプロキシを経由し、許可リストが許可するものだけをインターネットに送信します。
あなたのマシン
× ~/.ssh
× ~/.aws
× ~/Documents
~/web
VM
~/web
(rw)
.git (ロック済み)
プロキシ
許可リスト
数秒で準備完了
- 最初のVMはベースイメージをビルドし、それ以降のVMはコピーであり、数秒で起動します(イメージ)。
devvmはツールチェーンの各バージョンを一度だけビルドして読み取り専用で共有するため、すべてのVMが同じコピーを使用します(共有ツール)。
ベースイメージは一度ビルドされます。各VM(devvm-web、devvm-api、devvm-cli)は、そのコピーであり、数秒で起動します。node、python、go、rust、claudeはそれらの間で読み取り専用で共有されます。
ベースイメージ
▓▓▓▓▓▓▓▓░▒
devvm-web ■ アップ
devvm-api ■ アップ
devvm-cli ■ アップ
node
python
go
rust
claude
(読み取り専用)
コーディングエージェントのために作られた
- エージェントはVM内で実行されるため、エージェントへの攻撃はそのサンドボックス内に留まります。エージェントはあなたの設定、スキル、MCPサーバーにアクセスできますが、履歴にはアクセスできません(コーディングエージェント)。
- 各ネットワークティアで、Claude CodeトークンやCodexログインなどのシークレットは、VMがプレースホルダーを取得し、devvmのプロキシがそれらをリクエストの送信時に実際のトークンに置き換えるため、あなたのマシン上に保持されます。
エージェントのスキルはVMに読み取り専用でマウントされ、設定とMCPサーバーはコピーされて、claude、codex、opencodeのために提供されます。あなたの履歴はあなたのマシン上に残ります。あなたのトークンもあなたのマシン上に残ります。VMはプレースホルダーを持ち、プロキシがAPIへの送信時にトークンを追加します。
あなたのマシン
スキル─────(ro)────→
設定──────(copy)───→
MCPサーバー──(copy)───→
履歴───────(残る)────×
トークン─────(残る)────×
プロキシ
↓
API
VM
claude
codex
opencode
░░░░░░░
あなたのものにする
- あなた自身のレイヤーは、
devvmがイメージにビルドするセットアップスクリプトです。devvm layer new mailpitで1つを開始し、devvm --layers mailpitでそれを含むVMを作成できます(あなた自身のレイヤー)。 devvm setup --layersは、あなたが選択したレイヤーをすべての新しいVMに提供するため、シェル設定、エイリアス、ドットファイルなどを、省略しない限り各VMが取得する独自のレイヤーに含めることができます(あなた自身の追加機能)。--fromは、Ubuntuの代わりにコンテナイメージ(例:node:24やチーム独自のイメージ)からベースイメージを開始します(コンテナイメージから開始)。- プロジェクトに
devcontainer.jsonがある場合、devvmはそのファイルのコンテナイメージ、ポート、環境、コマンドからVMをセットアップします(devcontainer.json)。
スタック:一番下にベースイメージがあり、その上にあなたの機能、ドットファイル、エイリアスがビルドされています。その上にあなたのレイヤーmailpitがあり、さらにその上にnode+mailpitで作成されたVMdevvm-webがあります。コンテナイメージnode:24は--fromでベースイメージを開始します。
コンテナイメージ
node:24
--from
devvm-web
node+mailpit
mailpit (あなた自身のレイヤー)
base
あなたの機能
ドットファイル
エイリアス
FAQ
何で動作しますか?
devvmはmacOSとLinuxで、arm64またはx86_64で動作します。Limaが必要です。LimaはmacOSでAppleのVirtualizationフレームワーク、LinuxでQEMUを使用してVMを実行します(バックエンド)。Homebrewはdevvmと一緒にLimaをインストールし、LinuxではLimaはQEMUと/dev/kvmへのアクセスも必要とします。インストールにはすべての要件がリストされており、既知の制限にはLinuxホストが欠けているもの(例: .git保護)がリストされています。
エージェントは私のマシンで実行されますか?
いいえ。エージェントはVMのシェルで開始されるため、VM内で実行され、あなたのマシンにインストールされることはありません。そこではVMがアクセスできるものしか見えません。
無料ですか?
はい。devvmはMITライセンスの下でオープンソースです。
サンドボックスでコーディングを開始する
devvmをインストールし、任意のプロジェクトフォルダでdevvmを実行します。