Tasuke HubLearn · Solve · Grow
#Rust

RustとWASMによるハイパフォーマンスサーバーレス関数開発ガイド【2025年版】

Rustの安全性とパフォーマンスをWebAssembly(WASM)と組み合わせ、Cloudflare Workersのようなエッジコンピューティング環境で高速に動作するサーバーレス関数を開発する実践的な手順を解説します。

時計のアイコン19 September, 2025
TH

Tasuke Hub管理人

東証プライム市場上場企業エンジニア

情報系修士卒業後、大手IT企業にてフルスタックエンジニアとして活躍。 Webアプリケーション開発からクラウドインフラ構築まで幅広い技術に精通し、 複数のプロジェクトでリードエンジニアを担当。 技術ブログやオープンソースへの貢献を通じて、日本のIT技術コミュニティに積極的に関わっている。

🎓情報系修士🏢東証プライム上場企業💻フルスタックエンジニア📝技術ブログ執筆者

はじめに:なぜRustとWASMがサーバーレスで注目されるのか?

サーバーレスコンピューティング、特にエッジ環境では、低レイテンシーと高速なコールドスタートが極めて重要です。従来のコンテナやVMベースのサーバーレスは、起動時間に課題を抱えることがありました。ここで注目されているのがRustと**WebAssembly (WASM)**の組み合わせです。

  • Rustの強み: メモリ安全性、高いパフォーマンス、そしてC/C++に匹敵する低レベルな制御を、ガベージコレクションなしで実現します。これにより、予測可能で安定したパフォーマンスを持つコードを記述できます。
  • WASMの強み: ブラウザだけでなく、サーバーサイドでも動作するポータブルなバイナリフォーマットです。軽量なサンドボックス環境で安全に実行でき、起動時間が非常に短い(マイクロ秒単位)という特徴があります。

この2つを組み合わせることで、**「安全で、非常に高速かつ軽量なサーバーレス関数」**を実現できます。JavaScript/TypeScriptで書かれた既存のサーバーレス関数の一部(CPU負荷が高い処理など)をRust+WASMに置き換えることで、パフォーマンスを劇的に改善することも可能です。

本記事では、Cloudflare Workersをプラットフォームとして、Rustで書いたコードをWASMにコンパイルし、サーバーレス関数としてデプロイするまでの全手順を解説します。

ベストマッチ

最短で課題解決する一冊

この記事の内容と高い親和性が確認できたベストマッチです。早めにチェックしておきましょう。

開発環境のセットアップ

まず、必要なツールをインストールします。

  1. Rust: 公式サイト(rust-lang.org)の指示に従い、rustupをインストールします。
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  2. WASMターゲットの追加: RustのコンパイラがWASMを生成できるように、ターゲットを追加します。
    rustup target add wasm32-unknown-unknown
  3. wasm-pack: RustコードをWASMにコンパイルし、JavaScriptから利用しやすいようにパッケージ化してくれる必須ツールです。
    cargo install wasm-pack
  4. wrangler: Cloudflare Workersのプロジェクト作成、テスト、デプロイを行うためのCLIツールです。
    npm install -g wrangler

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

ステップ1:Rustで基本的なWASM関数を作成する

wasm-packを使って、新しいRustライブラリプロジェクトを作成します。

npm init cloudflare my-worker worker-rust
cd my-worker

Cloudflareのテンプレートはworker-rustを指定することでRustベースのプロジェクトを生成してくれます。

生成されたsrc/lib.rsを以下のように編集してみましょう。

// src/lib.rs
use worker::*

#[event(fetch)]
pub async fn main(req: Request, env: Env, _ctx: worker::Context) -> Result<Response> {
    // シンプルなテキストを返す
    Response::ok("Hello, World from Rust and WASM!")
}

このコードは、Cloudflare Workersのfetchイベントをトリガーに、"Hello, World from Rust and WASM!"というレスポンスを返す非常にシンプルなワーカーです。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

ステップ2:wranglerによるビルドとパッケージ化

Cloudflare WorkersのRustテンプレートは、wranglerコマンドでビルドプロセスを抽象化してくれます。

以下のコマンドを実行するだけで、RustコードがWASMにコンパイルされ、デプロイ可能な状態になります。

wrangler build

