このガイドでは、NetHack Rust + WASM プロジェクトをローカル環境でセットアップして実行する手順を説明します。
| 項目 | 最小バージョン |
|---|---|
| Rust | 1.70.0 |
| Cargo | 1.70.0 |
| C コンパイラ | GCC 9 / Clang 10 / MSVC 2019 |
| Python | 3.8(オプション、WASM ビルド用) |
| Git | 2.0 |
sudo apt-get update
sudo apt-get install -y \
build-essential \
pkg-config \
libncurses-dev \
liblua5.4-dev \
git
# Homebrew を使用
brew install lua ncurses pkg-config
# Rust toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Visual Studio Build Tools をインストール
# https://visualstudio.microsoft.com/downloads/
# Rust (msvc toolchain)
curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Lua development files
# https://luabinaries.sourceforge.net/ からダウンロード
git clone https://github.com/oosawak/NetHack.git
cd NetHack
git checkout master
# Rust をインストール(未インストール時)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 最新に更新
rustup update
# 安定版チャネル確認
rustc --version
# クレートの確認
cargo metadata --format-version 1 | grep -E '"name"'
# ワークスペース内のクレート一覧
cargo metadata --format-version 1 --no-deps | jq '.workspace_members'
# デバッグビルド(開発時)
cargo build --workspace
# リリースビルド(本番)
cargo build --release --workspace
# 特定クレートのみビルド
cargo build -p nethack-sys
cargo build -p nethack-core
# 生成されたバイナリの確認
ls -lh target/debug/
ls -lh target/release/
# 依存関係の確認
cargo tree --all
# 全テスト実行
cargo test --workspace
# 詳細出力付き
cargo test --workspace -- --nocapture
# nethack-core のテストのみ
cargo test -p nethack-core
期待される出力:
running 6 tests
test camera::tests::test_camera_creation ... ok
test camera::tests::test_camera_follow ... ok
test camera::tests::test_camera_switch ... ok
test camera::tests::test_world_creation ... ok
test camera::tests::test_player_movement ... ok
test camera::tests::test_world::test_camera_switching ... ok
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured
use nethack_sys::*;
fn main() -> Result<(), String> {
// Stage-aware 初期化(7 段階)
full_init()?;
// ここで moveloop() は無限ループに入ります
// 実際のゲームループは Phase 3+ で実装予定
Ok(())
}
// Stage 1: プログラム状態初期化
init_stage_1_early()?;
// Stage 2: UI システム選択
init_stage_2_choose_windows()?;
// Stage 3: オプション読み込み
init_stage_3_options()?;
// Stage 4: ウィンドウシステム初期化
init_stage_4_nhwindows()?;
// Stage 5: ダンジョン DB 初期化
init_stage_5_dlb()?;
// Stage 6: 視野システム初期化
init_stage_6_vision()?;
// Stage 7: ゲーム開始
init_stage_7_newgame()?;
// 現在のステージ確認
let stage = current_stage()?;
println!("Current stage: {:?}", stage);
# 変更検出して自動ビルド
cargo watch -c -x "build --workspace"
# テスト実行も含める
cargo watch -c -x "test --workspace"
# clippy(Rust linter)
cargo clippy --workspace
# コードフォーマット確認
cargo fmt --check
# コード自動フォーマット
cargo fmt --all
# ドキュメント生成(HTML)
cargo doc --workspace --open
# 特定クレートのドキュメント
cargo doc -p nethack-sys --open
cargo doc -p nethack-core --open
lua.h not found原因: Lua 開発ファイルが不足
解決:
# Linux
sudo apt-get install liblua5.4-dev
# macOS
brew install lua@5.4
# Windows
# https://luabinaries.sourceforge.net/ から Lua 5.4 をダウンロード
ncurses.h not found原因: ncurses 開発ファイルが不足
解決:
# Linux
sudo apt-get install libncurses-dev
# macOS
brew install ncurses
# Windows
# MSVC の場合、カスタムビルドまたは代替ライブラリを使用
bindgen: clang not found原因: clang ツールチェーンが不足
解決:
# Linux
sudo apt-get install clang libclang-dev
# macOS
brew install clang
# Windows
# Visual Studio Build Tools をインストール
undefined reference to 'early_init'原因: NetHack オブジェクトファイルが見つからない
確認:
ls /home/oosawak/Workspace/NetHack/src/*.o | wc -l
# Expected: 139 files
解決: NetHack を再ビルド
cd /home/oosawak/Workspace/NetHack
sh sys/unix/setup.sh hints/linux.500
make clean
make all
解決:
# タイムアウト時間を増加
cargo test --workspace -- --test-threads=1 --nocapture
Game Bridge を実装することで、C グローバル状態へのアクセスが可能になります:
// 実装予定(Phase 3)
let player_x = get_player_x();
let player_y = get_player_y();
let dungeon_level = get_dungeon_level()?;
println!("Player at ({}, {}), Level {}", player_x, player_y, dungeon_level);
WASM ターゲット用のビルド手順(Phase 4):
# WASM target インストール
rustup target add wasm32-unknown-unknown
# WASM パック
wasm-pack build crates/nethack-wasm --target web
デスクトップアプリケーション実行(Phase 4):
cargo run --release -p nethack-desktop
| リソース | 説明 |
|---|---|
| ARCHITECTURE.md | システムアーキテクチャ詳細 |
| FFI_GUIDE.md | FFI バインディング詳細 |
| Rust Book | Rust 言語学習 |
| wgpu Book | wgpu グラフィックス |
| NetHack Wiki | NetHack ゲーム知識 |
Q: どのプラットフォームが完成している?
A: 現在 Phase 2 完了。FFI バインディングと初期化が完成しています。デスクトップアプリ、WASM、Unity プラグインは Phase 3 以降の実装予定です。
Q: WASM サンプルはどこにある?
A: wasm-examples/ ディレクトリで公開予定です(Phase 4 完成後)。
Q: ライセンスは?
A: NetHack General Public License (NGPL) を継承しています。詳細は docs/LICENSE.md を参照。
最終更新: 2026-05-06
対応 Rust バージョン: 1.70.0 以上