TL;DR
WebGPU は「ブラウザでネイティブに近いGPU機能(グラフィックス+汎用計算)を使うための新しい標準API」です。W3C の勧告プロセスが進み、主要ブラウザ実装(Chromium 系 / Firefox / WebKit)が順次出揃いつつあり、ゲーム・可視化・ブラウザ内 ML(LLM 推論など)といった分野で急速に採用が進んでいます。
1. WebGPUとは?(ざっくり)
- 目的:Web 上でグラフィックスと汎用GPU計算(GPGPU)を効率的に利用できる低レベルAPI。設計は Vulkan / Metal / Direct3D12 に近く、WebGL の後継として位置付けられています。
- 特徴:よりモダンなパイプライン、明示的なリソース管理、サーバー/クライアント双方での計算利用(例:画像処理・物理シミュレーション・機械学習推論)に適します。
2. 仕様・シェーディング言語(WGSL)について
- 公式仕様(W3C) は Candidate Recommendation(勧告草案)段階にあり、API の主要な形は安定化しています(※実装差異は残る)。
- WGSL(WebGPU Shading Language):WebGPU が標準で使うシェーダー言語。型安全性や移植性を考慮した言語設計で、プラットフォームごとの中間表現(SPIR-V 等)への変換ツール(Tint / Naga 等)も実用化されています。
3. ブラウザと実装状況(要チェック)
- 実装状況は急速に進展しています。Chrome / Edge(Chromium 系)は早期からサポート、Firefox は 2025 年中に主要プラットフォームで有効化が進み、Safari / WebKit も 2025 年にベータ→出荷フェーズへ移りました。ただし「全ブラウザで完全同一仕様が動く」わけではなく、プラットフォーム差(サポートする features / limits / validation エラーの挙動など)があります。必ず動作検証が必要です。
4. 代表的な実装・ライブラリ(エコシステム)
- Dawn:Chromium の WebGPU 実装の核(Google が開発)。ブラウザ側の実装で重要なプロジェクトです。
- wgpu(Rust):WebGPU 仕様ベースのクロスプラットフォーム Rust API。ネイティブ環境と wasm(ブラウザ)で動作し、Deno / Firefox / ネイティブエンジンなどで使われます。
- Tint / Naga:WGSL と他シェーダ言語間のコンパイル・翻訳を担うツール群(Tint は Chromium/Dawn 関連、Naga は wgpu チーム由来)。これらは実装の互換性やパイプライン作成で重要です。
5. なにができる?ユースケース
- リッチな 3D レンダリング(ゲーム/ビジュアライゼーション) — WebGL より低レイヤで効率的。
- 汎用計算(GPGPU):画像処理、物理シミュレーション、特徴量抽出など。
- ブラウザ内 ML(推論):ONNX Runtime Web、TensorFlow.js の WebGPU バックエンド、WebLLM 等が WebGPU を利用してブラウザ内モデル推論を加速しています(サーバ不要で低遅延・プライバシー保護が可能)。
6. 最低限の始め方(短いコード例)
// feature detection
if (!navigator.gpu) {
throw new Error('WebGPU is not available on this browser/device.');
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) throw new Error('No suitable GPU adapter found.');
const device = await adapter.requestDevice();
// canvas を webgpu 用に設定
const canvas = document.querySelector('canvas');
const context = canvas.getContext('webgpu');
// 推奨フォーマットを取得(プラットフォーム最適値)
const format = navigator.gpu.getPreferredCanvasFormat();
// コンテキストを構成
context.configure({
device,
format,
});
最小の WGSL フラグメント例(色を返す)
// simple.wgsl
@fragment
fn fs_main() -> @location(0) vec4<f32> {
return vec4<f32>(0.2, 0.6, 1.0, 1.0);
}
7. 実務で気をつけるポイント(ベストプラクティス)
-
ブラウザ差分の検出:機能(
requiredFeatures)や limits(例:最大バッファサイズ)に差があるため、起動時にadapter.features/adapter.limitsを確認し、フォールバック経路を用意する。 - セキュリティと配布:WebGPU は強力なハードウェアアクセスを伴うため、ブラウザ側で厳格な validation が入ります(HTTPS 必須など)。公開サイトでの運用前にテストを徹底。
- 開発ツール/デバッグ:Shader のコンパイルエラーや WebGPU の validation エラーは環境依存で表現が異なる。開発時はローカルの Canary/Nightly/TP 版で検証することを推奨。
- WGSL を学ぶ:既存の GLSL/HLSL 資産がある場合でも、WGSL のパターン(型/メモリモデル)が違うため変換ツール(Tint / Naga)を使った検証が必要。
- パフォーマンスの落とし穴:GPU と CPU の間の転送(Buffer map/unmap, readback)は高コスト。頻繁な readback を避け、できるだけ GPU 上で完結する設計にする。
8. すぐ試せる学習リソース(実践向け)
- MDN の WebGPU ドキュメント(API リファレンスと小さな例)。
- W3C WebGPU specification(候補勧告ドキュメント)。
- WebGPU fundamentals / Observable のチュートリアル(「Triangle」等のハンズオン)。
- 実装リポジトリ:Dawn(Chromium 実装)および wgpu(Rust 実装)。
- ML に関心があるなら:ONNX Runtime Web(WebGPU EP)や WebLLM のリポジトリ/チュートリアルで「ブラウザ内推論」を試すと理解が早いです。
9. まとめ — いつ WebGPU を選ぶべきか?
- 採用を検討すべきケース:高パフォーマンスなブラウザUI(3D / 可視化)、大量データの並列処理(画像/信号処理)、ブラウザ内での機械学習推論(オフライン/プライバシー)など。
- まだ慎重にするケース:広いブラウザ互換性が必須で、すぐに全ユーザーへ同一挙動を保証したい場合(ブラウザ差を吸収する十分なフォールバックが必要)。
参考リンク
- MDN WebGPU API ドキュメント
- W3C WebGPU Specification (Draft)
- WebGPU Fundamentals
- Dawn (Google / Chromium WebGPU 実装)
- wgpu (Rust / cross-platform WebGPU implementation)
- ONNX Runtime Web (WebGPU EP)
- WebLLM (ブラウザ内 LLM 推論)