Skip to the content.

環境構築

2025/03/16時点での情報です。現在の環境は以下のとおりです。

ツールと拡張機能のインストール

以下のツールをインストールしましょう。

またVSCodeの拡張機能として以下をインストールしてください。

Chromeの設定

WebGPUを使用するためには、Chromeの設定を変更する必要があります。

  1. Chromeを開き、URLバーにchrome://flagsと入力します。
  2. 検索バーにWebGPUと入力し、WebGPU Developer FeaturesEnabledに変更します。
  3. chrome://gpu にアクセスし、WebGPU: enabled になっているか確認
  4. WebGPU Samplesにアクセスし、WebGPUが有効になっているか確認
`WebGPU: enabled`になっていない場合 ### `WebGPU: enabled`になっていない場合 以下のようなメッセージが表示されている場合、`WebGPU`が有効になっていません。 ``` WebGPU: Software only, hardware acceleration unavailable ``` この場合、以下のいずれかの方法で`WebGPU`を有効にしてください。 1. Chromeを開き、URLバーに`chrome://settings/system`と入力します。 2. `Use hardware acceleration when available`を有効にします。

VScodeでプロジェクトを作成

VSCodeで新しいフォルダを作成し、以下のコマンドを実行してプロジェクトを作成します。

node -v
npm -v
npm init -y
エラーが出た場合 ### システムでのスクリプト実行のエラー ``` npm : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files\nodejs\npm.ps1 を読み込むことができません。 ``` このエラーが出た場合、`npm`に関してのスクリプト実行ポリシーの権限を一部変更する必要があります。 以下のコマンドを実行してください。 ```bash Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser ```

npmでパッケージをインストール

VITEのインストール

VITEは、ESM(ECMAScript Modules)をサポートするビルドツールです。より具体的には、VITEは、ESMを使用して、開発中のアプリケーションを高速にビルドし、開発サーバーを立ち上げることができます。

npm install vite

その後、依存関係をインストールします。

npm install

WebGPUのインストール

WebGPUは、Web上での高性能なグラフィックス処理を可能にするAPIです。

npm install webgpu
npm install --save-dev @webgpu/types

必要なフォルダとファイルの作成

以下のフォルダとファイルを作成します。

(root)
│── src/
│   ├── index.html
│   ├── main.js
│   ├── compute.wgsl
│── package.json
│── vite.config.js

index.htmlの作成

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WebGPU Compute Shader Example</title>
</head>
<body>
  <h1>WebGPU Compute Shader</h1>
  <script type="module" src="./main.js"></script>
</body>
</html>

main.jsの作成

// WebGPUの対応チェック
if (!navigator.gpu) {
  console.error("WebGPU not supported on this browser.");
  throw new Error("WebGPU is not supported.");
}

// WebGPUのデバイス取得
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

// GPUバッファの作成
const bufferSize = 64 * 4; // 64要素 * 4バイト (float32)
const buffer = device.createBuffer({
  size: bufferSize,
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST,
});

// シェーダーモジュールの作成
const shaderModule = device.createShaderModule({
  code: await (await fetch('./compute.wgsl')).text()
});

// パイプラインの作成
const pipeline = device.createComputePipeline({
  layout: "auto",
  compute: {
    module: shaderModule,
    entryPoint: "main",
  }
});

// バインドグループの作成
const bindGroup = device.createBindGroup({
  layout: pipeline.getBindGroupLayout(0),
  entries: [{ binding: 0, resource: { buffer } }]
});

// コマンドエンコーダの作成
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginComputePass();
passEncoder.setPipeline(pipeline);
passEncoder.setBindGroup(0, bindGroup);
passEncoder.dispatchWorkgroups(1); // ワークグループ数
passEncoder.end();

// コマンドの送信
device.queue.submit([commandEncoder.finish()]);

console.log("Compute shader executed successfully!");

compute.wgslの作成

@group(0) @binding(0) var<storage, read_write> data : array<f32>;

@compute @workgroup_size(64)
fn main(@builtin(global_invocation_id) id : vec3<u32>) {
    let index = id.x;
    data[index] = data[index] * 2.0;
}

package.jsonの編集

package.jsonに以下の内容を追加します。

{
  "scripts": {
    "dev": "vite"
  }
}

vite.config.jsの編集

import { defineConfig } from 'vite';

export default defineConfig({
  base: '',
  build: {
    outDir: 'dist',
  },
});

vite.config.js ## プロジェクトの実行 以下のコマンドを実行して、プロジェクトを実行します。 ```bash npx run dev ```
エラーが出た場合 ### `npx run dev`でエラーが出た場合 ``` npm error Missing script: "dev" npm error ``` `json`ファイルの中に以下のような記述があるか確認してください。 ```json "scripts": { "dev": "vite" } ``` ### `localhost:3000`にアクセスできない場合 Chromeは開くが、`http://localhost:3000/`にアクセスすると、`この localhost ページが見つかりません`と表示される場合、以下の手順で解決してください。 1. Chromeを開き、URLバーに`chrome://flags`と入力します。 2. 検索バーに`SameSite`と入力し、`SameSite by default cookies`を`Disabled`に変更します。 3. Chromeを再起動します。