2026年7月12日日曜日

WebAssembly 3.0

 公式サイト・公式ドキュメント優先で一覧にします。現在の共通仕様は WebAssembly 3.0 です。

WebAssembly共通仕様

WASI・Component Model

WITは、Component Modelのインターフェースやworldを定義するIDLです。


C / C++

Emscripten

EmscriptenはLLVMを利用し、C/C++をブラウザ、Node.js、Wasmランタイム向けにコンパイルする総合ツールチェーンです。

Clang / LLVM


Rust

wasm-bindgenはRustとJavaScript間の高水準な型変換・関数接続を担当します。


Zig

Zigでは主に次のターゲットを使います。

wasm32-freestanding
wasm32-wasi
wasm64-freestanding
wasm64-wasi

現状、WebAssembly専用の独立した公式入門ページは少なめで、言語リファレンスとターゲット指定を参照する形です。


AssemblyScript

AssemblyScriptはTypeScriptそのものではなく、Wasmを直接ターゲットにしたTypeScript風言語です。


Go

ブラウザ向け:

GOOS=js GOARCH=wasm go build

WASI向け:

GOOS=wasip1 GOARCH=wasm go build

Go 1.24では、WASI向け関数exportなどWasm連携機能が追加されています。

TinyGo

Go標準より小さなWasmを作りたい場合はこちらです。


C# / .NET / Blazor

Blazor WebAssemblyはブラウザ内で.NETランタイムとC#アプリケーションを実行でき、AOTコンパイルにも対応しています。


Kotlin

Kotlin/Wasmには、ブラウザ向けのwasm-jsとWASI向けのターゲットがあります。


Swift

Swift公式には、ブラウザ向けとWASIランタイム向けのWebAssembly SDK手順があります。


Python

Pyodide

PyodideはCPythonとPythonパッケージ群をWasm化し、ブラウザやNode.jsで実行する仕組みです。

CPython本体


Java

TeaVM

TeaVMはJavaバイトコードを入力にして、JavaScriptまたはWebAssemblyへAOTコンパイルします。KotlinやScalaのクラスファイルも入力可能です。

CheerpJ


実行ランタイム

Wasmtime

WasmEdge

Wasmer

WAMR

組み込み機器やマイコンでは重要です。

wasm3

小型インタプリタです。

Wazero

Goだけで実装されたWasmランタイムです。


言語名称正体単体/複合
Rustrustcコンパイラ単体
Rustwasm-bindgenJS相互運用ライブラリ+CLI複合寄り
Rustwasm-packビルド・パッケージ化CLI単体
Rustweb-sysWeb APIバインディング単体
Rustjs-sysJS標準APIバインディング単体
C/C++Emscriptenコンパイラツールチェーン複合
CemccC向けコンパイラドライバー構成要素
C++em++C++向けコンパイラドライバー構成要素
AssemblyScriptAssemblyScript言語・ランタイム・ツール群複合
AssemblyScriptascコンパイラCLI単体
Gojs/wasmブラウザ向けターゲット名称
Gowasip1/wasmWASI向けターゲット名称
Gosyscall/jsJS相互運用パッケージ単体
TinyGoTinyGoGo用別コンパイラツールチェーン複合
TinyGowasmブラウザ向けターゲット名称
TinyGowasip1 / wasip2WASI向けターゲット名称
ZigZig言語・コンパイラ・ビルドツール複合
Zigwasm32-freestandingターゲット指定名称
KotlinKotlin/WasmKotlinのWasmバックエンド構成要素
KotlinwasmJsブラウザ向けGradleターゲット名称
KotlinwasmWasiWASI向けGradleターゲット名称
KotlinCompose MultiplatformUIフレームワーク複合
.NETBlazor WebAssemblyWebアプリフレームワーク複合
.NET.NET WebAssembly runtime.NETランタイム構成要素
.NETInteractive WebAssemblyレンダーモード名称
.NETWebAssembly AOTコンパイル方式名称
PythonPyodidePython/Wasmディストリビューション複合
PythonCPythonPython処理系複合
Rubyruby.wasmCRubyのWasm移植群複合
RubyCRubyRuby処理系複合
SwiftSwift SDKs for WebAssembly公式Wasm SDK複合
SwiftSwift for WebAssembly分野・対応全体の名称名称
SwiftSwiftWasmコミュニティプロジェクト複合
SwiftJavaScriptKitJS相互運用ライブラリ単体

