回路パターンが光る金属製ブリーフケース。VM環境を単一ファイルで持ち運ぶポータビリティを象徴するイメージ

packコマンド:環境を単一実行ファイルに

smolvmの3つ目のワークフローである「ポータブル成果物」の中核がpackコマンドです。pack createは、指定したOCIイメージとVMランタイムを丸ごと束ね、単一の実行ファイルとして書き出します。受け取った側は、smolvmのインストールもDockerも不要で、そのファイルを実行するだけでVM内のアプリケーションを起動できます。

terminal — pack
# Python 3.12環境を単一実行ファイル化
$ smolvm pack create --image python:3.12-alpine -o ./python312

# 生成されたファイルを実行(smolvm不要・依存ゼロ)
$ ./python312 run -- python3 --version
Python 3.12.x

これは「アプリケーションの配布」の考え方を変える機能です。従来、実行環境ごとアプリを配るにはコンテナレジストリとランタイムの整備が前提でした。packはその前提を取り払い、ファイルを渡すという最も原始的で確実な方法で、ハードウェア分離されたVM環境ごとアプリケーションを届けます。

OCIイメージ python:3.12-alpine等 pack create 単一実行ファイル VMランタイム+rootfs同梱 ./python312 社内ツール配布 CI / エアギャップ環境 顧客環境へのデモ提供 受け取り側にsmolvm・Docker等のインストールは一切不要
図1: pack createによる配布フロー

.smolmachine形式:状態ごと持ち運ぶスナップショット

packが「これから実行する環境」を配布するのに対し、.smolmachine形式は実行中の状態を含むVMスナップショットを単一ファイル化したものです。インストール済みのパッケージ、設定ファイル、作業途中のデータまで、VMの中身がそのまま1つのファイルに収まります。

受け取った側は、同じCPUアーキテクチャのホストであれば、依存関係のインストールなしにそのVMをそのまま実行できます。「環境構築手順書」をやり取りする代わりに、構築済みの環境そのものをファイル共有やアーティファクトストレージで受け渡す運用が可能になります。

dev-env.smolmachine rootfs(OCIイメージ由来) インストール済みパッケージ 設定ファイル・作業データ VM実行状態(スナップショット) コピー / 共有 同一アーキテクチャのホスト 依存ゼロでそのまま実行可能 異なるアーキテクチャ x86_64 ↔ arm64 間は非互換
図2: .smolmachineファイルの内容と可搬性の条件

唯一の制約はCPUアーキテクチャです。スナップショットにはネイティブな実行状態が含まれるため、x86_64で作成したファイルはx86_64ホストで、arm64で作成したファイルはarm64ホストで実行する必要があります。Apple Silicon標準の組織であればこの制約は実質問題になりませんが、混在環境ではアーキテクチャ別にスナップショットを用意する運用を設計してください。

[PR]
[PR]

配布シナリオ別の活用方法

開発環境のオンボーディング配布

ミドルウェアの構築や初期データ投入まで済ませたVMを.smolmachineで保存し、新規メンバーに渡します。従来数日かかっていた環境構築が、ファイルのダウンロードと起動だけで完了します。Smolfileが「レシピの共有」だとすれば、こちらは「完成品の共有」です。

エアギャップ環境・オフライン実行

インターネットに接続できない検証環境や規制産業の閉域網では、レジストリからのイメージ取得自体が困難です。packで生成した単一実行ファイルや.smolmachineをUSBメディアや内部ファイルサーバーで持ち込めば、外部依存なしにワークロードを実行できます。

CIアーティファクトとしての利用

ビルドパイプラインの成果物としてpackバイナリを生成すれば、テスト環境・ステージング・本番検証で「まったく同じ実行環境」を使い回せます。環境差異によるすり抜けを構造的に防げる点で、リリースエンジニアリングの品質向上に直結します。

SDK組み込みによる製品機能化

smolvmはSDKとしてアプリケーションに組み込むこともできるため、「ユーザーが持ち込んだコードを安全に実行する」機能を自社製品に内蔵する、といった発展的な使い方も視野に入ります。AIエージェント製品のコード実行機能などが典型例です(企業活用シナリオ参照)。

packと.smolmachineの使い分け

最後に、2つのポータブル形式の使い分けを整理します。

観点pack(単一実行ファイル).smolmachine(スナップショット)
含まれるものVMランタイム + イメージ(初期状態)VMの実行状態・データまるごと
受け手の前提完全に依存ゼロ(smolvm不要)smolvm + 同一CPUアーキテクチャ
主な用途ツール配布・デモ・CI成果物構築済み環境の共有・退避・複製
状態の扱い実行のたびに初期状態から開始保存時点の状態から再開
何を配布したいか? 単一ファイルで環境を渡したい 初期状態でよい 状態ごと引き継ぐ pack create 受け手は依存ゼロ / ツール配布・CI成果物 .smolmachine 同一アーキテクチャ必須 / 構築済み環境の共有
図3: 配布形式の選択フロー

「初期状態のクリーンな環境を広く配るならpack、作り込んだ状態を正確に引き継ぐなら.smolmachine」というのが基本方針です。いずれも単一ファイルで完結するため、既存のファイル配布インフラ(社内ストレージ、アーティファクトリポジトリ等)にそのまま乗せられることが、運用面での大きな利点となります。

[PR]
[PR]