エッジAIラボ
エッジAIラボ
TUTORIAL

Transformers.js v4 入門ガイド

Hugging Faceが開発するブラウザ向けAI推論ライブラリ。サーバー不要・完全無料でAIをブラウザ上で実行できます。v4の新機能と実践コードを徹底解説。

1. Transformers.jsとは

Transformers.jsは、Hugging Faceが開発するJavaScript/TypeScript向けのAI推論ライブラリです。 PythonのTransformersライブラリと同等のAPIをJavaScriptで提供し、ブラウザやNode.js上でAIモデルを直接実行できます。

最大の特徴はサーバーが一切不要であること。ユーザーのブラウザ内でモデルの読み込みから推論まですべて完結するため、 データがデバイスの外に出ることがありません。プライバシーに配慮したAIアプリケーションを構築でき、APIコストもゼロです。

🔒

完全プライバシー

データはブラウザ内で処理。サーバーに送信されません。

💰

完全無料

APIキー不要・課金なし。モデルはHugging Faceから無料取得。

🌐

オフライン対応

初回ダウンロード後はキャッシュから実行。ネット接続不要。

低遅延

ネットワーク往復なし。デバイス上で即座に推論結果を取得。

2. バージョンの歴史

v2(2023年)

  • ONNX Runtime Web(WASM)ベースの推論
  • 基本的なNLPタスク(テキスト分類・翻訳・要約)をサポート
  • 約30種のモデルアーキテクチャに対応

v3(2024年)

  • WebGPU対応を追加(GPU高速化)
  • Vision系タスク(画像分類・物体検出・セグメンテーション)を大幅強化
  • 100+モデルアーキテクチャに拡大
  • Whisper(音声認識)、SAM(セグメンテーション)など大型モデル対応

v4(2025年〜)

  • C++ WebGPUランタイムで3-10倍の高速化を実現
  • 200+モデルアーキテクチャをサポート
  • Qwen3、SmolLM2などの最新LLMに対応
  • マルチモーダルモデル(画像+テキスト)のネイティブサポート
  • メモリ効率の大幅改善(大型モデルでもブラウザで動作)

3. v4の新機能

C++ WebGPUランタイム

v4の最大の進化は、推論バックエンドが刷新されたことです。従来のONNX Runtime Web(JavaScript/WASM)から、 C++で実装されたネイティブWebGPUランタイムに移行し、3-10倍の高速化を実現しました。

特にGPUを搭載したデバイスでは劇的な速度向上が見られ、リアルタイム推論が実用レベルになりました。 テキスト生成では毎秒50-100トークン以上の速度が出るケースもあります。

200+ モデルアーキテクチャ対応

BERT、GPT-2、ViT、Whisper、SAMなどの定番モデルに加え、v4では以下のような最新モデルにも対応しています。

Qwen3SmolLM2Gemma 3Phi-4Llama 3Florence-2Whisper Large v3SAM 2YOLO v10ModernBERTMoonshineSigLIP

パフォーマンス比較

タスク
v3 (WASM)
v4 (WebGPU)
高速化
画像分類 (ViT)
120ms
15ms
8x
物体検出 (YOLO)
200ms
35ms
5.7x
テキスト生成
8 tok/s
60 tok/s
7.5x
音声認識 (Whisper)
45秒/分
12秒/分
3.8x
セグメンテーション
500ms
80ms
6.3x

※ 計測環境: M2 MacBook Pro / Chrome 130 / WebGPU有効。実際の速度はデバイスにより異なります。経験則(要検証)

4. インストールと基本セットアップ

Transformers.js v4はnpmからインストールできます。React / Next.js / Vite / vanilla JSなど、あらゆるフロントエンドフレームワークで利用可能です。

# npm
npm install @huggingface/transformers

# yarn
yarn add @huggingface/transformers

# pnpm
pnpm add @huggingface/transformers

基本的な使い方

import { pipeline } from "@huggingface/transformers";