M5Stack / ESP32でWebAssemblyを扱う際によく使われるリポジトリ・公式サイト

 以下は M5Stack / ESP32でWebAssemblyを扱う際によく使われるリポジトリ・公式サイト のリンク集です。


M5Stack向けサンプル

M5Stack Core2 + wasm3 + AssemblyScript

M5Stack Core2でWebAssemblyを実行する代表的なデモです。


M5Stamp C3 + WAMR

RISC-V版(M5Stamp C3)向けです。


旧版 M5Stack wasm3

初期の実験版です。


ランタイム

WAMR (WebAssembly Micro Runtime)

Bytecode Alliance系の軽量ランタイム。


wasm3

ESP32で最も普及している軽量インタプリタです。


M5Stackライブラリ

M5Unified

現在の標準ライブラリです。


M5GFX

高速LCDライブラリ。


旧M5Stackライブラリ

現在は非推奨ですが参考になります。


開発環境

ESP-IDF

ESP32公式SDK


Arduino-ESP32

Arduino環境


PlatformIO

IDEを問わず開発可能です。


Wasmを生成する言語

AssemblyScript

TinyGo

Rust


解説記事

M5StackでAssemblyScript + wasm3を動かした作者本人の記事です。


おすすめ構成(2026年時点)

用途おすすめ
学習・デモwasm3 + AssemblyScript
本格開発WAMR + ESP-IDF
Arduino中心WAMR-ESP32
Goで開発TinyGo
Rustで開発WAMR + Rust


OpenRouterに限定して、開発者視点で整理したものです。

項目内容技術資料
統一APIOpenAI互換APIでOpenAI、Anthropic、Google、Mistralなど多数のモデルを同じインターフェースで利用できる。API Overview
OAuth (PKCE)ユーザーがOpenRouterへログインし、あなたのアプリへ認可。認可コードからユーザー専用APIキーを取得できる。第三者アプリ向け認証基盤。OAuth PKCE Guide
BYOK (Bring Your Own Key)ユーザー自身のOpenAI・Anthropic・Google・Azure・AWS BedrockなどのAPIキーを登録し、そのキー経由でモデルを利用できる。キーは暗号化保存。BYOK Documentation
ルーティングモデルやプロバイダーを自動切替。優先順位やフォールバックも設定可能。BYOK Documentation
APIキー管理APIキーごとに名称、用途、クレジット上限を設定。OAuthでも利用可能。Authentication API
Management APISaaSがエンドユーザーごとのAPIキーを自動生成・削除・上限変更できる管理API。Management API Keys FAQ

料金体系

項目内容資料
通常利用OpenRouterクレジットから従量課金。モデル料金は各プロバイダー価格を基本とし、推論料金への上乗せはない(クレジット購入時に手数料あり)。Pricing FAQ
BYOK月100万BYOKリクエストまでは無料。それ以降は、同一モデル・プロバイダー価格の**5%**をOpenRouterクレジットから徴収。BYOK Documentation
アプリ別上限APIキーごとにクレジット上限を設定できる。ユーザー単位・アプリ単位の利用制御が可能。Authentication API

実装手段

① OAuth認証(推奨される公開アプリ向け)

ユーザー
    ↓
OpenRouter OAuth
    ↓
認可コード
    ↓
APIキーへ交換
    ↓
あなたのアプリ

利用者はAPIキーをコピーする必要がなく、あなたは取得したユーザー専用APIキーでOpenRouter APIを呼び出します。


② APIキー入力

ユーザー
    ↓
