{}const=>[]async()letfn</>var
開発AI

WebAssemblyはブラウザの枠を超えています。サーバーとエッジアプリケーションの未来

WebAssemblyがブラウザ技術からサーバー、エッジコンピューティング、IoTの汎用フォーマットにどのように変化しているかをご覧ください。WASI、パフォーマンス、Disney+とShopifyの実際のケース、そしてクラウドインフラストラクチャにおけるWasmの将来について説明します。

К

Kodik

著者

1分で読める

WebAssembly(Wasm)が2017年に最初に登場したとき、その使命は非常に明確に見えました。Web開発者がブラウザで高性能なコードを実行できるようにすることです。しかし数年後の今日、私たちは予期せぬことが起きているのを目の当たりにしています。WebAssemblyは急速にその本来の環境を離れ、サーバー、エッジデバイス、さらには組み込みシステムをも席巻しています。一体何が起きているのでしょうか?

誰も解決できないと思っていた問題。

現代のクラウドアプリケーションの典型的なアーキテクチャを想像してみてください。Go、Node.js、Python、Rustなど、さまざまな言語でマイクロサービスを提供しています。それぞれに独自のランタイム環境、依存関係のセット、および特定の構成が必要です。展開はクエストとなり、セキュリティは絶え間ない頭痛の種となります。

これらのサービスのいずれかを、予測可能なパフォーマンスと強固なセキュリティ保証を備えた単一の汎用フォーマットにコンパイルできることを想像してみてください。これは、ブラウザ外でWebAssemblyが約束するものです。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

WASI:現実世界への橋

WebAssemblyの進化における重要な瞬間は、オペレーティングシステムとの相互作用のための標準化されたAPIであるWASI(WebAssembly System Interface)の登場でした。Wasmがプロセッサーである場合、WASIはそのオペレーティングシステムです。

// Wasm でコンパイルされた Rust 上のシンプルな HTTP サーバー
use wasi::http;

#[no_mangle]
pub extern "C" fn handle_request() -> i32 {
    let request = http::incoming_request();
    let response = http::outgoing_response();
    
    response.set_status_code(200);
    response.body().write(b"Hello from WebAssembly!");
    
    0
}

WASIは、機能ベースのセキュリティモデルを維持しながら、Wasmモジュールにファイルシステム、ネットワーク、およびその他のシステムリソースへのアクセスを許可するという重要な問題を解決します。モジュールは、明示的に許可されているものにのみアクセスし、それ以上のものにはアクセスしません。

驚くようなパフォーマンス

サーバー上の WebAssembly の主な利点の 1 つは、起動速度です。従来のコンテナは数秒で起動できますが、Lambda関数のコールドスタートは数百ミリ秒単位で測定されます。Wasmモジュールはマイクロ秒単位です。

これは単なる美しい数字ではありません。これは、スケーリングについての考え方の根本的な変化です。

Dockerコンテナ:

  • コールドスタート時間:1〜3秒

  • 容量: 50 ~ 500 MB

  • 名前空間とcgroupsを介した分離

WebAssemblyモジュール:

  • コールドスタート時間:<1ミリ秒

  • サイズ:1~10MB

  • 分離: ランタイムに組み込み

Fastlyは、WasmベースのCompute@Edgeプラットフォームが35マイクロ秒でインスタンスを起動すると報告しています。Cloudflare Workersも同様の結果を達成しています。これにより、まったく新しい使用パターンが可能になります。

エッジコンピューティング:Wasmの新しい本拠地

エッジコンピューティングは、WebAssemblyが本当に輝く場所です。静的コンテンツを提供するだけでなく、ユーザーにできるだけ近いビジネスロジックを実行するCDNノードを想像してみてください。