このコマンドは内部でwasm-packを呼び出し、src/lib.rsをコンパイルしてpkgディレクトリにWASMファイルとJavaScriptの連携コードを生成します。その後、Workersが必要とする形式に全体をパッケージングします。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

ステップ3:Cloudflare Workersへのデプロイ

ローカルでの開発とテストが完了したら、デプロイは非常に簡単です。

ローカルでのテスト

デプロイする前に、ローカル環境でワーカーの動作を確認できます。

wrangler dev

このコマンドを実行すると、ローカルサーバーが起動し、ブラウザやcurlhttp://localhost:8787 にアクセスすることで動作確認ができます。

本番環境へのデプロイ

準備ができたら、以下のコマンドでCloudflareのグローバルネットワークにデプロイします。(初回はCloudflareアカウントでの認証が必要です)

wrangler deploy

デプロイが完了すると、公開URLが発行され、世界中のどこからでもアクセス可能な高速なサーバーレス関数が誕生します。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

実践:フィボナッチ数列の計算をWASM化する

もう少し実用的な例として、計算負荷のかかるフィボnaッチ数列の計算をRustで実装してみましょう。

src/lib.rsを以下のように書き換えます。

// src/lib.rs
use worker::*;

// フィボナッチ数を計算する再帰関数
fn fib(n: u32) -> u32 {
    match n {
        0 => 0,
        1 => 1,
        _ => fib(n - 1) + fib(n - 2),
    }
}

#[event(fetch)]
pub async fn main(req: Request, env: Env, _ctx: worker::Context) -> Result<Response> {
    // URLから数値を取得 (例: /?n=40)
    let url = req.url()?;
    let query_params: std::collections::HashMap<String, String> = url.query_pairs().into_owned().collect();
    let n_str = query_params.get("n").cloned().unwrap_or_else(|| "35".to_string());
    let n = n_str.parse::<u32>().unwrap_or(35);

    // フィボナッチ数を計算
    let result = fib(n);

    Response::ok(format!("Fibonacci({}) = {}", n, result))
}

このコードは、URLのクエリパラメータ(?n=...)から数値を取得し、そのフィボナッチ数を計算して返します。再帰的な計算はCPU負荷が高いため、このような処理こそWASM化の恩恵を大きく受けられます。

再度 wrangler deploy を実行してデプロイし、https://<your-worker-url>/?n=40 のようにアクセスしてみてください。JavaScriptで同じ処理を実装した場合と比較して、高速に応答が返ってくるのが体感できるはずです。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

まとめ:サーバーレスの新たな可能性

本記事では、RustとWebAssemblyを使って、非常に高速で安全なサーバーレス関数を開発し、Cloudflare Workersにデプロイする方法を解説しました。

  • Rustのパフォーマンスと安全性をサーバーサイドで活用できる。
  • WASMの高速な起動時間とポータビリティが、サーバーレス(特にエッジ)と非常に相性が良い。
  • wasm-packwrangler を使うことで、開発からデプロイまでの体験がスムーズになる。

すべての処理をRustで書く必要はありません。Node.js (JavaScript/TypeScript) ベースのサーバーレス関数の中で、パフォーマンスがボトルネックとなっている特定の処理だけをRust+WASMに置き換える「ハイブリッドアプローチ」も非常に有効です。

RustとWASMは、サーバーレス開発のパフォーマンスと効率性を新たなレベルに引き上げる可能性を秘めています。ぜひこの強力な組み合わせを試してみてください。

さらに理解を深める参考書

関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。

この記事をシェア

続けて読みたい記事

編集部がピックアップした関連記事で学びを広げましょう。

#Go

GoとGinによるハイパフォーマンスAPIサーバー構築ガイド【2025年版】

2025/9/19
#API

API レスポンス遅延完全解決ガイド【2025年実務パフォーマンス最適化決定版】

2025/8/17
#GraphQL

GraphQL N+1問題完全解決ガイド【2025年実務パフォーマンス最適化決定版】

2025/8/19
#JavaScript

Node.jsからBunへの完全移行ガイド - 実践的な手順とパフォーマンス向上の全て【2025年版】

2025/8/11
#React

React 19の新機能 `use` フック実践ガイド【2025年版】

2025/9/19
#Security

APIセキュリティ実践ガイド【2025年版】:OWASP Top 10と具体的な対策

2025/9/3