OpenRouter APIキー入力
    ↓
あなたのアプリ

もっとも単純な方式です。キーには利用上限を設定できます。


③ BYOK

OpenAI Key
Anthropic Key
Gemini Key
        ↓
OpenRouter
        ↓
あなたのアプリ

利用者はOpenRouterへ各社APIキーを登録し、OpenRouter経由で統一APIを利用します。キーは暗号化保存されます。


④ Management API(SaaS向け)

あなたのSaaS
        ↓
Management API
        ↓
ユーザーごとのAPIキー生成

エンドユーザーごとにAPIキーを自動発行し、利用上限やリセット周期(日次・週次・月次)をプログラムから管理できます。


OpenRouterが提供する技術

  • OpenAI互換REST API
  • OAuth 2.0 + PKCE
  • BYOK(OpenAI、Anthropic、Google、Azure、AWS Bedrockなど)
  • APIキー管理
  • Management API
  • モデルルーティング
  • フォールバック
  • クレジット管理
  • アプリ別利用上限
  • OpenAI SDK互換
  • Python・TypeScript SDK

OpenRouterは現在、「エンドユーザーが自分のAI利用権を第三者アプリへ委任する」ための仕組みを、OAuth・BYOK・Management APIまで含めて最も体系的に提供しているプラットフォームと言えます。


OpenRouter OAuthで、各ユーザーが自分の残高・課金枠を使う実装について、公式サンプルとGitHub上の実例を分けてまとめます。

まず見るべき公式サンプル

1. OAuth PKCE公式ガイド

OpenRouter OAuth PKCE Guide

今回のユースケースに最も直接対応しています。

公式フローは次の3段階です。

1. ユーザーを https://openrouter.ai/auth へ送る
2. コールバックで認可コードを受け取る
3. 認可コードをユーザー管理APIキーへ交換する

OpenRouterでは事前のOAuthクライアント登録やclient_secretを要求せず、PKCEのcode_verifiercode_challengeを使います。localhostの任意ポートもコールバック先として利用できます。

公式の認可URLは次の形です。

https://openrouter.ai/auth
  ?callback_url=https://example.com/callback
  &code_challenge=...
  &code_challenge_method=S256

認可後、次のエンドポイントでコードをキーへ交換します。

POST https://openrouter.ai/api/v1/auth/keys
Content-Type: application/json

{
  "code": "認可コード",
  "code_verifier": "PKCEの元文字列",
  "code_challenge_method": "S256"
}

レスポンスのkeyが、そのユーザーのOpenRouter APIキーです。


2. Sign In with OpenRouter公式リポジトリ

GitHub: OpenRouterTeam/sign-in-with-openrouter

これがOAuth実装の公式リファレンスです。

含まれるもの:

  • PKCEコード生成
  • OpenRouterへのリダイレクト
  • 認可コード交換
  • APIキー保存
  • React用ContextとHook
  • サインインボタン
  • クロスタブ同期
  • SSR対策
  • エラー処理

リポジトリ内の主要箇所は次のとおりです。

src/lib/
  OpenRouter OAuthの本体

src/components/
  Sign In with OpenRouterボタン

src/hooks/
  OpenRouterAuthProvider
  useOpenRouterAuth

src/demo/
  実行可能なデモ

この公式例はバックエンド不要で、取得したキーをlocalStorageに保存します。ただし公式READMEも、ページ内のJavaScriptからキーを読めるため、本番利用ではCSPやXSS対策が必要だと明記しています。

デモ:

Sign In with OpenRouter Live Demo


3. OpenRouter公式の完成アプリ例

GitHub: OpenRouterTeam/multimedia-explorer

これは単なる断片ではなく、不特定多数のユーザーがOAuthでOpenRouterへ接続する完成アプリです。

主な実装:

  • OpenRouter OAuth 2.0+PKCE
  • ユーザー本人のOpenRouterクレジット利用
  • テキスト・画像・動画モデルの動的取得
  • APIルートからのモデル呼び出し
  • 非同期動画ジョブのポーリング
  • React Hookによる認証状態管理

