← レッスン一覧に戻る レッスン 9 / 28
初級 getting-started
初めてのプロジェクトセットアップ
前提条件
始める前に、以下のツールをインストールしてください:
# Rustのインストール(cargoを含む)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# wasm-packのインストール
cargo install wasm-pack
# インストール確認
rustc --version
wasm-pack --versionプロジェクトの作成
# 新しいライブラリプロジェクトを作成
cargo new --lib my-wasm-app
cd my-wasm-appCargo.tomlの設定
[package]
name = "my-wasm-app"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
# 必要に応じて追加:
# web-sys = { version = "0.3", features = ["Window", "Document"] }
# js-sys = "0.3"
# wasm-bindgen-futures = "0.4"
[profile.release]
opt-level = "s" # バイナリサイズの最適化
lto = true # リンク時最適化最初の関数を書く
src/lib.rsを以下の内容に置き換えます:
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}ビルド
# <script type="module">で使用する場合のビルド
wasm-pack build --target web
# バンドラー(Vite、Webpack)向けのビルド
wasm-pack build --target bundler
# 最適化ビルド
wasm-pack build --target web --releaseこれにより、.wasmバイナリ、JavaScriptグルーコード、TypeScript型定義を含むpkg/ディレクトリが作成されます。
HTMLでの使用
<!DOCTYPE html>
<html>
<body>
<script type="module">
import init, { greet } from './pkg/my_wasm_app.js';
async function run() {
await init();
document.body.textContent = greet("World");
}
run();
</script>
</body>
</html>Viteでの使用
npm create vite@latest my-app -- --template vanilla-ts
cd my-app
npm install// src/main.ts
import init, { greet } from '../my-wasm-app/pkg';
async function run() {
await init();
console.log(greet("Vite"));
}
run();プロジェクト構成
my-wasm-app/
├── Cargo.toml # Rustの依存関係
├── src/
│ └── lib.rs # Rustコード
├── pkg/ # wasm-packが生成
│ ├── my_wasm_app_bg.wasm
│ ├── my_wasm_app.js
│ ├── my_wasm_app.d.ts
│ └── package.json
└── target/ # Rustビルド成果物バイナリサイズの最適化
# Cargo.toml
[profile.release]
opt-level = "s" # "s" = 小さい、"z" = 最小
lto = true # リンク時最適化
codegen-units = 1 # より良い最適化、コンパイルは遅くなる
strip = true # デバッグシンボルを除去さらにサイズを削減するためにwasm-optを実行します:
wasm-opt -Oz -o optimized.wasm pkg/my_wasm_app_bg.wasm試してみよう
Runをクリックして、プロジェクトセットアップのチェックリストを確認しましょう。その後、自分のマシンで実際に試してみてください!
試してみる
チャプタークイズ
すべての問題に正解してレッスンを完了しましょう