用語集

Rust + WebAssembly開発で使われる技術用語の解説

クレート (Crate)

Rust

Rustのパッケージ/ライブラリ。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

WebAssembly

RustとJavaScriptを橋渡しするツールとライブラリ。型変換、関数のエクスポート/インポート、構造体からクラスへの変換のためのグルーコードを生成します。

リニアメモリ (Linear Memory)

WebAssembly

Wasmがメモリ空間として使用する連続したバイト列。JavaScriptはArrayBufferビューを通じて読み書きできます。すべてのWasmデータ(文字列、配列、構造体)はここに存在します。

グルーコード (Glue Code)

WebAssembly

JSとWasm間の型変換を処理する自動生成されたJavaScriptコード。wasm-pack/wasm-bindgenが生成します。pkg/出力の.jsファイルがこれに該当します。

wasm-pack

WebAssembly

Rust/Wasmプロジェクトのビルドツール。Rustを.wasmにコンパイルし、wasm-bindgenを実行し、TypeScript型を生成し、npm対応パッケージを作成します。

JsValue

WebAssembly

あらゆるJavaScript値を表すRust型。特定のJS型が分からない場合のキャッチオールとして、またはResult<T, JsValue>でのエラーハンドリングに使用します。

cdylib

WebAssembly

C互換の動的ライブラリを生成するCargoのクレートタイプ。Wasm出力に必須で、Rustメタデータなしのスタンドアロンバイナリを作成するようコンパイラに指示します。

web-sys

Web API

すべてのWeb API(DOM、Canvas、Fetchなど)のバインディングを提供するRustクレート。WebIDL仕様から自動生成されます。各APIはCargoフィーチャーとして有効にし、バイナリを小さく保ちます。

バインディング (Binding)

Web API

2つの異なるシステムや言語をつなぐコード。Rust/WasmではバインディングによりRustがJavaScript APIを呼び出したり、その逆が可能になります。

フィーチャー (Feature (Cargo))

Web API

Cargoの条件付きコンパイルシステム。web-sysでは各API(Window、Documentなど)がフィーチャーで、必要なものだけを有効にします。有効にしたフィーチャーだけがコンパイルされ、バイナリサイズが削減されます。

コールバック (Callback)

Web API

後から呼び出されるために引数として渡される関数。通常はイベントに応答して呼ばれます。WasmではRustクロージャがClosure::wrapを通じてJSコールバックになります。

CORS

Web API

Cross-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つの象限に分割するツリーデータ構造。すべてのペアをチェックせずに近くのオブジェクト(例: パーティクル衝突検出)を効率的に見つけるために使用します。