はじめに
Claude Code・Cursor・OpenCode・Pi など、AIコーディングエージェントの多くはNode.js/TypeScript製で、常駐時のメモリ使用量が数百MB規模になることが珍しくありません。そんな中、Rustで書かれたミニマルなコーディングエージェント Zerostack が「RAM平均16MB・ピーク24MB」という具体的な数値を公式README で掲げて話題になっています1。
この記事では、公式の主張を鵜呑みにせず、実際に cargo install でビルドしてバイナリを動かし、数値の裏取りをしたレポートです。
この記事で学べること
- Zerostackの設計思想(Unix哲学・Rustによる低フットプリント)
-
cargo installでの実際のビルド手順とハマりどころ - 5段階の権限モードの使い分け
- 筆者が実際にビルド・起動して確認できたこと
対象読者
- Claude Code・Cursor・OpenCode等のNode.js系エージェントのメモリ消費が気になる方
- Rust製CLIツールに関心がある方
- 常駐エージェントをCI・サーバーに組み込みたい方
TL;DR
- Zerostackは pi・OpenCode に影響を受けたRust製ミニマルコーディングエージェント。GitHub 1.4k stars・GPL-3.0ライセンス1
- 公式主張値: ~17k LoC・バイナリ26MB・RAM平均約16MB/ピーク約24MB(JS系エージェントの平均約300MB/ピーク約700MBと対比)1
-
筆者が実際に
cargo installしてビルドしたところ、バイナリは約14.5MB(15,221,328バイト)、--print-config実行時のピークRSSは約9.7MB(9,932KB)だった(後述) -
cargo install zerostackでインストール可能。ACP対応版は--features acp、記憶機能付きは--features memoryを追加2 - 権限モードは5段階(restrictive/readonly/guarded/standard/yolo)で、CI組み込み時は
readonlyやguardedが安全2 - OpenRouter・OpenAI・Anthropic・Gemini・Ollamaに対応するマルチプロバイダ設計1
Zerostackとは何か
ZerostackはRustで書かれたミニマルなコーディングエージェントで、公式READMEでは「pi と opencode に影響を受けた」と説明されています1。最大の特徴は、Unix哲学に沿った「一つのことをうまくやる」設計と、それを支えるリソース効率の良さです。
GitHubリポジトリ(gi-dellav/zerostack)は本稿執筆時点で1.4kスター・109フォークを獲得しており、ライセンスはGPL-3.0です1。直近リリースはv1.6.0「Bug-busters」で、バグ修正とユーザー体験向上に焦点を当てた更新が行われています3。
対応するLLMプロバイダーはOpenRouter(デフォルト)・OpenAI互換・Anthropic・Gemini・Ollama、そしてカスタムプロバイダーです1。MCP(Model Context Protocol)サーバー対応・Git worktree統合・ACP(Agent Client Protocol)対応・サブエージェントによる並列実行など、機能面はNode.js系の主要エージェントと遜色ありません2。
ハンズオン: 実際にビルドしてみた
インストール
Rust/Cargo環境があれば、以下のコマンド一つでインストールできます。
cargo install zerostack --locked
ACP(Agent Client Protocol)サポートやセッション横断の記憶機能が必要な場合は、featureフラグを追加します2。
cargo install zerostack --features acp
cargo install zerostack --features memory
サンドボックス機能を使う場合はDebian/Ubuntu系で bubblewrap パッケージが別途必要です2。
実際にビルドしてみて分かったこと
筆者の環境(クラウドの汎用Linuxコンテナ、事前キャッシュなし)で cargo install zerostack --locked を実行したところ、依存クレート(rig-core など、LLM呼び出しの抽象化に使われるクレート)を含めてソースからのフルビルドとなり、完了まで約3分33秒を要しました。README に記載されている「26MBのバイナリ」「16MBのRAM」という軽さは 実行時 の特性であり、初回ビルド自体は一般的なRustプロジェクト同様、依存クレート数に比例して相応の時間がかかる点は留意が必要です。バイナリ配布(Homebrew・シェルスクリプトインストーラ)を使えば、この待ち時間は発生しません2。
実測結果: README の主張値とのズレ
ビルド後、実際に生成されたバイナリとその実行時メモリを測定してみました。
$ ls -la ~/.cargo/bin/zerostack
-rwxr-xr-x 1 root root 15221328 Jul 2 12:39 zerostack # 約14.5MB
zerostack --print-config(設定を表示して即終了する軽量コマンド)実行時のピークRSSをPythonの resource.getrusage() で計測したところ、以下の結果でした。
maxrss(KB): 9932 # 約9.7MB
README公式値(バイナリ26MB・RAM平均16MB)に対し、筆者の環境でのビルドではバイナリが約14.5MBと軽く、--print-config 実行時のピークRSSも約9.7MBに収まりました。ビルド環境(Rustツールチェインのバージョン・有効化したfeatureフラグ)によって数値が変動する可能性はありますが、「JS系エージェントよりも一桁小さい」という方向性自体は、機能フラグなしのデフォルトビルドで実際に確認できました。ただし --print-config は実際のLLM呼び出しやツール実行を伴わない最小コマンドのため、フル機能のセッション(サブエージェント並列実行時など)ではメモリ使用量が増える可能性がある点は留意してください。
権限モード
Zerostackはツールの実行権限を5段階で制御します2。
| モード | フラグ | 動作 |
|---|---|---|
| restrictive | -R |
全操作の確認を要求 |
| readonly | --read-only |
読み込み・検索・リスト表示のみ許可 |
| guarded | --guarded |
読み込みは許可、書き込みは確認 |
| standard(デフォルト) | なし | カレントディレクトリ内のパスツールを許可、安全なbashは自動許可 |
| yolo | --yolo |
ほぼ全て許可、破壊的操作のみ確認 |
CI・サーバーに常駐させる用途であれば readonly や guarded から始め、信頼できるタスクにだけ standard を使う運用が安全です。
著者視点の発見ポイント
公式READMEの「JS系エージェントの1/20程度のRAM使用量」という主張は、実際に自分でビルドして数値を取ってみるまでは「マーケティング用の理想値ではないか」と半信半疑でした。しかし cargo install からのフルビルド→バイナリサイズ計測→resource.getrusage() でのRSS計測という一連の検証で、主張の方向性自体は誇張ではなかった ことを確認できたのは収穫でした。むしろ筆者の環境ではREADMEの数値より軽い結果(バイナリ約14.5MB・RSS約9.7MB)が出ており、ビルド環境やRustのバージョンによる差の存在も実感しました。
一方で見えてきたのは、「軽さの代償はビルドの初期コスト」 という点です。Node.js系エージェントは npm install 一発(プリビルド済みパッケージ配布)で即座に使えるのに対し、Rust製ツールをソースからインストールする場合は依存クレートのコンパイルという別のコストが発生します(今回は3分33秒)。Homebrewやシェルスクリプトでのバイナリ配布が用意されているのは合理的な設計判断だと感じました。「常駐時の軽さ」と「導入の速さ」はトレードオフになりうるという、Rust製CLIツール全般に言える教訓が、Zerostackのハンズオンからも確認できました。
まとめ
- Zerostackは公式が「RAM平均16MB・ピーク24MB」と具体的数値で主張するRust製ミニマルコーディングエージェント
-
cargo install zerostackでソースビルド可能。バイナリ配布(Homebrew等)を使えばビルド時間は不要 - 5段階の権限モードでCI・サーバー常駐時の安全性を細かく制御できる
- Node.js系エージェントと比べた「軽さ」の代償はソースビルド時の初期コストにあり、用途に応じてインストール方法を選ぶのが実践的
参考リンク
- gi-dellav/zerostack — GitHub — スター数・ライセンス・機能一覧
- zerostack 公式ドキュメント — コマンド一覧・権限モード・インストール手順