// パイプラインを作成(タスクとモデルを指定)
const classifier = await pipeline(
  "image-classification",           // タスク名
  "Xenova/mobilenetv2_1.0_224",     // モデルID
  { device: "webgpu" }              // v4: WebGPUを使用
);

// 推論実行
const result = await classifier("https://example.com/photo.jpg");
console.log(result);
// => [{ label: "tabby cat", score: 0.92 }, ...]

ポイント

  • - pipeline() はタスク名とモデルIDを指定するだけでモデルをダウンロード・初期化
  • - 初回はHugging Faceからモデルをダウンロード(数十MB〜数百MB)
  • - 2回目以降はブラウザのキャッシュから読み込み(オフライン対応)
  • - device: "webgpu" を指定するとGPUアクセラレーションが有効化

5. 画像分類(Image Classification)

画像に写っているものを分類するタスクです。1000カテゴリの物体を識別するImageNetモデルや、 特定ドメイン向けのカスタムモデルを利用できます。

import { pipeline } from "@huggingface/transformers";

// MobileNetV2で画像分類(軽量・高速)
const classifier = await pipeline(
  "image-classification",
  "Xenova/mobilenetv2_1.0_224",
  { device: "webgpu" }
);

// ファイルまたはURLから分類
const result = await classifier(imageElement);
console.log(result);
// => [
//   { label: "golden retriever", score: 0.89 },
//   { label: "Labrador retriever", score: 0.05 },
//   { label: "cocker spaniel", score: 0.02 }
// ]

// Top-5結果を取得
const top5 = await classifier(imageElement, { topk: 5 });

当サイトで体験

画像分類デモ →

ブラウザ上でMobileNetV2を使った画像分類をリアルタイムで体験できます。

6. 物体検出(Object Detection)

画像内の物体の位置(バウンディングボックス)とカテゴリを同時に検出します。 YOLO系やDETRなどのモデルが利用可能です。

import { pipeline } from "@huggingface/transformers";

// YOLOv10で物体検出(高速・高精度)
const detector = await pipeline(
  "object-detection",
  "onnx-community/yolov10n",
  { device: "webgpu" }
);

const result = await detector(imageElement, {
  threshold: 0.5,  // 信頼度50%以上のみ
});
console.log(result);
// => [
//   { label: "person", score: 0.95,
//     box: { xmin: 10, ymin: 20, xmax: 200, ymax: 400 } },
//   { label: "dog", score: 0.88,
//     box: { xmin: 300, ymin: 150, xmax: 500, ymax: 350 } }
// ]

// Canvasにバウンディングボックスを描画
result.forEach(({ label, score, box }) => {
  ctx.strokeRect(box.xmin, box.ymin,
    box.xmax - box.xmin, box.ymax - box.ymin);
  ctx.fillText(
    `${label} ${(score * 100).toFixed(0)}%`,
    box.xmin, box.ymin - 5
  );
});

当サイトで体験

物体検出デモ →

カメラ映像からリアルタイムで80種類の物体を検出するデモを体験できます。

7. テキスト生成(Qwen / SmolLM)

v4ではブラウザ上でのLLM(大規模言語モデル)推論が実用レベルに到達しました。 Qwen3(0.6B-4B)やSmolLM2(135M-1.7B)などの軽量LLMを、WebGPU高速化で快適に動かせます。

import { pipeline } from "@huggingface/transformers";

// Qwen3 0.6B(ブラウザで動く軽量LLM)
const generator = await pipeline(
  "text-generation",
  "onnx-community/Qwen3-0.6B-ONNX",
  { device: "webgpu" }
);

// テキスト生成
const result = await generator(
  "エッジAIの利点を3つ教えてください。",
  {
    max_new_tokens: 256,
    temperature: 0.7,
    do_sample: true,
  }
);
console.log(result[0].generated_text);

// ストリーミング生成(1トークンずつ出力)
const streamer = await pipeline(
  "text-generation",
  "onnx-community/SmolLM2-360M-Instruct-ONNX",
  { device: "webgpu" }
);

