Rust

2024年RustとWebAssemblyプロジェクト構築ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

RustとWebAssembly入門: ツールチェーンの最新情報を活用したプロジェクト構築の基本

RustとWebAssembly(Wasm)は、軽量で高速な実行環境を必要とする現代のWeb開発において注目されています。wasm-pack 3.xRust 1.78といった最新ツールが登場し、開発効率が大幅に向上しています。本記事では、これらのツールを用いて「即日でWasmプロジェクトを立ち上げる」ためのステップバイステップガイドをお届けします。読者が持つ疑問に直接応えつつ、実際のコード例を通じて理解を深めていきます。


RustとWebAssemblyの開発環境構築

RustとWasmを開発するにはまず、Rustツールチェーンwasm-pack 3.xの導入が必要です。これらは、Wasmモジュールの作成とJavaScriptとの連携を実現するための基盤となります。

Rustツールチェーンのインストール

Rustの公式パッケージマネージャーであるrustupを使用して、最新バージョン(1.78)をインストールします。以下に手順を示します:

重要: 新しいプロジェクトではrustup default stableで安定版を明示的に設定すると良いです。

  1. Rustのインストール:
    bash
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

    これにより、rustc(コンパイラ)とcargo(パッケージマネージャー)がインストールされます。

  2. バージョン確認とツールチェーン設定:
    bash
    rustc --version
    cargo --version
    rustup default stable

出力例:
rustc 1.78.0 (abc123456)
cargo 1.78.0 (def789012)


wasm-pack 3.xの導入確認

RustからWasmをビルドするためには、wasm-packが必須です。最新バージョン(3.x)をグローバルでインストールします。

インストール後は以下のようにバージョンを確認できます:

出力例:


最初のWebAssemblyモジュールの作成(Hello World)

RustとWasmの基本的なプロジェクト構築フローを理解するためには、最初に「Hello World」レベルのモジュールを作成してみましょう。

Cargoプロジェクト初期化

cargo newコマンドで新しいライブラリプロジェクトを作成します:

このとき、Cargo.tomlwasm-bindgenwasm-packの依存関係が自動的に追加されます。


Wasm対応のコード構造

ライブラリプロジェクトでは、src/lib.rsにロジックを記述します。以下は、JavaScriptから呼び出せる関数を作成する例です:

このコードでは#[wasm_bindgen]アトリビュートが使われており、JavaScript側からこの関数を呼び出す準備を行います。


JavaScriptとのインターフェース設計と通信方法

Rustで書いたWasmモジュールをJavaScriptから使いやすくするには、関数のエクスポートデータ型の相互運用が不可欠です。

関数エクスポートの仕組み

上で作成したgreet()関数は、JavaScript側で以下のように呼び出せます:

このように、wasm-pack build --target webで生成されるJavaScriptラッパーを使えば、簡単に関数をエクスポートできます。


複雑なデータ型の相互運用

JavaScriptとRustではデータ型が異なるため、以下のような対応が必要です:

JavaScript 型 Rust 型 注意点
string &str or String wasm-bindgenで自動変換される
number i32, f64 数値の範囲に注意
object JsValue or Struct JavaScriptオブジェクトを扱うための型。JsValue::from()serde_wasm_bindgenで構造体と相互変換可能

補足: JsValueはJavaScriptオブジェクトを任意にラップできますが、Rust側での処理にはwasm-bindgenJsValue::as_ref()serde_wasm_bindgenライブラリで構造体への変換が必要な場合があります。


ブラウザでWebAssemblyを動かしてみる

Wasmモジュールを作成した後は、ブラウザ上で実行して動作確認をします。

HTMLファイルでのWasm読み込み

wasm-pack build --target webコマンドで出力されるpkg/ディレクトリからJavaScriptラッパーを使います。以下は簡単なHTMLの例です:

このHTMLファイルをブラウザで開くと、JavaScriptコンソールに"Hello, World!"が出力されます。


TauriでのWebAssemblyモジュールの利用例

TauriはRustとJavaScriptを組み合わせてデスクトップアプリを開発するフレームワークです。Wasmモジュールも簡単に統合できます。

Tauriプロジェクトとの連携手順

  1. Tauriプロジェクト作成:
    bash
    cargo tauri init --with-wasm

    確認事項: cargo tauri initのオプションはバージョンごとに変化するため、公式ドキュメントで最新情報を確認することを推奨します。

  2. Wasmモジュールを呼び出すコード(Rust側):
    rust
    #[tauri::command]
    pub fn say_hello(name: String) -> Result<String, String> {
    Ok(greet(&name))
    }

  3. JavaScript側で呼び出し:
    javascript
    window.__TAURI__.invoke('say_hello', { name: 'Tauri' });

このように、Wasmモジュールと連携させることで高性能なデスクトップアプリを構築できます。


即日実行!あなたのWasmプロジェクト開始ガイド

本記事で作成したコードは、読者が自身のWasmプロジェクト立ち上げに直接活用できるよう設計されています。以下の手順を参考にしてください:

  1. Rustとwasm-packの環境構築を行います。
  2. hello worldレベルのプロジェクトを作成し、JavaScriptとの連携を確認します。
  3. 必要であれば、Tauriのようなデスクトップアプリフレームワークに統合します。

すべてを実行すれば、すぐにWasmプロジェクトが開始できます。手を動かして体験することが、最も効果的な学習方法です。


スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Rust