Intégration WebAssembly avec Claude Code
Découvrez intégration WebAssembly avec Claude Code. Conseils pratiques et exemples de code inclus.
WebAssembly統合をClaude Codeで実現する
WebAssembly(Wasm)はブラウザでネイティブに近い速度で動作するバイナリ形式です。画像処理、暗号計算、ゲームロジックなどCPU負荷の高い処理をWebで高速に実行できます。Claude Codeを使えば、Wasmモジュールの作成から統合までスムーズに進められます。
RustからWasmモジュールを作成
> Rustで画像フィルタ処理のWasmモジュールを作成して。
> wasm-packでビルドする構成にして。
# Cargo.toml
[package]
name = "image-filter"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib", "rlib"]
[dependencies]
wasm-bindgen = "0.2"
js-sys = "0.3"
web-sys = { version = "0.3", features = ["console"] }
// src/lib.rs
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn grayscale(pixels: &mut [u8]) {
for chunk in pixels.chunks_exact_mut(4) {
let gray = (0.299 * chunk[0] as f64
+ 0.587 * chunk[1] as f64
+ 0.114 * chunk[2] as f64) as u8;
chunk[0] = gray;
chunk[1] = gray;
chunk[2] = gray;
// chunk[3] はアルファ値、そのまま
}
}
#[wasm_bindgen]
pub fn blur(pixels: &mut [u8], width: u32, height: u32, radius: u32) {
let src = pixels.to_vec();
let r = radius as i32;
for y in 0..height as i32 {
for x in 0..width as i32 {
let mut r_sum = 0u32;
let mut g_sum = 0u32;
let mut b_sum = 0u32;
let mut count = 0u32;
for dy in -r..=r {
for dx in -r..=r {
let nx = (x + dx).clamp(0, width as i32 - 1) as usize;
let ny = (y + dy).clamp(0, height as i32 - 1) as usize;
let idx = (ny * width as usize + nx) * 4;
r_sum += src[idx] as u32;
g_sum += src[idx + 1] as u32;
b_sum += src[idx + 2] as u32;
count += 1;
}
}
let idx = (y as usize * width as usize + x as usize) * 4;
pixels[idx] = (r_sum / count) as u8;
pixels[idx + 1] = (g_sum / count) as u8;
pixels[idx + 2] = (b_sum / count) as u8;
}
}
}
JavaScriptからWasmを読み込む
> Wasmモジュールをブラウザで読み込んで、
> Canvas画像に適用する処理を書いて。
// src/wasm-loader.ts
import init, { grayscale, blur } from '../pkg/image_filter';
export async function initWasm() {
await init();
}
export async function applyGrayscale(canvas: HTMLCanvasElement) {
const ctx = canvas.getContext('2d')!;
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const pixels = new Uint8Array(imageData.data.buffer);
grayscale(pixels);
ctx.putImageData(imageData, 0, 0);
}
export async function applyBlur(
canvas: HTMLCanvasElement,
radius: number
) {
const ctx = canvas.getContext('2d')!;
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const pixels = new Uint8Array(imageData.data.buffer);
blur(pixels, canvas.width, canvas.height, radius);
ctx.putImageData(imageData, 0, 0);
}
ビルドとバンドル設定
# wasm-packでビルド
wasm-pack build --target web --out-dir pkg
# Viteでの設定
# vite.config.ts
// vite.config.ts
import { defineConfig } from 'vite';
import wasm from 'vite-plugin-wasm';
import topLevelAwait from 'vite-plugin-top-level-await';
export default defineConfig({
plugins: [wasm(), topLevelAwait()],
build: {
target: 'esnext',
},
});
パフォーマンス比較
JavaScriptとWasmの処理速度を比較してみましょう。
// benchmark.ts
async function benchmark() {
const size = 1920 * 1080 * 4;
const pixels = new Uint8Array(size);
crypto.getRandomValues(pixels);
// JavaScript版
const jsStart = performance.now();
grayscaleJS(pixels);
const jsTime = performance.now() - jsStart;
// Wasm版
const wasmStart = performance.now();
grayscale(pixels);
const wasmTime = performance.now() - wasmStart;
console.log(`JS: ${jsTime.toFixed(2)}ms`);
console.log(`Wasm: ${wasmTime.toFixed(2)}ms`);
console.log(`速度比: ${(jsTime / wasmTime).toFixed(1)}x`);
}
Full HDサイズの画像処理では、Wasm版がJavaScript版の3〜5倍高速に動作する場合があります。
Summary
WebAssemblyを活用すれば、Webアプリのパフォーマンスを大幅に向上できます。Claude Codeを使えば、RustやAssemblyScriptのコード生成からJavaScript統合まで効率的に進められます。パフォーマンス最適化ガイドやRust開発も参考にしてください。
WebAssemblyの詳細はMDN WebAssemblyガイドを参照してください。
Related Posts
Maîtriser les Hooks de Claude Code : Formatage automatique, tests automatiques et plus encore
Apprenez à configurer le formatage et les tests automatiques avec les hooks de Claude Code. Inclut des exemples de configuration pratiques et des cas d'utilisation concrets.
Configuration des serveurs MCP dans Claude Code et cas d'utilisation pratiques
Un guide complet sur les capacités des serveurs MCP de Claude Code. Apprenez à connecter des outils externes, configurer des serveurs et découvrez des exemples d'intégration concrets.
Le guide complet pour rédiger un CLAUDE.md : Bonnes pratiques de configuration de projet
Un guide approfondi pour rédiger des fichiers CLAUDE.md efficaces. Apprenez à communiquer votre stack technologique, vos conventions et la structure de votre projet pour maximiser la qualité des réponses de Claude Code.