Windows + PowerShellでpxpipeを試す
Claude Codeの入力トークンを削減するためのローカルプロキシ「pxpipe」を、Windows + PowerShell環境で試してみたのでまとめました。
・Windows 10 / 11
・PowerShell
・Claude Code
・Node.js 18以上
1. pxpipe
pxpipeは、Claude CodeとAnthropic APIの間に入るローカルプロキシです。

構成は次のようになります。
Claude Code
↓ HTTP
pxpipe
↓ HTTPS
Anthropic API
Claude Codeが送る長い入力の一部を、高密度なPNG画像に変換してからAPIへ送ります。
主な対象は次のような情報です。
・長いシステム指示
・CLAUDE.mdなどの固定ルール
・ツールの長い説明
・大きなtool result
・古い会話履歴
重要なのは、プロンプトをpxpipeに入力するわけではないことです。
プロンプトは普段どおりClaude Codeに入力します。pxpipeは裏側で通信を中継します。
2. 必要なもの
まず、Claude CodeとNode.jsが使えることを確認します。
(1) Claude Codeの確認。
claude --version
(2) Node.jsの確認。
node -v
(3) npxの確認。
npx -v
それぞれバージョン番号が表示されれば準備完了です。
Claude Codeが未導入の場合は、公式のWindows向けインストール手順を利用します。
irm https://claude.ai/install.ps1 | iex
インストール後、再度確認します。
claude --version
3. pxpipeの起動
PowerShellを2つ開きます。
1つ目はpxpipe用、2つ目はClaude Code用です。
(1) 1つ目のPowerShellでpxpipeを起動。
npx pxpipe-proxy
正常に起動すると、次のような表示になります。
[pxpipe] listening on http://127.0.0.1:47821
[pxpipe] anthropic upstream → https://api.anthropic.com
[pxpipe] tracking events → C:\Users\ユーザー名\.pxpipe\events.jsonl
[pxpipe] dashboard → http://127.0.0.1:47821/
このPowerShellは閉じず、そのまま起動しておきます。
記事冒頭に載せたスクリーンショットのページはこちらにアクセスすると開けます。
http://127.0.0.1:47821/
4. Claude Codeの起動
2つ目のPowerShellでClaude Codeを起動します。
(1) 作業対象のフォルダに移動。
cd C:\path\to\your-project
例です。
cd C:\Users\student\Documents\my-project
(2) Claude Codeの接続先をpxpipeへ変更。
$env:ANTHROPIC_BASE_URL="http://127.0.0.1:47821"
(3) Claude Codeを起動。
claude
これで通信経路は次のようになります。
Claude Code
↓
http://127.0.0.1:47821
↓
pxpipe
↓
Anthropic API
5. エラー
次のようなログが出ることがあります。
POST /v1/messages → 429
rate_limit_error
この場合、pxpipeが起動できていないとは限りません。
通信経路は次のようになっています。
Claude Code
↓
pxpipe
↓
Anthropic API
↓
429
まず、pxpipeを外してClaude Codeが動くか確認します。
(1) 接続先の環境変数を削除。
Remove-Item Env:ANTHROPIC_BASE_URL -ErrorAction SilentlyContinue
(2) Claude Codeを直接起動。
claude
直接接続でも429になる場合は、認証状態や利用上限、API側のレート制限などを確認します。
Claude Code内では次のコマンドで状態を確認できます。
/status
6. pxpipeの仕組み
pxpipeの中心的な考え方は、長い文字列の一部を画像に変換することです。
通常は次のようになります。
長いテキスト
↓
テキストトークンとして処理
↓
多くの入力トークンを使用
pxpipeでは次のようになります。
長いテキスト
↓
高密度に整形
↓
PNG画像
↓
Vision入力として処理
Claudeはテキストだけでなく画像も読めるため、画像内の文字をコンテキストとして利用できます。
ただし、すべてを画像化するわけではありません。
概念的には次のように分けます。
| 内容 | 処理 |
|---|---|
| 長くて安定した情報 | 画像化候補 |
| 長いツール説明 | 画像化候補 |
| 大きなtool result | 画像化候補 |
| 古い会話履歴 | 条件付きで画像化 |
| 最近の会話 | テキスト |
| 毎回変わる環境情報 | テキスト |
| 小さな入力 | そのまま |
| 画像化すると不利な入力 | そのまま |
6-1. 改行を表す「↵」
pxpipeでは、画像内の文字を高密度に配置するため、改行位置を↵で表現します。
元のテキストが次の場合、
a = 1
b = 2
c = a + b
画像化前の表現は、概念的には次のようになります。
a = 1↵b = 2↵c = a + b
普通に1行ずつ描画すると、短い行の右側に大きな空白ができます。
↵で元の改行位置を残しながら詰めることで、画像の面積を有効に使います。
6-2. ツール定義の処理
Claude Codeは、ファイル読取や編集、シェル実行などのツールを使います。
各ツールには次のような情報があります。
・名前
・説明
・入力形式
・JSON Schema
・必須項目
・プロパティ
・使用例
pxpipeは、これらを全部画像にするわけではありません。
概念的には次のように分けます。
APIの検証に必要な構造
→ JSONのまま残すモデルが読む長い説明
→ 画像側のTool Referenceへ移す
機械が必要とする情報と、人間の文章に近い説明部分を分けていると考えると分かりやすいです。
6-3. 古い会話履歴の処理
Claude Codeを長く使うと、会話履歴が増えていきます。
たとえば次のような履歴です。
user
assistant
tool_use
tool_result
assistant
user
assistant
...
pxpipeは条件が合うと、古い履歴の一部をまとめて画像にします。
一方、最近の会話はテキストとして残します。
考え方は次のとおりです。
古い大量履歴
→ 圧縮率を優先最近の履歴
→ 正確性を優先
ツール呼び出しの途中状態を壊さないように、tool useとtool resultの対応関係も考慮されています。
6-4. Prompt Cache
pxpipeでは、画像化だけでなくPrompt Cacheとの組み合わせも重要です。
毎回ほぼ同じ情報には次のようなものがあります。
・システム指示
・CLAUDE.md
・ツール説明
一方、毎回変化する情報もあります。
・git status
・現在の作業ディレクトリ
・最新の会話
・現在の質問
変化する情報を固定画像に混ぜると、画像が毎回変わります。
そのためpxpipeでは、安定した情報と変化する情報を分離して扱います。
概念的には次のようになります。
安定した大きな情報
→ 画像化して再利用しやすくする毎回変わる情報
→ テキストのまま後ろに置く
7. 注意点
pxpipeはZIPのような可逆圧縮ではありません。
実際の処理は次のようになります。
元の文字
↓
PNG画像
↓
Claudeが画像を読む
そのため、文字の誤読が起こる可能性があります。
特に注意が必要なのは次のような文字列です。
・Git SHA
・UUID
・APIキー
・ID
・バージョン番号
・ファイルパス
・ポート番号
・厳密一致が必要な値
pxpipeには、重要な識別子の一部をテキストとして併記する仕組みがあります。
ただし、完全な保証ではありません。
一字一句の正確性が重要な作業では注意が必要です。
まとめ
pxpipeは、Claude CodeとAnthropic APIの間に入り、長い入力の一部を画像へ変換するローカルプロキシです。
ポイントは次の3つです。
・プロンプトはClaude Codeに入力する
・小さな入力や不利な入力はそのまま通す
・画像化には誤読リスクがあるため、厳密な文字列を扱う作業では注意する
筆者も使ってみましたが、そもそもの消費トークン量を正確に把握していなかったため、なんとなく減っていそうな感じしかしませんでした。結局どんな使い方でもトークンは消費されるので、各個人でのプロンプトや使い方の工夫が求められそうです。
参考記事
-
Claude Code Setup
https://code.claude.com/docs/en/setup