ProxyMan Script活用集

スポンサーリンク

導入:ProxyMan Script、使っていますか?

ProxyManで通信を「見る」だけで満足していませんか?

中級以上のAndroid開発では、
通信を意図的に壊す・遅らせる・書き換える検証が必須になります。

そこで真価を発揮するのが ProxyMan Script です。

この記事では、
ProxyMan Scriptを使った通信改変・エラー注入の実践パターンを、
実務でそのまま使える形でまとめます。

先に結論です。

  • Scriptを使えば通信は自由に壊せる
  • UI・エラー処理検証の質が一段上がる
  • debug限定で使うのが鉄則

ProxyMan Scriptとは何か

ProxyMan Scriptは、
通信リクエスト・レスポンスをフックして任意の処理を挟める仕組みです。

  • レスポンスを書き換える
  • 通信を止める
  • エラーを偽装する

CharlesのMap Localに近いですが、
条件分岐・非同期制御ができるのが大きな強みです。

Scriptを使う前提条件

  • ProxyManでHTTPS通信が復号できている
  • Android端末がProxyMan経由で通信している
  • debugビルドで検証している

timeout再現については、
以下の記事で詳しく解説しています。


ProxyManで通信を意図的にtimeoutさせる方法

基本構造:ProxyMan Scriptの書き方

Scriptは JavaScript で記述します。


async function onResponse(context, response) {
  return response;
}

この response を加工・遅延・破棄するのが基本です。

活用① レスポンスを改変する

成功レスポンスを、
意図的に失敗レスポンスへ書き換える例です。


async function onResponse(context, response) {
  if (context.request.url.includes("/api/user")) {
    response.statusCode = 500;
    response.body = JSON.stringify({
      error: "internal server error"
    });
  }
  return response;
}

これで、
サーバーを壊さずにエラー画面を検証できます。

活用② フィールド欠損を再現する

「この値がnullだったらどうなる?」
という検証、意外とやっていないケースが多いです。


async function onResponse(context, response) {
  const json = JSON.parse(response.body);
  delete json.userName;
  response.body = JSON.stringify(json);
  return response;
}

UIが落ちるなら、
それはアプリ側の責任です。

活用③ 通信を永遠に返さない(timeout注入)

確実にtimeoutさせたい場合です。


async function onResponse(context, response) {
  await new Promise(() => {});
}

これで、
readTimeoutまでレスポンスが返りません。

活用④ 遅延をランダムに入れる

毎回同じ秒数では、
実運用の再現になりません。


async function onResponse(context, response) {
  const delay = Math.random() * 5000;
  await new Promise(r => setTimeout(r, delay));
  return response;
}

通信が不安定な環境を、
かなりリアルに再現できます。

Android側で見るべきポイント

エラーハンドリング

  • HTTPエラー
  • JSONパースエラー
  • timeout

これらを別々に扱えているかが重要です。

UI状態管理

ローディングが消えるか、
エラー表示が出るか。

ScriptはUI検証ツールでもあります。

よくあるハマりポイント

① Scriptを有効にしたまま忘れる

検証後は必ずOFFにしましょう。

② 本番ビルドで検証しようとする

絶対にやめてください。

③ 何を壊しているか分からなくなる

Scriptは最小単位で管理するのがおすすめです。

実務での使いどころ

  • エラー画面のUI確認
  • 例外系テストの再現
  • レビュー前の品質チェック

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

  • debug用途限定
  • 証明書・Scriptは検証後削除
  • ログ共有時は情報マスク

よくある質問

Q. OkHttp Interceptorで代用できない?

できますが、WebView通信やサーバー依存挙動は再現できません。

Q. Scriptは重くならない?

検証用途なら問題ありません。

まとめ

  • ProxyMan Scriptで通信は自在に壊せる
  • エラー注入は品質向上の近道
  • debug限定で安全に使う

迷ったら:通信を壊してみる。
そこから本当のバグが見えます。

コメント

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