導入: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 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限定で安全に使う
迷ったら:通信を壊してみる。
そこから本当のバグが見えます。


コメント