特に参考になるファイル構成は次です。

lib/openrouter-auth.ts
  OAuth 2.0 PKCE処理

lib/openrouter.ts
  SDKクライアント生成

hooks/use-openrouter-auth.ts
  認証状態管理

app/api/
  ラッパーAPIの実装

ユーザーはOpenRouterアカウントでOAuth接続し、自分のクレジットを使って画像・動画・テキストモデルを利用します。


4. OpenRouter公式Examples

GitHub: OpenRouterTeam/openrouter-examples

OAuth後に取得したユーザーキーを使って、実際にモデルを呼び出す部分はこちらが参考になります。

収録例:

  • cURL
  • TypeScript fetch
  • Vercel AI SDK
  • Effect AI
  • Prompt Caching
  • ストリーミング
  • モデル固有機能

リポジトリは実行可能なサンプル集として用意されており、TypeScript、cURL、Vercel AI SDKなどに分かれています。

最小のfetch呼び出しは、OAuthで得たキーをBearerトークンに設定します。

const response = await fetch(
  "https://openrouter.ai/api/v1/chat/completions",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${userOpenRouterKey}`,
      "Content-Type": "application/json",
      "HTTP-Referer": "https://your-app.example",
      "X-OpenRouter-Title": "Your App"
    },
    body: JSON.stringify({
      model: "openai/gpt-4.1-mini",
      messages: [
        {
          role: "user",
          content: "こんにちは"
        }
      ]
    })
  }
);

if (!response.ok) {
  throw new Error(`OpenRouter error: ${response.status}`);
}

const result = await response.json();
console.log(result.choices[0].message.content);

5. 公式TypeScript SDK

GitHub: OpenRouterTeam/typescript-sdk

TypeScript SDK公式ドキュメント

OAuthで取得したキーをそのままSDKへ設定できます。

import { OpenRouter } from "@openrouter/sdk";

const client = new OpenRouter({
  apiKey: userOpenRouterKey
});

const result = await client.chat.send({
  model: "openai/gpt-4.1-mini",
  messages: [
    {
      role: "user",
      content: "この文章を要約してください"
    }
  ],
  stream: false
});

console.log(result.choices[0].message);

公式OAuthガイドでも、このSDKを使ったキー利用例が掲載されています。


6. Vercel AI SDK公式プロバイダー

GitHub: OpenRouterTeam/ai-sdk-provider

Next.jsやVercel AI SDKを使う場合の公式プロバイダーです。

npm install ai @openrouter/ai-sdk-provider
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
import { generateText } from "ai";

const openrouter = createOpenRouter({
  apiKey: userOpenRouterKey
});

const { text } = await generateText({
  model: openrouter("openai/gpt-4.1-mini"),
  prompt: "BYOKについて説明してください"
});

console.log(text);

公式プロバイダーは、OpenRouterで提供される多数のモデルをVercel AI SDK形式で利用できます。2026年7月時点ではAI SDK v7対応版が公開されています。


GitHub上のサードパーティ実例

7. Streamlit+OAuth PKCE

GitHub: 0xblocktrain/openrouter-streamlit

Python/Streamlitで、

Connect OpenRouter
↓
OAuth PKCE
↓
ユーザー専用キー取得
↓
チャット実行

を実装した小規模サンプルです。

ユーザー側でAPIキーをコピーする必要がなく、ボタンからOpenRouterへ接続してキーを取得する構成です。

起動方法も単純です。

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
streamlit run Chatbot.py

8. Streamlitの複数サンプル

GitHub: alexanderatallah/openrouter-streamlit

含まれる例:

  • チャットボット
  • ファイルQ&A
  • LangChain
  • PromptTemplate
  • 検索連携

古めの部分もありますが、PythonでOpenRouterをラップする構造を確認するには有用です。


9. OAuth対応のStreamlit派生例

GitHub: alonsosilvaallende/chatplotlib-openrouter

Streamlit上でOpenRouter OAuth PKCEを使うスターターです。チャットや可視化アプリへユーザー自身のOpenRouter利用枠を持ち込ませる例として参考になります。


10. IntelliJプラグインでのOAuth例

GitHub: DimazzzZ/openrouter-intellij-plugin

デスクトップIDEプラグインで、

  • 「Connect to OpenRouter」
  • OAuth/PKCE
  • 手動キー入力
  • モデル選択

を実装しています。

Webサービスだけでなく、ローカルアプリやIDE拡張でOAuthを使いたい場合の実装例になります。


11. MCP+OpenRouter OAuth

GitHub: janwilmake/chat-completions-mcp

OpenRouter OAuthで認証し、/chat/completionsをMCPツールとして公開する例です。

今回の「開発したラッパーAPIを、ユーザー自身の課金枠で使わせる」という考え方に近く、

MCPクライアント
↓ OAuth
OpenRouter
↓
ユーザー本人のクレジット

という構造を確認できます。 

ARC-AGI-3 は、ARC Prize Foundation が2026年3月に公開した、AIの汎用知能(AGI)を測るための最新ベンチマークです

 ARC-AGI-3 は、ARC Prize Foundation が2026年3月に公開した、AIの汎用知能(AGI)を測るための最新ベンチマークです。従来の ARC-AGI-1、ARC-AGI-2 の後継にあたります。

特徴は、これまでの「入力→出力」の静的パズルではなく、インタラクティブなゲーム環境になったことです。

具体的には、AIは

  • ルールが説明されない世界に入る
  • 自分で操作して探索する
  • 世界の法則を推測する
  • 目的(ゴール)を発見する
  • 何手先も計画してクリアする

という能力を求められます。


名称公開評価対象問題形式AIに求める能力
ARC (Abstraction and Reasoning Corpus)2019基本的な抽象推論グリッドパズル少数例からルールを発見する能力
ARC-AGI-12024汎用推論静的グリッド問題(約800問)パターン認識・抽象化・一般化 (ARC Prize)
ARC-AGI-22025より高度な推論難易度を大きく上げた静的問題推論・合成・未知問題への適応力 (ARC Prize)
ARC-AGI-32026エージェント知能インタラクティブなゲーム環境探索・計画・学習・環境理解・長期戦略 (ARC Prize)



名称環境・形式主に測る能力ARC-AGI-3との近さ
ARC-AGI-3ルールも目標も不明なターン制ゲーム探索、ルール発見、目標発見、計画、適応基準
CrafterMinecraft風の2Dサバイバル世界探索、クラフト、長期計画、技能獲得非常に近い
NetHack Learning Environment(NLE)自動生成されるローグライク長期計画、探索、記憶、資源管理、未知状況への対応非常に近い
Procgen Benchmark自動生成される16種類のゲーム未経験ステージへの一般化、サンプル効率近い
bsuite小型の強化学習課題群探索、記憶、信用割当、汎化などの基礎能力近いが分析的
XLand多数のルール・世界・マルチエージェント課題新しいゲームへの即時適応、一般的行動能力非常に近い
SIMA / SIMA 2複数の3Dゲーム世界言語指示、視覚認識、操作、未知ゲームへの転移近い
BabyAIグリッド世界で言語指示を実行言語理解、探索、組合せ的一般化部分的に近い
MiniGrid小型グリッド世界探索、記憶、部分観測、計画基礎版に近い
AI2-THOR / ALFRED3Dの室内環境移動、物体操作、言語指示、長期タスク身体性寄り
WebArena模擬Webサイト群ブラウザ操作、計画、ツール利用、長期タスクデジタル業務版
AppWorld複数の模擬アプリとAPIアプリ横断操作、コード実行、計画、状態管理デジタル業務版
Melting Potマルチエージェントゲーム協調、競争、社会的適応、未知の相手への一般化社会知能版
Atari ALE57種類などのAtariゲーム視覚入力からの強化学習、探索、制御古典的な祖先