NESASMとNessembleはいずれも、6502系CPUを用いるファミコン向けプログラムをROMへ変換するアセンブラである。しかし両者の差は、単なる新旧ではなく、開発思想と記述体系の違いにある。NESASMは、.bankによって8KB単位の出力領域を切り替え、.orgでCPUまたはPPU上の配置先を指定する。ギコ猫でもわかるファミコンプログラミングをはじめ、多くの古典的教材はこの構造を前提としており、PRG-ROMとCHR-ROMを物理的なバンクの並びとして意識させる。これに対してNessembleは、.prg、.chr、.segmentなどによって領域の意味を明示し、Rust、WebAssembly、LSP、メディア取込みといった現代的な開発環境へ接続する。6502の命令、PPUレジスタ、VBlank待機など、ファミコンそのものの原理は変わらないが、ローカルラベル、マクロ、インクルード、ROM配置の構文には互換性がない。したがってNESASMのソースをNessembleへ移す作業は、単なる記号置換ではなく、当時の「ROMを区画へ詰める」感覚を、現在の「意味を持つセグメントとして構成する」感覚へ翻訳する行為といえる。古い教材をNESASMで味わうことは当時の制作工程を追体験することであり、Nessembleで再構成することは、その知識をブラウザ上の実験環境へ蘇らせる試みである。
Books pro
2026年7月23日木曜日
NESASMとNessembleはいずれも、6502系CPUを用いるファミコン向けプログラムをROMへ変換するアセンブラである
2026年7月22日水曜日
レオナルド・ダ・ヴィンチ『絵画論』における空気遠近法
レオナルド・ダ・ヴィンチ『絵画論』における空気遠近法 ― 視覚科学としての絵画理論
レオナルド・ダ・ヴィンチが遺した『絵画論(Trattato della Pittura)』は、単なる絵画技法書ではなく、人間が世界をどのように知覚するかを探究した視覚科学の記録でもある。なかでも空気遠近法の記述は、遠方の物体が青みを帯び、輪郭が曖昧となり、明暗や色彩の対比が弱まる現象を、観察者と対象物との間に存在する「空気」の働きとして説明した点で画期的であった。これは、建築物や道路の消失点によって空間を構成する線遠近法とは異なり、光、大気、水蒸気、塵などの媒質が視覚へ及ぼす影響を描写へ取り込もうとする試みである。レオナルドは自然観察を繰り返し、山並みや大気の色の変化を実証的に記録し、画家は物体だけでなく、その間に満ちる空気まで描かなければならないと考えた。この発想は17世紀の風景画家クロード・ロラン、さらに19世紀のターナーや印象派へ受け継がれ、光と大気を主題とする風景表現へ発展する。また現代では、大気散乱モデルやボリュームレンダリング、レイマーチングなどコンピュータグラフィックスの理論とも対応関係を見いだすことができ、レオナルドの洞察が五百年以上を経てもなお視覚表現の基盤として生き続けていることを示している。
関連キーワード
レオナルド・ダ・ヴィンチ、絵画論、Trattato della Pittura、空気遠近法、大気遠近法、線遠近法、光学、視覚科学、自然観察、大気散乱、青色散乱、コントラスト、輪郭、風景画、クロード・ロラン、J.M.W.ターナー、印象派、ボリュームレンダリング、レイマーチング、コンピュータグラフィックス
レイトレーシングとレイマーチング
レイトレーシングとレイマーチングは、いずれも視点から放たれたレイ(光線)を用いて画像を生成する技法であるが、その本質的な違いは「交点を解析的に求めるか」「反復的に探索するか」にある。レイトレーシングは、球や三角形など幾何学的に定義された物体との交差を数式として解き、最初の衝突位置を直接決定する。したがって、ポリゴンモデルを中心とする現代CGや映画制作において、高精度な反射・屈折・影の計算に適している。一方、レイマーチングは、空間上の各点で「物体までの距離」を返す距離関数(SDF)や密度場を評価し、その距離だけレイを前進させながら表面や内部構造を探索する。この反復過程は、未知の形状へ近づいていく探索アルゴリズムとして理解でき、複雑な数式曲面やフラクタル、滑らかな形状合成などを容易に表現できる点に特徴がある。
芸術史的な比喩を用いるなら、レイトレーシングはルネサンス以降の遠近法のように、空間構造を幾何学的に確定する手法に近い。それに対し、ボリュームレイマーチングは、光が空気中を伝播する過程を微小区間ごとに積算するため、空気遠近法との対応が見出せる。遠景ほど青みを帯び、輪郭や明暗差が失われる現象は、大気による散乱・吸収をレイに沿って積分する結果として自然に再現される。したがって、レイマーチングは単なる「遅いレイトレーシング」ではなく、空間を距離場や媒質として捉え直す計算思想であり、映画における雲・煙・炎・霧の表現からShaderToyに代表される数式アートまで、現代コンピュータグラフィックスに新たな造形言語をもたらした技法として位置づけられる。
関連キーワード
- レイトレーシング(Ray Tracing)
- レイマーチング(Ray Marching)
- ボリュームレイマーチング
- ボリュームレンダリング
- 符号付き距離関数(SDF)
- 距離場(Distance Field)
- レイ・サーフェス交差判定
- ポリゴンレンダリング
- BVH(Bounding Volume Hierarchy)
- フラクタルレンダリング
- レイ積分
- 光輸送(Light Transport)
- 散乱(Scattering)
- 吸収(Absorption)
- 空気遠近法
- 線遠近法
- 解析的交差判定
- 距離推定法(Distance Estimation)
- ShaderToy
- プロシージャルモデリング
Physically Based Rendering(PBR) は、映画のためだけに発明されたものではなく、光学や物理学に基づく反射理論をCGへ取り入れる長年の研究成果であり、
コンピュータグラフィックス(CG)の歴史を振り返ると、その発展は単なる計算能力の向上ではなく、「映画で何を表現したいか」という要求と、「数学・物理・情報科学が提供する理論」との相互作用によって形作られてきたことが分かる。例えば、Perlin Noise は、人工的で均質なCG表現に自然界の揺らぎを与えるために考案され、雲や煙、岩肌、木目といった質感表現を可能にした。Boids は、多数の鳥や魚を一体ずつアニメーションする限界を克服するため、局所的な三つの規則から群れ全体の秩序を創発させる分散アルゴリズムとして提案された。一方、Physically Based Rendering(PBR) は、映画のためだけに発明されたものではなく、光学や物理学に基づく反射理論をCGへ取り入れる長年の研究成果であり、映画制作がその実用化を強力に後押しした技術体系である。また、レイマーチングは、距離関数や体積データを数値的に探索する手法として、科学可視化や医療画像とも共通の基盤を持ち、映画では煙・雲・炎など境界の曖昧な現象の描画に活用された。これらはいずれも「映画のためだけ」に生まれたわけではないが、映画産業は従来の技術では実現困難な映像表現を次々と要求することで、新しい理論やアルゴリズムの実験場となり、その成熟を加速させた。CG史とは、数学が映像へ翻訳される歴史であると同時に、映像表現が新たな数学的発想を刺激してきた歴史でもある。この相互作用こそが、現代のリアルタイムレンダリングやゲームエンジン、VFXに至る技術基盤を築いたのである。
関連キーワード
- コンピュータグラフィックス(CG)
- 映画VFX
- 手続き的生成(Procedural Generation)
- Perlin Noise
- 勾配ノイズ
- Boids
- 創発(Emergence)
- 群知能(Swarm Intelligence)
- Physically Based Rendering(PBR)
- Cook–Torranceモデル
- フォン反射モデル
- レンダリング方程式
- レイマーチング
- Sphere Tracing
- Signed Distance Function(SDF)
- ボリュームレンダリング
- モンテカルロ法
- パストレーシング
- 光輸送(Light Transport)
- SIGGRAPH
- Pixar
- Industrial Light & Magic(ILM)
- Ken Perlin
- Craig Reynolds
- James Kajiya
- John C. Hart
2026年7月12日日曜日
WebAssembly 3.0
公式サイト・公式ドキュメント優先で一覧にします。現在の共通仕様は WebAssembly 3.0 です。
WebAssembly共通仕様
- WebAssembly公式サイト
- WebAssembly仕様一覧
- WebAssembly Core Specification
- JavaScript API Specification
- Web API Specification
- WebAssembly proposals
- MDN WebAssembly
WASI・Component Model
- WASI公式サイト
- WASI仕様リポジトリ
- WebAssembly Component Model
- Component Modelの基本概念
- WITリファレンス
- WITのサンプル
- Component Model言語対応一覧
WITは、Component Modelのインターフェースやworldを定義するIDLです。
C / C++
Emscripten
- Emscripten公式サイト
- Emscriptenドキュメント
- インストールと入門
- C/C++移植ガイド
- C/C++とJavaScriptの接続
- Embind
- Emscripten設定一覧
- Emscripten GitHub
EmscriptenはLLVMを利用し、C/C++をブラウザ、Node.js、Wasmランタイム向けにコンパイルする総合ツールチェーンです。
Clang / LLVM
Rust
- RustとWebAssembly公式ポータル
- Rust WebAssembly Book
- wasm-bindgen Guide
- wasm-bindgenサンプル
- wasm-bindgen GitHub
- wasm-pack GitHub
- web-sys API
- js-sys API
- Rustコンパイルターゲット一覧
-
wasm32-unknown-unknown -
wasm32-wasip1
wasm-bindgenはRustとJavaScript間の高水準な型変換・関数接続を担当します。
Zig
Zigでは主に次のターゲットを使います。
wasm32-freestanding wasm32-wasi wasm64-freestanding wasm64-wasi
現状、WebAssembly専用の独立した公式入門ページは少なめで、言語リファレンスとターゲット指定を参照する形です。
AssemblyScript
- AssemblyScript公式サイト
- AssemblyScript Book
- はじめ方
- 言語仕様
- ランタイム
- コンパイラ
- 標準ライブラリ
- JavaScriptとの連携
- AssemblyScript GitHub
- 公式サンプル
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公式ドキュメント
- Blazor WebAssembly概要
- Blazor WebAssembly入門
- Blazor WebAssemblyのAOTコンパイル
- JavaScript相互運用
- .NET WebAssembly native dependencies
- .NET Runtime GitHub
- ASP.NET Core GitHub
Blazor WebAssemblyはブラウザ内で.NETランタイムとC#アプリケーションを実行でき、AOTコンパイルにも対応しています。
Kotlin
- Kotlin/Wasm概要
- Kotlin/Wasm入門
- Kotlin/WasmとJavaScriptの相互運用
- Kotlin Web開発概要
- 公式サンプル集
- Kotlin GitHub
- Compose Multiplatform
- Kotlin Multiplatform Wizard
Kotlin/Wasmには、ブラウザ向けのwasm-jsとWASI向けのターゲットがあります。
Swift
- Swift公式WebAssembly入門
- Swift公式サイト
- Swift GitHub
- SwiftWasm公式サイト
- SwiftWasm GitHub
- JavaScriptKit
- Carton
- WasmKit
Swift公式には、ブラウザ向けとWASIランタイム向けのWebAssembly SDK手順があります。
Python
Pyodide
PyodideはCPythonとPythonパッケージ群をWasm化し、ブラウザやNode.jsで実行する仕組みです。
CPython本体
Java
TeaVM
- TeaVM公式サイト
- TeaVMドキュメント
- TeaVM入門
- TeaVM Wasm GC backend
- TeaVM Wasm GCローダー
- JavaScript・Wasmモジュール作成
- TeaVM GitHub
TeaVMはJavaバイトコードを入力にして、JavaScriptまたはWebAssemblyへAOTコンパイルします。KotlinやScalaのクラスファイルも入力可能です。
CheerpJ
実行ランタイム
Wasmtime
WasmEdge
Wasmer
WAMR
組み込み機器やマイコンでは重要です。
wasm3
小型インタプリタです。
Wazero
Goだけで実装されたWasmランタイムです。
| 言語 | 名称 | 正体 | 単体/複合 |
|---|---|---|---|
| Rust | rustc | コンパイラ | 単体 |
| Rust | wasm-bindgen | JS相互運用ライブラリ+CLI | 複合寄り |
| Rust | wasm-pack | ビルド・パッケージ化CLI | 単体 |
| Rust | web-sys | Web APIバインディング | 単体 |
| Rust | js-sys | JS標準APIバインディング | 単体 |
| C/C++ | Emscripten | コンパイラツールチェーン | 複合 |
| C | emcc | C向けコンパイラドライバー | 構成要素 |
| C++ | em++ | C++向けコンパイラドライバー | 構成要素 |
| AssemblyScript | AssemblyScript | 言語・ランタイム・ツール群 | 複合 |
| AssemblyScript | asc | コンパイラCLI | 単体 |
| Go | js/wasm | ブラウザ向けターゲット | 名称 |
| Go | wasip1/wasm | WASI向けターゲット | 名称 |
| Go | syscall/js | JS相互運用パッケージ | 単体 |
| TinyGo | TinyGo | Go用別コンパイラツールチェーン | 複合 |
| TinyGo | wasm | ブラウザ向けターゲット | 名称 |
| TinyGo | wasip1 / wasip2 | WASI向けターゲット | 名称 |
| Zig | Zig | 言語・コンパイラ・ビルドツール | 複合 |
| Zig | wasm32-freestanding | ターゲット指定 | 名称 |
| Kotlin | Kotlin/Wasm | KotlinのWasmバックエンド | 構成要素 |
| Kotlin | wasmJs | ブラウザ向けGradleターゲット | 名称 |
| Kotlin | wasmWasi | WASI向けGradleターゲット | 名称 |
| Kotlin | Compose Multiplatform | UIフレームワーク | 複合 |
| .NET | Blazor WebAssembly | Webアプリフレームワーク | 複合 |
| .NET | .NET WebAssembly runtime | .NETランタイム | 構成要素 |
| .NET | Interactive WebAssembly | レンダーモード | 名称 |
| .NET | WebAssembly AOT | コンパイル方式 | 名称 |
| Python | Pyodide | Python/Wasmディストリビューション | 複合 |
| Python | CPython | Python処理系 | 複合 |
| Ruby | ruby.wasm | CRubyのWasm移植群 | 複合 |
| Ruby | CRuby | Ruby処理系 | 複合 |
| Swift | Swift SDKs for WebAssembly | 公式Wasm SDK | 複合 |
| Swift | Swift for WebAssembly | 分野・対応全体の名称 | 名称 |
| Swift | SwiftWasm | コミュニティプロジェクト | 複合 |
| Swift | JavaScriptKit | JS相互運用ライブラリ | 単体 |
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に限定して、開発者視点で整理したものです。
| 項目 | 内容 | 技術資料 |
|---|---|---|
| 統一API | OpenAI互換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 API | SaaSがエンドユーザーごとの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公式ガイド
今回のユースケースに最も直接対応しています。
公式フローは次の3段階です。
1. ユーザーを https://openrouter.ai/auth へ送る 2. コールバックで認可コードを受け取る 3. 認可コードをユーザー管理APIキーへ交換する
OpenRouterでは事前のOAuthクライアント登録やclient_secretを要求せず、PKCEのcode_verifierとcode_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
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 ↓ ユーザー本人のクレジット
という構造を確認できます。