
2026/07/22 3:29
Show HN: Rust と Bevy で実装された自己運行型の宇宙経済シミュレーター
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
The Space Project は、Rust と Bevy を完全に使用して構築された高度なエージェント駆動型の宇宙経済シミュレーターであり、スクリプト化されたストーリーラインまたはプレイヤーの目的を備えていません。フレーム当たり約 10–20ms の効率的な動作で、125ms の予算内で動作しており、このシミュレーションには GOAP プランナーを搭載した 282 隻の船舶、時間経過に応じて自己修復および劣化する 93 の施設、感情に基づいて移動する人口、および various な天体を含む約 485 個の実在する自律エンティティが含まれています。アーキテクチャは 100,000 個を超えるエンティティへのスケーリングを目標としています。経済は 13 の商品に対するオーダブック市場によって統括され、配送、コウリエ、客室輸送、補助金、供給、乗員任務の 6 つの特定のタイプを含む堅牢な契約システムを採用しており、レピュテーションゲーティングと年齢上昇による支払いを含む完全なライフサイクルを備えています。船舶は行動ツリーを使用して最安値の計画を見つけることで、貿易、配送、探検を自律的に管理し、施設は採鉱から製造までの複雑な生産レシピを処理します。本プロジェクトは、単一のワークスペース内での 5 つの特定の Rust クレートからの成るアーキテクチャを採用しており、同期シミュレーションコアと Bevy レンダラーの間で統一された ECS ワールドを共有することで、外部スクリプティングや独立したサーバーインフラストラクチャ(ただし CI 用途のため headless モードは利用可能)を必要としない高度に効率的な単一バイナリ体験を実現しています。データは SQLite を使用して永続化され、各ティックでフラッシュされ、安定した宇宙状態のためにユニークなシードが設定されています。MIT ライセンスの下で公開されているこのモジュール化されたシステムは、ゲーム開発者と研究者に、SF の設定において創発的な経済システムを研究するための現実的な環境を提供します。
本文
The Space Project:自律航行する宇宙経済シミュレータ
The Space Project は、Rust と Bevy を使用して実装された、自動実行型の宇宙経済シミュレーションです。数百隻の自律航行船が貿易や採掘を行い、市場価格の変動や派閥の干渉により倒産するまでをシミュレートします。
🌌 プロジェクト概要
基本概念
- エージェント駆動型: スクリプトされたストーリーラインや固定的なプレイヤー目標は存在しません。
- 観測者としてのプレイ: 「経済が自分自身でどのように機能するか」を観察(またはデバッグ用 Admin モード)することが主目的です。
- ネイティブバイナリ: ランタイム依存関係は一切不要で、単一のバイナリとして動作します。
エージェントの自律性
各船舶は独自の**GOAP(Goal Oriented Action Planner)**プランナーを搭載し、以下の判断を自動で行います。
- 利益率の高い貿易ルートの追跡
- 配送契約への受諾
- 船坞への移動と改修依頼
- 士気低下回避のためのドック停泊
システムの動作原理
- 施設: 生産レシピを実行し、自己修復・レベルアップしますが、資金難になると放棄されます。
- 派閥: 課税を集め、補助金契約を募集します。
- 人口: 食料を消費し労働力を供給しますが、感情指数が急落すると荷物をまとめ去ります。
- 市場価格: 「カバレッジモデル」に基づき算出され、不足への緊急度乗数も考慮されています。固定価格はありません。
開発背景: 当初は Elixir/Phoenix(BEAM スケジューラ)を使用していましたが、Windows ゲーミング PC での不安定さからRustへ書き換えられました。シミュレーションとレンダリングは同一の ECS ワールドを共有するため、データ移動(マーシャル化)は一切不要です。
📊 現在の規模とパフォーマンス
| メトリック | 値 |
|---|---|
| エージェント数 | 約 485 (船舶 282, 施設 93, 人口 27, 派閥 8) |
| 天体数 | 60 |
| 1 シklus の予算時間 | 約 125ms |
| 平均サイクルレート (p50) | 約 10–20ms |
アーキテクチャはこれ以上の規模(10 万エージェント以上)を目指して設計されています。
🚀 今後の方向性:「何もない方向へ」
このプロジェクトはロードマップのあるゲームを目指すものではありません。むしろ、以下のような状態を目指しています。
- フォークと改造: 名前を変えたり、ゲーム機能を上乗せしたりして新しいものを生み出してください。
- エンジンとしての活用: 経済エンジンを別の用途に流用することを推奨します。
- 「私が作らなかったものは、あなたが作りましょう」
開発者は GitHub の Issue や PR を歓迎しますが、対応頻度は保証されません。プロジェクトの今後について詳しくは
CONTRIBUTING.md をご参照ください。
🖥️ システム機能一覧
| システム | 概要 |
|---|---|
| 船舶 AI (GOAP) | 前方志向プランナーが、貿易・給油・改修など全目標をスコアリングし、実行コスト最小の計画を作成します。飛行途中でも状況に応じて計画再計算が可能です。 |
| 経済 | 13 の物資に対し、「カバレッジモデル」と「不足緊急度乗数」に基づき動的に価格付けを行います。船舶が供給量を移動させます。 |
| 契約 | 配送・郵便・旅客輸送・補助金・補給・船員ミッションの 6 タイプ。公募→受諾→支払いのライフサイクルを完備し、評判ゲートや経過日数報酬を実装しています。 |
| 施設 | 錬金・製造・採掘などのレシピを実行。時間の経過で劣化しますがツールで修復可能です。ローカル市場から在庫補充され、慢性的な資金難時は放棄されます。 |
| 派閥 | メンバー施設の税を集め、不足への補助金を公募し、需要のない場所の建設を財源化します。相互関係を保持しています。 |
| 人口 | 食料・燃料消費、労働力生産を行います。ストレス下で契約を公募し、感情指数崩壊時には物理的に幸福なシステムへ移住します。 |
| 船員 | 飢餓・疲労・士気を統合し、派生タスクを実行。スキル習得や給与支払いを行い、士気崩壊防止ガードを備えています。 |
| 建設 | 慢性不足時に建設現場が生成され、貨物を蓄積することで実際の施設へ具現化します。 |
| 永続性 (Persistence) | 全データは SQLite に書き込まれ、前回のティックから正確に再開できます。ユニバース固有のシードにより、ネビュラやランドマークも安定します。 |
| 空間 LOD | 遠方の船舶は頻率低減処理され、フレーム予算をユーザーの注目領域へ集中させます。 |
詳細情報: ティックフェーズ順序、AI スタック、経済フィードバックループなどについては、
にマーマイア図付きで解説されています。docs/ARCHITECTURE.md
⌨️ すぐに始める
環境要件
- Rust ツールチェーン (stable 版) が必要です。
起動方法
メインメニューが表示された後、「Start」をクリックして新しい宇宙を作成します(名前指定可)。セーブデータは
<universe-name>.db 形式で保存されます。
# ローカルでの実行 (cargo run と同等) make run
各種コマンド一覧
| 目的 | コマンド |
|---|---|
| ウィンドウ化されたクライアント (デバッグ用) | |
| リリースビルド | → |
| ヘッドレスモード (CI/テスト用) | |
| 検証 (ビルド + テスト + clippy) | |
| スモークテスト | |
仕組み:
はシミュレーションを含む単一のプロセスです。ヘッドレスモードでは HTTP/WebSocket サーバー(sim_server ライブラリ)を内部で起動するため、別途サーバープロセスを用意する必要はありません。client_bevy
操作説明
| キー / 操作 | 動作 |
|---|---|
| レフトドラッグ | カメラ軌道変更 |
| ライトドラッグ / WASD | パン (移動) |
| スクロール | ズーム |
| 左クリック | 船舶/施設の選択 → データパネル表示 |
| 右クリック | コンテキストメニュー (詳細・追尾・視点切り替え・破棄) |
| Space キー | 一時停止 / 再開 |
| Esc キー | トップパネル閉じる / 選択クリア / PAUSE メニュー |
| P キー | PAUSE メニューを開く |
| F12 キー | スクリーンショット |
トップバーでの操作:
- パネル切り替え(船舶・市場・派閥・契約・イベントなど)
- 速度設定 (1× / 2× / 5× / 10×)
- 船舶/施設の生成
すべてのパネルは ECS ワールドをリアルタイムで読み取っています。船舶をクリックすると、クレジット数・乗組員・燃料・現在の目標・装備品などの詳細情報を確認できます。
🏗️ アーキテクチャと技術スタック
パッケージ構成
単一の Cargo ワークスペース内に以下の 5 つのパッケージが構成されています。
: 純粋なシミュレーションロジック(hecs ECS, GOAP, 経済システム)。非同期処理・IO なし、非常に簡単にテスト可能。sim_core
: SQLite 永続化(sqlx)を担うモジュール。sim_db
: HTTP/WebSocket ハンドラー。ヘッドレスモードで使用されるライブラリ。sim_server
: ヘッドレス/CI 向けの WebSocket ワイヤタイプ。sim_protocol
: バイナリ本体。Bevy 0.18 + egui を使用し、client_bevy
を埋め込みます。sim_core
誠実さを保つ 3 つの原則
- 純粋なロジック:
はsim_core
,tokio
,sqlx
をインポートしません。論理的検討と単体テストが容易です。axum - 真のソース:
がティック間の唯一の情報源です。排他的可変アクセスを使用し、エージェント別ロックを回避しています。hecs - 決定論的処理: クロスエンティティ影響はコマンドバッファ経由で行われ、フェーズ中の書き込み競合はありません。
使用技術スタック
- Rust (Edition 2021): 全体の実装言語
- Bevy 0.18: レンダラー、ECS 駆動ループ、カスタム WGSL シェーダー(惑星、コロナなど)
- hecs: シミュレーション独自の ECS(Bevy と分離)
- egui (via bevy_egui): インスペクタパネル用
- bevy_hanabi: GPU 粒子軌跡と爆発エフェクト
- sqlx + SQLite: ライブラリバンドル型の永続化機能
- axum + tokio: ヘッドレス用の HTTP/WebSocket ハーネス
注: もとの Godot クライアントは歴史の記念碑として残っていますが、現在は使用されていません。Bevy への移行によりソケット境界が完全に消去されています。
📦 ビルドとパッケージング
Makefile は cargo、rustup、codesign をラップします。
| コマンド | 説明 |
|---|---|
| ホスト OS に依存したリリースバイナリ |
| arm64 macOS ビルド (intel/universal も可) |
| Windows MSVC ビルド |
| Linux ホスト向けビルド |
パッケージングコマンド
- macOS:
(.appバンドル),make package-mac
(.dmgファイル)make dmg - Windows:
(.zip アーカイブ)make package-win - Linux:
(.tar.gz アーカイブ)make package-linux
版本管理はルートにある
のワークスペースバージョンに基づき、Makefile もこれを参照するため、パッケージ化されたビルドも常に整合性を保ちます。Cargo.toml
📜 ライセンスと謝辞
- ライセンス: MIT (自由に何でもして構いません)
- 著作権: © 2026 Kalcode (David Clausen)
Rust & Bevy を使って楽しく作成
By Kalcode & Claude
📍 Illinois(イリノイ州)にて制作