用語集
Rust + WebAssembly開発で使われる技術用語の解説
クレート (Crate)
RustRustのパッケージ/ライブラリ。crates.ioに公開され、Cargo.tomlでプロジェクトに追加します。例: wasm-bindgen, web-sys, sha2。
トレイト (Trait)
Rust共通の振る舞いを定義するインターフェース。型がトレイトを実装することで特定の機能を提供します。TypeScriptやJavaのinterfaceに似ています。
所有権 (Ownership)
Rustガベージコレクタなしでメモリを管理するRustのシステム。各値には正確に1つの所有者があり、所有者がスコープを離れると値は解放されます。
借用 (Borrowing)
Rust所有権を取らずにデータに一時的にアクセスすること。&Tは不変借用(読み取り専用)、&mut Tは可変借用(読み書き可能)。コンパイル時にデータ競合を防ぎます。
ライフタイム (Lifetime)
Rust参照が有効な期間。Rustはライフタイムを使って、参照が指すデータより長生きしないことを保証します。'a構文で注釈します。
クロージャ (Closure)
Rust周囲のスコープから変数を捕捉できる無名関数。Wasmでは、Closure::wrapを通じてJavaScriptコールバックとして使用されます。
マクロ (Macro)
Rustコンパイル時にコードを生成する機能。Rustのマクロは!で終わります(例: println!, format!, vec!)。通常の関数と違い、可変数の引数を受け取れます。
スコープ (Scope)
Rust変数が有効でアクセス可能なコードの範囲。Rustでは、変数がスコープを離れると解放(メモリ解放)されます。
ヒープ (Heap)
Rust動的に確保されるメモリ領域。String、Vec、Boxはヒープにデータを保存します。スタックより確保は遅いですが、サイズが柔軟です。
プリミティブ (Primitive)
Rust言語に組み込まれた基本データ型: 整数(i32, u64)、浮動小数点(f32, f64)、bool、char。Wasm境界をゼロコストで直接通過します。
wasm-bindgen
WebAssemblyRustとJavaScriptを橋渡しするツールとライブラリ。型変換、関数のエクスポート/インポート、構造体からクラスへの変換のためのグルーコードを生成します。
リニアメモリ (Linear Memory)
WebAssemblyWasmがメモリ空間として使用する連続したバイト列。JavaScriptはArrayBufferビューを通じて読み書きできます。すべてのWasmデータ(文字列、配列、構造体)はここに存在します。
グルーコード (Glue Code)
WebAssemblyJSとWasm間の型変換を処理する自動生成されたJavaScriptコード。wasm-pack/wasm-bindgenが生成します。pkg/出力の.jsファイルがこれに該当します。
wasm-pack
WebAssemblyRust/Wasmプロジェクトのビルドツール。Rustを.wasmにコンパイルし、wasm-bindgenを実行し、TypeScript型を生成し、npm対応パッケージを作成します。
JsValue
WebAssemblyあらゆるJavaScript値を表すRust型。特定のJS型が分からない場合のキャッチオールとして、またはResult<T, JsValue>でのエラーハンドリングに使用します。
cdylib
WebAssemblyC互換の動的ライブラリを生成するCargoのクレートタイプ。Wasm出力に必須で、Rustメタデータなしのスタンドアロンバイナリを作成するようコンパイラに指示します。
web-sys
Web APIすべてのWeb API(DOM、Canvas、Fetchなど)のバインディングを提供するRustクレート。WebIDL仕様から自動生成されます。各APIはCargoフィーチャーとして有効にし、バイナリを小さく保ちます。
バインディング (Binding)
Web API2つの異なるシステムや言語をつなぐコード。Rust/WasmではバインディングによりRustがJavaScript APIを呼び出したり、その逆が可能になります。
フィーチャー (Feature (Cargo))
Web APICargoの条件付きコンパイルシステム。web-sysでは各API(Window、Documentなど)がフィーチャーで、必要なものだけを有効にします。有効にしたフィーチャーだけがコンパイルされ、バイナリサイズが削減されます。
コールバック (Callback)
Web API後から呼び出されるために引数として渡される関数。通常はイベントに応答して呼ばれます。WasmではRustクロージャがClosure::wrapを通じてJSコールバックになります。
CORS
Web APICross-Origin Resource Sharing(クロスオリジンリソース共有)。異なるドメイン間のHTTPリクエストを制限するブラウザセキュリティポリシー。Wasmモジュールはホスティングページと同じCORSルールに従います。
SHA-256
セキュリティあらゆる入力から固定256ビット(32バイト)の出力を生成する暗号学的ハッシュ関数。決定的で一方向性があり、衝突耐性を持ちます。
ソルト (Salt)
セキュリティレインボーテーブル攻撃を防ぐためにハッシュ前の入力に追加するランダムな値。各入力に固有のソルトが付くため、同じ入力でも異なるハッシュが生成されます。
レインボーテーブル (Rainbow Table)
セキュリティハッシュ値から元の入力を逆引きするための事前計算されたルックアップテーブル。ソルトを使用することで無効化できます。
鍵導出関数 (Key Derivation Function)
セキュリティパスワードから暗号鍵を導出する関数(例: bcrypt, argon2, scrypt)。ブルートフォース攻撃に耐えるため意図的に低速です。パスワードにはSHA-256の代わりにこちらを使用します。
シリアライゼーション (Serialization)
一般データ構造を転送や保存が可能な形式(JSON、バイナリなど)に変換すること。Wasmでは、RustとJS間のシリアライゼーションを最小限にすることがパフォーマンスの鍵です。
ポインタ (Pointer)
一般データのメモリアドレスを保持する値。Wasmでは、エクスポートされた構造体はリニアメモリへのポインタとしてJSに渡されます — データ自体はコピーされません。
エンコード / デコード (Encode / Decode)
一般エンコード: データを特定の形式に変換(例: 文字列をUTF-8バイトに)。デコード: 元に戻す。Wasmの文字列受け渡しではJS文字列(UTF-16)をRust(UTF-8)にエンコードし、戻す処理が行われます。
クアッドツリー (Quadtree)
一般2D空間を再帰的に4つの象限に分割するツリーデータ構造。すべてのペアをチェックせずに近くのオブジェクト(例: パーティクル衝突検出)を効率的に見つけるために使用します。