OkHttp Interceptor vs ProxyMan Script 使い分け

スポンサーリンク

導入:Interceptorで足りる?それともProxyMan?

Androidで通信デバッグをしていると、
必ず一度はこう悩みます。

「OkHttp Interceptorで十分じゃない?」
「ProxyMan Scriptを使うのは大げさ?」

結論から言うと、
この2つは競合しません。役割が違います。

この記事では、
OkHttp Interceptor と ProxyMan Script の正しい使い分けを、
実務で判断できるレベルまで整理します。

先に結論です。

  • Interceptorは「アプリ内部の制御」
  • ProxyMan Scriptは「外部から壊す」
  • 検証フェーズで使い分ける

まず結論を図にすると

  • 通常開発・軽い検証 → OkHttp Interceptor
  • 異常系・WebView含む検証 → ProxyMan Script

この前提を持って読み進めると、
迷わなくなります。

OkHttp Interceptorとは

OkHttp Interceptorは、
アプリ内部で通信をフックできる仕組みです。


class LoggingInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val request = chain.request()
        return chain.proceed(request)
    }
}

特徴は以下のとおりです。

  • アプリコードとして管理できる
  • 条件分岐が書きやすい
  • CI・テストとも相性が良い

Interceptorが得意なこと

① 共通ヘッダの付与

認証トークンやUser-Agentの付与は、
Interceptorの王道ユースケースです。

② 通信ログの出力

debugビルド限定でのログ出力も、
Interceptorが最適です。

③ 軽いリクエスト改変

「この条件のときだけヘッダを変える」
といった用途には向いています。

Interceptorの限界

便利なInterceptorですが、
できないことも多いです。

  • WebView通信は見えない
  • サーバー異常の再現が難しい
  • timeoutを自然に起こせない

ここで登場するのが、
ProxyMan Scriptです。

ProxyMan Scriptとは

ProxyMan Scriptは、
アプリの外側から通信を操作する仕組みです。

  • 通信を止める
  • レスポンスを改変する
  • エラーを注入する

アプリ実装に手を入れず、
通信そのものを壊せるのが最大の特徴です。

Scriptの具体的な活用例については、
以下の記事で詳しくまとめています。


ProxyMan Script活用集(改変・エラー注入)

ProxyMan Scriptが得意なこと

① timeout・無応答の再現

実機で自然に起きにくい状況を、
確実に再現できます。

② レスポンス破壊

フィールド欠損・型不正など、
サーバーを壊さずに再現可能です。

③ WebView通信の検証

Interceptorでは不可能な領域です。

使い分けを間違えると起きる問題

Interceptorで無理に再現しようとする

コードが検証用ロジックだらけになります。

ProxyManに頼りすぎる

通常開発のデバッグ効率が下がります。

どちらも万能ではありません。

実務でのおすすめ運用

  • 通常開発:Interceptor
  • 異常系検証:ProxyMan Script
  • WebView含む検証:ProxyMan Script

これをチームで共有すると、
デバッグ方針がブレなくなります。

セキュリティ・運用上の注意

  • Interceptorのログは本番で出さない
  • ProxyMan Scriptはdebug限定
  • 検証後は必ず無効化

よくある質問

Q. テストコードではどちら?

自動テストではInterceptor、
手動検証ではProxyManが向いています。

Q. Charlesと比べると?

Script前提ならProxyManの方が柔軟です。

まとめ

  • Interceptorは内部制御
  • ProxyMan Scriptは外部破壊
  • 役割を分けるのが正解

迷ったら:Interceptorで無理をしない。
それが健全な設計です。

コメント

タイトルとURLをコピーしました