開発

なぜAPIキーをアプリに
埋め込まないのか

· SEADICE

SEADICEはAI機能を持つFlutterアプリでClaude APIキーをipa/apkに直接埋め込まず、Cloudflare Workers経由の1本のプロキシで呼び出している。理由はバイナリ解析によるキー流出を防ぐためで、アプリ側のコードは数行変えるだけで済む。

APIキー直埋め込みが危険な理由

ipa・apkはstringsコマンドやjadxで簡単に逆コンパイルでき、埋め込んだ文字列はほぼ確実に抽出される。

Cloudflare Workersプロキシの構成

SEADICEはclaude-proxy.seadice-lite.workers.devという1つのWorkerを全アプリで共用し、APIキーはCloudflare SecretsにANTHROPIC_API_KEYとして保存している。

構成要素役割
FlutterアプリWorkerのエンドポイントにmodel・messagesをPOSTするだけ
Cloudflare Workerリクエストを中継し、Cloudflare SecretsからAPIキーを注入
Cloudflare SecretsANTHROPIC_API_KEYを暗号化保存。コードにもipaにも残らない
Anthropic APIWorkerからのリクエストのみを受け付ける実質的な唯一の呼び出し元

アプリ側の実装は数行で済む

アプリ側はAnthropicのエンドポイントの代わりにWorker URLへPOSTするだけで、既存のリクエスト形式をそのまま流用できる。

final res = await http.post( Uri.parse('https://claude-proxy.seadice-lite.workers.dev'), headers: {'content-type': 'application/json'}, body: jsonEncode({ 'model': 'claude-haiku-4-5-20251001', 'max_tokens': 200, 'messages': [{'role': 'user', 'content': 'your prompt'}], }), );

キー更新時の運用

キーを更新・再発行する際も、差し替えはWorker側の1コマンドで完結し、公開済みのアプリを再ビルド・再申請する必要がない。

cd hiragana-ai-worker && wrangler secret put ANTHROPIC_API_KEY

診断系AIアプリ群のように個別提案にClaude APIを使う機能は、この構成を前提に設計している。プロキシを1本に集約しているため、モデル変更や料金プラン変更もWorker側の修正だけで全アプリに反映できる。

Related

Claude APIのはじめかた — キー取得・Python実装・モデル選択・ストリーミングまで →

← ブログ一覧に戻る