Claude Codeの通信に自前ゲートウェイを挟む ― WASI 0.3とWACによる実装
- URL: https://dev.classmethod.jp/articles/claude-code-wasm-gateway-wasi
- 日付: 2026-06-23
- Tier: Tier 2
- 要旨: Claude Codeの通信にカスタムゲートウェイを挿入する実装ガイド。ANTHROPIC_BASE_URLで接続先を自前エンドポイントに向け、WASI 0.3とWebAssembly Componentモデル(wac)を使用してガードレール機能(秘密検出・応答伏字化・メトリクス計測)をモジュール化・合成。ゲートウェイはローカルCLI経由でSSE ストリーミングを保ったまま複数段の検査・遮断処理を実行可能。オーバーヘッド約0.5ms(初トークン到達時)。
詳細
Claude Codeの組み込みセキュリティ機能(permission・hooks・managed-settings)には限界がある。hooks では入力単位の遮断は可能だが、会話履歴・toolResultを含む完全なHTTPリクエストやSSEストリーム全体の検査・改変には不足。ANTHROPIC_BASE_URLで接続先を変更することで、Claude Code 本体を修正せずゲートウェイレイヤーにガードレール機能を挿入できる。
WASM(WebAssembly)はポータブルなバイナリで、WASI(System Interface)がブラウザ外での実行を支援。WASI 0.3.0以降、stream とfuture がネイティブに使用可能となり、SSEチャンク単位での動的検査が実装可能。
実装構成:各ガードレール(meter・secret-scan・output-mask等)を独立した WASM コンポーネントとして実装。wac plugで複数コンポーネントを1バイナリに合成し、wasmtime serve で起動。Claude Code は ANTHROPIC_BASE_URLをこのゲートウェイに向ける。メッセージAPI互換のリバースプロキシとして /v1/messages・/v1/messages/count_tokens を中継し、anthropic-version・anthropic-beta ヘッダをそのまま通す。secret-scan例:API キーのような形式を本文から検出し上流送信前に遮断。output-mask例:応答ストリーム中のメールアドレスや既知機密情報を伏字化。
実装上の注意:host・connection・content-length ヘッダは転送対象外(接続先との不整合で403になる)。x-api-key・Authorization・anthropic-* ヘッダはそのまま転送し、認証を保持。
企業運用時は MDM で ANTHROPIC_BASE_URLを配布し上書き不可に固定、ネットワーク egress 制御で api.anthropic.com への通信に限定、内部ALB/IP制限/mTLSで公開境界を fail-closed に設定。