Charles Proxyは、HTTP/HTTPSトラフィックをデバッグするためのクロスプラットフォームプロキシサーバーで、開発者がネットワークリクエストを傍受、表示、変更するために使用します。ツールの作成者Karl von Randow(2025年)によると、Charlesは2004年から世界中の50,000以上の企業で使用されています。このプロキシは、WiFi経由のモバイルデバイスからのトラフィック傍受、ルート証明書のインストールによるHTTPSプロキシ、API分析のための幅広いツールをサポートしています。
重要ポイント
Charles Proxyは、クライアントとサーバー間の仲介役として機能するHTTPプロキシおよびHTTPモニターです。すべてのリクエストとレスポンスはCharlesを通過し、その内容の表示、構造の分析、リアルタイムのデータ変更、さまざまなネットワーク状態のシミュレーションが可能です。Windows、macOS、Linuxで利用できます。
Charles Proxyは2004年にKarl von Randowによって作成され、ネットワークトラフィックのデバッグで最も人気のあるツールの1つであり続けています。無料の代替ツールとは異なり、Charlesは30日間の試用期間付きの有料ライセンスを提供しています。このツールは、HTTP通信を完全に制御する必要があるモバイルアプリ開発者、ウェブ開発者、QAエンジニア向けのプロフェッショナルソリューションとして位置づけられています。
Charlesはコンピューター上でシステムプロキシとして動作し、同じネットワーク上の任意のデバイス(Android、iOS、シミュレーター、エミュレーター、ウェブブラウザー、IoTデバイス)からのトラフィックを傍受できます。HTTPSを傍受するには、各デバイスにCharlesルート証明書をインストールする必要があります。トラフィックはHTTP/1.1およびHTTP/2(一部)でサポートされています。HTTP/3(QUIC)は傍受レベルではサポートされていません。
CharlesはMITM(Man-in-the-Middle)プロキシの原理で動作します。クライアントがCharlesを介してリクエストを送信すると、ツールはリクエストを傍受し、ターゲットサーバーに転送し、レスポンスを受信してクライアントに返します。すべてのトラフィックはCharlesを通過するため、分析と変更が可能です。
起動時にCharlesはポート8888(デフォルト)でローカルHTTPプロキシを作成します。オペレーティングシステムまたはアプリケーションはこのプロキシを使用するように設定されます。すべてのHTTPリクエストは最初にCharlesに送信され、Charlesはターゲットサーバーへの完全なクライアントとして動作します。HTTPSの場合、Charlesは独自のSSLプロキシ技術を使用します。ドメインごとにその場で証明書を生成し、Charlesルート証明書で署名します。ルート証明書がデバイスに信頼できるものとしてインストールされている場合、CharlesはHTTPSトラフィックを復号化して表示できます。
Charlesは2つのモードをサポートしています:Proxy(クラシックプロキシサーバー)とSOCKS Proxy(UDPおよびTCPトラフィック用)。ウェブ開発には標準HTTPプロキシを使用します。モバイルデバイスの場合は、Charlesを実行しているコンピューターのIPアドレスを指定してデバイスでWiFiプロキシを設定します。macOSはiOSシミュレーターの自動プロキシ設定をサポートしています。
<!-- Charlesサポート付きAndroid用network_security_config.xmlの設定 -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- DebugビルドでCharles証明書を信頼する -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxyは、単なるリクエスト傍受をはるかに超える、トラフィック分析と変更のためのプロフェッショナルツールセットを提供します。
Rewriteツールを使用すると、リクエストまたはレスポンスの特定の部分(ヘッダー、URLパラメーター、レスポンス本文)を自動的に変更できます。たとえば、User-Agentヘッダーを別のデバイスの値に置き換えたり、特定のCookieを削除したりできます。Breakpointsはデバッガーのように機能します。リクエストは選択した段階(送信前または受信前)で停止し、開発者は続行する前に手動で内容を変更できます。これはエラーレスポンスや非標準状態の処理をテストするのに役立ちます。
Map Localを使用すると、ネットワークリソース(CSS、JS、JSON)をディスク上のローカルファイルに置き換えることができます。これはフロントエンド開発に不可欠です。サーバーにデプロイすることなくCSS/JSを変更してすぐに結果を確認できます。Map RemoteはリクエストをあるURLから別のURLにリダイレクトします。たとえば、本番サーバーからステージングにリダイレクトしてテストできます。両方のツールはワイルドカードをサポートするURLパターンで動作します。
Throttleツールを使用すると、プリセットプロファイル(3G、EDGE、GPRS、DSL、WiFi)を使用してさまざまなタイプのネットワーク接続をシミュレーションできます。速度制限(ダウンロード/アップロード)、レイテンシー、パケットロス、安定性を設定できます。これは、低速または不安定な接続でのアプリの動作(適切なタイムアウト処理、再試行ロジック、オフラインモード)をテストするために重要です。
| プロファイル | ダウンロード | アップロード | レイテンシー | 典型的なシナリオ |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | 弱いモバイル信号でのテスト |
| EDGE | 130 kbps | 50 kbps | 400 ms | 非常に遅い接続 |
| GPRS | 50 kbps | 20 kbps | 500 ms | 最小可能接続 |
| DSL | 2 Mbps | 256 kbps | 50 ms | 自宅有線接続 |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | 良好なWiFi接続 |
Charlesはトラフィックセッションを.chlsファイルに自動保存でき、後で分析したり同僚と共有したりできます。Recording Controlを使用すると、保存するトラフィックをドメイン、コンテンツタイプ、ステータスコードごとに柔軟に設定できます。これは長期のAPI監視に便利です。
モバイルアプリのトラフィックをデバッグするには、CharlesをWiFiプロキシとして設定します。コンピューターと同じネットワーク上のすべてのデバイスがCharlesを介してトラフィックをルーティングできます。正しいHTTPS設定には、モバイルデバイスへのCharles証明書のインストールが必要です。
Androidの場合:Settings → WiFi → Advanced → Proxyを開き、Manualを選択してポート8888とともにコンピューターのIPアドレスを入力します。次に、デバイスでブラウザーを開き、http://chls.pro/sslにアクセスしてCharles証明書をダウンロードします。Android 7+(API 24+)では、Debugビルドでユーザー証明書を信頼するためにnetwork_security_config.xmlが必要です。そうしないと、アプリがCharlesを介してトラフィックをルーティングしない可能性があります。
iOSの場合:Settings → WiFi → プロキシを設定でIPとポート8888を指定します。次にSafari → http://chls.pro/ssl → 証明書プロファイルをインストールします。iOS 10.3+では、追加で証明書の信頼を有効にする必要があります:Settings → General → About → Certificate Trust Settings → Charles Proxyをオンにします。iOSは証明書に関してより厳格で、一部のアプリはSSL Pinningを使用して、信頼できる証明書があってもCharlesを介したトラフィックをブロックする場合があります。
アプリがSSL Pinning(サーバー証明書の固定)を使用している場合、Charlesを介した標準プロキシは機能しません。アプリがCharles証明書を拒否します。解決策:OkHttpまたはURLSessionの設定を介してDebugビルドでSSL Pinningを無効にする、Fridaを使用してランタイムでピニングをバイパスする、またはrootアクセスを持つAndroidエミュレーターを使用する。
Charles Proxyは特定の開発およびテストタスクを解決します。このツールが不可欠な最も一般的なシナリオを見てみましょう。
最も一般的なシナリオはAPIリクエストの正確性の確認です。Charlesは正確なリクエストURL、ヘッダー、本文、パラメーターを表示します。サーバーが予期しないレスポンスを返した場合、JSON構造、エラーコード、レスポンスヘッダーがすぐにわかります。これにより、両側のログなしでクライアント側のエラーとサーバー側のエラーを区別できます。
Throttleプロファイルを使用して、低い接続速度でのアプリの動作をテストできます。ローディングインジケーターが表示されるか、タイムアウトが正しく処理されるか、接続喪失時にUIがフリーズするかどうか。キャッシュのテストは特に重要です。データがすでにロードされている場合、アプリは無限ローディング状態になるのではなく、キャッシュからデータを表示する必要があります。
Breakpointsを使用して、アプリに送信される前にサーバーレスポンスを変更できます。たとえば、データの代わりに空の配列を返す、ステータスコードを500に変更する、JSONに新しいフィールドを追加するなどです。これにより、サーバーコードを変更せずにエッジケースの処理をテストできます。これはモバイル開発におけるCharlesの最も強力な使用法の1つです。
よくある質問
Charles Proxyは30日間の試用期間付きの商用製品です。試用期間終了後もプログラムは動作を続けますが、起動のたびに30分間の一時停止が入ります。ライセンス費用は1コピーあたり$50です。Proxyman(macOS)やmitmproxy(クロスプラットフォーム)などの無料の代替ツールもあります。
はい、iOSシミュレーターは自動的にmacOSのシステムプロキシを使用します。Charlesを起動してSSLプロキシを有効にするだけで、すべてのシミュレータートラフィックが傍受されます。シミュレーターの証明書設定は自動的に行われます。macOSのキーチェーンでCharles証明書を信頼する必要があるだけです。
主な違い:Charlesはクロスプラットフォーム(Windows、macOS、Linux)、ProxymanはmacOSとiOSのみです。Charlesはより広範なツールセット(Rewrite、Map Local、Repeat、Auto Save)を持っていますが有料です。Proxymanは基本機能が無料で、モダンなインターフェースとネイティブのiOSシミュレーター統合を備えています。
Charlesはプロキシを通過するトラフィックにレイテンシーを追加します。特にアクティブなSSLプロキシ(復号化/暗号化)の場合に顕著です。現代のコンピューターでは、遅延はリクエストあたり5〜15ミリ秒です。パフォーマンステストでは、Recording Controlを介して静的コンテンツ(CSS、JS、画像)のSSLプロキシを無効にすることをお勧めします。
Charlesは以下の形式へのエクスポートをサポートしています:.chls(ネイティブ、Charlesで再開するため)、HAR(HTTP Archive、ブラウザーや他のツールで開く)、CSV(Excelやスプレッドシートで処理するため)、Trace(curl互換形式で特定のリクエストをエクスポートするため)。File → Export Sessionメニューからエクスポートします。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。