起動200msのマイクロVM「smolvm」入門
Show HNで話題になったOSS「smolvm」(smol-machines/smolvm、Apache 2.0、Rust製)を触ってみたので、要点をまとめます。あわせて日本語解説サイトも公開しました。
解説サイト: https://smolvm.businesshub.trueone.co.jp/
smolvmとは
「コンテナのエルゴノミクスで本物のVMを扱う」CLIツールです。
- 起動 <200ms のマイクロVM(QEMUの15〜30秒、Kataの〜500msと比較して高速)
- ワークロードごとに専用カーネルが立つ真のハードウェア分離(コンテナのnamespace分離とは別物)
- macOS(Hypervisor.framework)/ Linux(KVM)/ Windows(WHP)対応
- OCIコンテナイメージをそのままrootfsとして利用(Dockerデーモン不要)
- VMの状態を単一ファイル
.smolmachineにパックして配布可能
インストール
curl -sSL https://smolmachines.com/install.sh | bash
基本操作
一時VMでコマンド実行(終了後に自動破棄)
smolvm machine run --net --image alpine -- sh -c "echo 'Hello from VM'"
smolvm machine run --net -it --image alpine -- /bin/sh # 対話シェル
永続マシン
smolvm machine create --net --name devbox
smolvm machine exec --name devbox -it -- /bin/sh
smolvm machine stop --name devbox # インストール済みパッケージは維持される
ポータブル実行ファイル化
smolvm pack create --image python:3.12-alpine -o ./python312
./python312 run -- python3 --version
依存がすべて焼き込まれた単一バイナリになるので、「インストール手順書」を配る代わりに実行ファイルを1個渡せば済みます。
Smolfile(TOML)で環境を宣言
image = "python:3.12-alpine"
net = true
[network]
allow_hosts = ["api.stripe.com"]
[dev]
init = ["pip install -r requirements.txt"]
volumes = ["./src:/app"]
セキュリティ面が本命
個人的に一番の推しポイントです。
-
ネットワークはデフォルト遮断。
--netで有効化しても--allow-hostでegress許可リストを強制できる -
SSH鍵がゲストに入らない。
--ssh-agentでエージェント転送だけを許可し、秘密鍵の分離をハイパーバイザ境界で保証 - AI生成コードの実行サンドボックスとして、ホストのファイル・認証情報・ネットワークをハードウェア境界で守れる
LLMエージェントに rm -rf されても泣かないための現実解と言えます。
類似技術との位置づけ
| 分離単位 | 起動 | macOSネイティブ | 可搬成果物 | |
|---|---|---|---|---|
| smolvm | ワークロード毎にVM | <200ms | ✅ | .smolmachine |
| コンテナ | namespace(カーネル共有) | ~100ms | ❌(Docker VM経由) | イメージ(要デーモン) |
| Firecracker | VM | <125ms | ❌ | ❌ |
| Kata Containers | コンテナ毎にVM | ~500ms | ❌ | ❌ |
| QEMU | VM | 15〜30s | ✅ | ❌ |
Firecrackerと同じマイクロVM系ですが、macOS対応と単一ファイル配布が差別化点です。ローカル開発〜CI〜本番サンドボックスを同じツールで通せます。
注意点
- ネットワークはTCP/UDPのみ(ICMP不可、pingは通らない)
- ボリュームマウントはディレクトリ単位のみ
- WindowsはGPU・fork・スナップショット未対応
まとめ
「コンテナでは分離が不安、VMでは重い」の間を正確に埋めるツールです。特にAIエージェント基盤やCI、エアギャップ環境で刺さると思います。
アーキテクチャの内部(libkrun、virtio balloon、Venus GPU等)はZennの記事と解説サイトに書きました。