for await (const token of streamer.stream("こんにちは!")) {
  process.stdout.write(token);
}

当サイトで体験

ブラウザAIチャットデモ →

サーバー不要・完全ローカルでLLMとチャットできます。データは一切外部に送信されません。

8. 音声認識(Whisper)

OpenAIのWhisperモデルをブラウザ上で実行し、音声をテキストに変換します。 日本語を含む100以上の言語に対応。v4のWebGPU高速化により、音声のリアルタイム文字起こしが可能になりました。

import { pipeline } from "@huggingface/transformers";

// Whisper small(日本語対応の音声認識)
const transcriber = await pipeline(
  "automatic-speech-recognition",
  "onnx-community/whisper-small",
  {
    device: "webgpu",
    dtype: "fp16",  // 半精度でメモリ削減
  }
);

// 音声ファイルから文字起こし
const result = await transcriber(audioBlob, {
  language: "japanese",
  task: "transcribe",
  chunk_length_s: 30,      // 30秒ずつ処理
  stride_length_s: 5,      // 5秒のオーバーラップ
  return_timestamps: true,  // タイムスタンプ付き
});
console.log(result.text);
// => "エッジAIとは、クラウドではなく..."
console.log(result.chunks);
// => [
//   { text: "エッジAIとは、", timestamp: [0.0, 1.5] },
//   { text: "クラウドではなく...", timestamp: [1.5, 3.2] }
// ]

9. 画像セグメンテーション(SAM)

Meta AIのSAM(Segment Anything Model)をブラウザ上で実行し、画像内の任意の物体をピクセルレベルで切り出します。 クリックやプロンプトで指定した領域を高精度にセグメンテーションできます。

import {
  SamModel, AutoProcessor, RawImage
} from "@huggingface/transformers";

// SAMモデルとプロセッサをロード
const model = await SamModel.from_pretrained(
  "Xenova/sam-vit-base",
  { device: "webgpu" }
);
const processor = await AutoProcessor.from_pretrained(
  "Xenova/sam-vit-base"
);

// 画像を読み込み
const image = await RawImage.read("photo.jpg");

// クリック座標を指定してセグメンテーション
const inputs = await processor(image, {
  input_points: [[[450, 600]]],  // クリック位置
  input_labels: [[1]],            // 1=前景, 0=背景
});

// 推論実行
const outputs = await model(inputs);
const masks = await processor.post_process_masks(
  outputs.pred_masks,
  inputs.original_sizes,
  inputs.reshaped_input_sizes,
);
// masks[0] にセグメンテーションマスクが格納

10. バックエンド比較

Transformers.js v4は3つの推論バックエンドを選択できます。デバイスやブラウザの対応状況に応じて最適なバックエンドを選びましょう。

WebGPU
WASM
WebGL
速度
最速(3-10x)
中速
低〜中速
GPU活用
フル活用
CPUのみ
部分的
ブラウザ対応
Chrome 113+
全ブラウザ
全ブラウザ
モバイル
Android Chrome
全対応
全対応
精度
fp16/fp32
fp32
fp32
メモリ効率
高い
普通
普通
推奨用途
本番環境
フォールバック
レガシー対応

// バックエンドの切り替え方法

// WebGPU(推奨 - 最速)
const pipe = await pipeline("task", "model", {
  device: "webgpu"
});

// WASM(フォールバック - 全ブラウザ対応)
const pipe = await pipeline("task", "model", {
  device: "wasm"
});

// 自動選択(WebGPU対応ならWebGPU、非対応ならWASM)
const device = navigator.gpu ? "webgpu" : "wasm";
const pipe = await pipeline("task", "model", { device });

11. カスタムモデルのONNX変換

独自に学習したPyTorchモデルをTransformers.jsで使うには、ONNX形式に変換する必要があります。 Hugging Faceのoptimumライブラリを使えば、コマンド1つで変換できます。

# Optimumをインストール
pip install optimum[exporters]

