インストール
smolvmの導入方法は2通りあります。最も簡単なのは公式インストールスクリプトの実行で、macOS・Linuxのどちらでも1行で完了します。もう1つは、GitHub Releasesからプラットフォーム別のバイナリを直接ダウンロードする方法で、社内ミラーやエアギャップ環境への配布、バージョン固定運用に適しています。
# 方法1: インストールスクリプト(推奨)
$ curl -sSL https://smolmachines.com/install.sh | bash
# 方法2: GitHub Releasesからバイナリを取得して配置
# https://github.com/smol-machines/smolvm/releases
# インストール確認
$ smolvm --version
smolvm 1.4.7
前提条件はハイパーバイザが利用可能であることのみです。macOSはHypervisor.framework(標準搭載)、LinuxはKVM(/dev/kvmへのアクセス権限)、WindowsはWHPの有効化が必要です。Dockerデーモンは不要である点は、コンテナランタイムとの大きな違いです。イメージの取得・展開はsmolvm自身が行います。
一時VM実行:machine run
最初に試すべきは、使い捨てVMを起動するmachine runです。指定したOCIイメージをrootfsとするマイクロVMが起動し、コマンドの実行が終わるとVMは自動的にクリーンアップされます。ホスト側に状態が残らないため、検証や信頼できないコードの実行に最適です。
# Alpine LinuxのVMを起動してコマンドを1つ実行(終了後に自動破棄)
$ smolvm machine run --net --image alpine -- sh -c "echo hello"
hello
# Python 3.12環境でスクリプトを検証
$ smolvm machine run --image python:3.12-alpine -- python3 --version
Python 3.12.x
ここで注目すべきは--netフラグです。smolvmのVMは既定でネットワークが無効であり、外部と通信させたい場合にのみ明示的に有効化します。さらに--allow-hostでegress許可リストを指定すれば、特定のホストとの通信だけを許可する運用も可能です(詳細はセキュリティ解説を参照)。安全側を既定とするこの設計は、サンドボックス用途を最初から想定したものです。
永続マシン管理:create / start / stop / exec
開発環境のように状態を保持したい場合は、名前付きの永続マシンを作成します。VM内にインストールしたパッケージや作成したファイルは、stopしてもstart後に維持されます。
# ネットワーク有効の永続マシンを作成
$ smolvm machine create --net --name myvm
# 起動 / 停止
$ smolvm machine start myvm
$ smolvm machine stop myvm
# 起動中のマシンで対話シェルを実行
$ smolvm machine exec --name myvm -it -- /bin/sh
/ #
永続マシンは「毎朝startして使い、終業時にstopする開発環境」のような使い方に向いています。コンテナと異なりVM全体が保存されるため、OSレベルの設定変更やカーネルモジュールに依存しないミドルウェア構成もそのまま維持されます。チームで同じ環境を配りたい場合は、Smolfileによる宣言的構成や、.smolmachine形式でのスナップショット配布と組み合わせると効果的です。
ネットワーク・GPU・リソースの主要オプション
基本操作を押さえたら、次はワークロードに合わせたオプション調整です。実務でよく使う主要オプションを整理します。
| オプション | 意味 | 既定値 |
|---|---|---|
| --net | ネットワークを有効化(TCP/UDPのみ、ICMP不可) | 無効 |
| --allow-host | egress通信を許可するホストを指定(許可リスト方式) | — |
| --gpu | virtio-gpu/VenusによるGPUアクセラレーションを有効化 | 無効 |
| --image | rootfsとして使うOCIイメージを指定 | — |
| -it | 対話端末を割り当て(execと組み合わせ) | — |
| vCPU / メモリ | リソース割り当て(弾性メモリで実消費分のみコミット) | 4 vCPU / 8GiB |
# GPUを有効化して機械学習ワークロードを実行
$ smolvm machine run --gpu --image my-ml-image -- python3 infer.py
# egress許可リスト付きでネットワークを有効化
$ smolvm machine run --net --allow-host pypi.org \
--image python:3.12-alpine -- pip install requests
リソース既定値の4 vCPU・8GiBは一見大きく感じられますが、アーキテクチャ解説で述べたとおり、virtio balloonの弾性メモリによりホストの実コミットは実消費分だけです。割り当てを気にして小さく絞るより、既定のまま多数のVMを起動する運用の方がsmolvmの設計に合っています。
運用上の注意点
導入初期につまずきやすいポイントを挙げておきます。
- ICMPは通らない: ネットワーク疎通確認に
pingは使えません。TCP/UDPベース(curl等)で確認してください。 - ボリューム共有はディレクトリ単位: 単一ファイルのマウントはできないため、共有したいファイルはディレクトリに入れて渡します。
- macOSの権限: 自前ビルドを使う場合はコード署名とentitlementsの設定が必要です。公式バイナリを使えば意識する必要はありません。
- Windowsの機能差: GPU・fork・スナップショットが未対応です。これらが必要な場合はmacOS/Linuxを利用してください。
next_step
CLIオプションが増えてきたら、構成をファイルに落とし込む段階です。次のSmolfileによる宣言的環境構築で、チームで共有可能な構成管理の方法を解説します。