// AssemblyScript での Cloudflare Worker (Wasm にコンパイル)
export function handleRequest(request: Request): Response {
  const url = new URL(request.url);
  
  // Edgeでのコンテンツのパーソナライズ
  const country = request.headers.get("CF-IPCountry");
  const content = getLocalizedContent(country);
  
  // A/Bテスト
  const variant = Math.random() > 0.5 ? "A" : "B";
  
  return new Response(content, {
    headers: {
      "X-Variant": variant,
      "Cache-Control": "public, max-age=60"
    }
  });
}

即時起動と最小限のオーバーヘッドにより、Wasmはインフラストラクチャのコストをかけずに世界中の何千ものPOPでコードを実行できます。

プラグインと拡張性。

ブラウザ外でのWebAssemblyの最もエキサイティングなアプリケーションの1つは、プラグインシステムです。アプリケーションはユーザーに機能を拡張する機会を与える必要がありますが、どうすれば安全に実現できますか?

従来のアプローチでは、個々のプロセスで信頼できないコードを実行するか(低速)、組み込みインタプリタを使用するか(制限付き)のいずれかが必要でした。Wasmは妥協点を提供します。

// Goのホストアプリケーションがユーザープラグインをロードする
package main

import (
    "github.com/tetratelabs/wazero"
)

func main() {
    ctx := context.Background()
    runtime := wazero.NewRuntime(ctx)
    defer runtime.Close(ctx)
    
    // ユーザーからプラグインを読み込んでいます
    plugin, _ := os.ReadFile("user_plugin.wasm")
    mod, _ := runtime.InstantiateModuleFromBinary(ctx, plugin)
    
    // リソース制限のある関数を呼び出します
    result, _ := mod.ExportedFunction("process_data").
        Call(ctx, data)
}

このアプローチは次のように使用されます。

  • Envoy — カスタムトラフィックフィルター用

  • Shopify — ストア内のカスタムスクリプト用

  • Figma — プラグイン用(フロントとバックエンドの両方)

印象的な実際のケース

Disney+: サーバー側の画像およびビデオ処理にWasmを使用します。1つのランタイムで、多くの処理形式に対応します。

Shopify: Wasmで1日に何百万ものカスタムスクリプトを実行し、数千のストアのチェックアウトロジックを処理します。

Cosmonic: アプリケーションがクラウドとエッジロケーション間をその場で移行できる wasmCloud 上にプラットフォーム全体を構築しました。

SingleStore: データベース内でユーザー定義の機能を実行するためにWasmを追加しました—安全かつ迅速です。

課題と制約。

光っているものがすべて金であるとは限りません。サーバー WebAssembly には独自の問題があります。

WASI についてはまだコンセンサスがありません。 仕様は積極的に開発されており、さまざまなランタイムがさまざまなバージョンをサポートしています。WASI Preview 2は安定性を約束しますが、まだ広く採用されていません。

デバッグはより複雑です。 サーバー上でWasmコードをデバッグするためのツールはまだ開発中です。通常の strace、gdb、デバッガーはありません。

図書館のエコシステム。 多くの一般的なライブラリは、まだWasmでのコンパイルをサポートしていないか、パッチが必要です。

パフォーマンスが常に優れているとは限りません。 CPU集約型のタスクでは、Wasmはネイティブコードより10〜50%遅くなる可能性があります。クイックスタートでは、これが補われない場合があります。

今こそ実験の時です。Wasmtimeを試して、Spinをプレイして、最初のサーバー側のWasmモジュールを書いてください。未来はすでにここにあります。ただ、均一に分布しているわけではありません。

コディック — これは単なるアプリではなく、プログラミングの世界におけるあなたの個人的な指導者です。シンプルな言葉で説明し、実践で知識を定着させるのを助け、成功に対してクールなアチーブメントを与えます🏅

その他のサービス 暖かくフレンドリーなTelegramコミュニティ誰もが質問をして答えを得ることができる場所。非難や余計な理論はありません。私たちは一緒に課題を解決し、間違いを分析し、目標に向かってお互いをサポートします。

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要