# PyTorchモデルをONNXに変換
optimum-cli export onnx \
  --model your-model-name \
  --task image-classification \
  ./onnx_model/

# 量子化(モデルサイズを1/4に圧縮)
optimum-cli export onnx \
  --model your-model-name \
  --task image-classification \
  --optimize O3 \
  ./onnx_model_quantized/
# Hugging Face Hubにアップロード
huggingface-cli upload your-username/your-model-onnx \
  ./onnx_model/

# Transformers.jsから使用
import { pipeline } from "@huggingface/transformers";
const pipe = await pipeline(
  "image-classification",
  "your-username/your-model-onnx",
  { device: "webgpu" }
);

注意点

  • - すべてのPyTorch演算がONNXでサポートされているわけではありません
  • - カスタムレイヤーを使用している場合は手動でのグラフ修正が必要な場合があります
  • - 量子化するとモデルサイズは大幅に減りますが、若干の精度低下があります
  • - 変換前にPython上で動作確認を行ってからONNXに変換しましょう

12. パフォーマンス最適化Tips

WebGPUを優先的に使用

navigator.gpuをチェックし、対応ブラウザではWebGPUを自動選択。非対応時はWASMにフォールバック。

📦

量子化モデルを選択

fp16やint8量子化モデルを使うことで、ダウンロードサイズとメモリ使用量を大幅削減。精度への影響は最小限。

🔄

Web Workerで非同期処理

モデルの読み込みと推論をWeb Workerで実行し、メインスレッドのブロックを防止。UIの応答性を維持。

💾

キャッシュ戦略の活用

Cache APIやIndexedDBを活用してモデルをキャッシュ。2回目以降の読み込みを高速化し、オフライン対応も実現。

📐

入力サイズの最適化

画像の入力サイズを必要最小限にリサイズ。512x512 → 224x224に縮小するだけで推論速度が5倍以上改善。

🎯

バッチ処理の活用

複数の画像やテキストをまとめて推論するバッチ処理で、GPUの並列処理能力を最大限活用。

14. よくある質問(FAQ)

Transformers.jsは無料ですか?
はい、完全に無料です。MITライセンスのオープンソースで、APIキーも不要です。モデルもHugging Faceから無料でダウンロードできます。
どのブラウザで動きますか?
WASMバックエンドはChrome、Firefox、Safari、Edgeなど主要ブラウザすべてで動作します。WebGPUバックエンド(高速化)はChrome 113以降で利用可能です。
スマートフォンでも動きますか?
はい、動作します。iPhoneのSafariやAndroid Chromeで利用可能です。ただし、大型モデル(Whisper Largeなど)はメモリ不足になる場合があります。軽量モデル(MobileNet、SmolLMなど)がおすすめです。
PythonのTransformersとの互換性は?
APIはPython版と可能な限り互換性を持たせて設計されています。ただしモデル形式はONNXに変換する必要があり、一部のPython固有機能は利用できません。
データはサーバーに送信されますか?
いいえ、一切送信されません。モデルの初回ダウンロード後はすべての処理がブラウザ内で完結します。画像・音声・テキストなどの入力データがデバイス外に出ることはありません。
オフラインで動きますか?
はい。モデルを一度ダウンロードすればブラウザのキャッシュに保存されるため、2回目以降はインターネット接続なしで利用できます。Service Workerを使えばより確実なオフライン対応が可能です。
v3からv4へのアップグレードは大変ですか?
基本的なAPIは互換性がありますが、WebGPUランタイムの変更に伴いimport方法が若干変わる場合があります。公式のマイグレーションガイドを参照してください。
Next.jsやReactで使えますか?
はい、React / Next.js / Vite / Vue / Svelte など主要フレームワークすべてに対応しています。当サイト自体がNext.js + Transformers.jsで構築されています。

ブラウザでAIを体験してみよう

Transformers.jsの実力を、当サイトの40以上のデモで体感してください。すべて無料・サーバー不要・データ送信なし。