Proxyman の Breakpoint で iOS のリクエスト/レスポンスを編集する
この短い記事では、デバッグの目的で、Proxyman の Breakpoint ツールを使って API 呼び出しを書き換える方法を紹介します。
ソフトウェア開発では、ブレークポイントとは、意図的に処理を止める、または一時停止させるポイントのことです。ここで API のリクエストやレスポンスを確認・編集したり、処理をそのまま進めるか、ブロックするかを判断したりできます。
1. Breakpoint を使うタイミング
基本的な動作は次のとおりです。
- リクエストで Breakpoint を有効にすると、Proxyman はリクエストがサーバーに届く前に停止させます。
- レスポンスで Breakpoint を有効にすると、レスポンスがアプリに届く前に停止させます。
これにより、リクエストやレスポンスを書き換えて、UI のエラーや、バックエンドの特定の機能(セキュリティ上の脆弱性を含む)をテストできます。この記事では、Breakpoint の動作を確認するために、簡単な例を 2 つ取り上げます。
- 例 1: ユーザーの検索クエリを変更して、アプリの動作を確認する(リクエストを変更)
- 例 2: レスポンスのユーザー名とアバターを変更して、UI が長いメッセージを正しく扱えるか確認する(レスポンスを変更)
2. リモートデバイスに Proxyman の証明書をインストールする
始める前に、iOS デバイスに Proxyman の証明書をインストールして、HTTPS の内容を確認できるようにしておきましょう。
リモートデバイスから送られてくるリクエスト
テストに集中できるように、Pin を使い、テストシナリオ用に 2 つのエンドポイント api.unsplash.com/me と api.unsplash.com/search を絞り込みます。
Pin を使ってエンドポイントを絞り込む
3. エンドポイントに一致するルールを定義する
次に、Breakpoint で送信リクエストや受信レスポンスをどのようにキャプチャするかを定義します。この条件は 2 つの方法で設定できます。
方法 1: メニューバーから設定
メニューバーから Tools → Breakpoint → Rules を選択します。

すると、Breakpoint rules ウィンドウが表示され、ここで一致条件をすべて定義できます。新しいルールを追加するには、ウィンドウ左下の「+」ボタンをクリックします。
Breakpoint の一致ルールを定義するための新しいウィンドウ
最初のシナリオでは、エンドポイント「api.unsplash.com/search」を入力し、「Request」を選択します(検索クエリだけを変更したいため)。

「Add」ボタンを押すと、これ以降、そのエンドポイントへ送信されるリクエストはすべて Breakpoint で停止されるようになります。

方法 2: 右クリックで設定
一致ルールを定義するもう 1 つの方法は、URL(エンドポイント)を選択して 右クリック → Tools → Breakpoint を選ぶことです。
URL を右クリック → Tools → Breakpoint
Proxyman は選択したエンドポイントを条件として自動的に使用するため、エンドポイント「api.unsplash.com/me」が自動で入力されているのがわかります。
2 つ目のシナリオでは「Response」を選択しましょう。
エンドポイントは自動で入力されます。一致させる対象として Request か Response のどちらかを選べます
「Done」を押すと、新しいルールが Breakpoint rules ウィンドウに追加されたことがわかります。

設定が完了したので、リクエストやレスポンスを変更して、アプリの動作を確認しましょう。
4. Breakpoint でリクエストを変更する
まず Unsplash アプリを起動します。次に、検索ボックスで「eat clean」を検索し、Breakpoint が発動するエンドポイントの呼び出しを発生させます。
API 呼び出しがキャプチャされると、Breakpoints ウィンドウが表示され、クエリを簡単に編集できます。

ここで、検索クエリを「eat clean」から「mountain」に変更します…
… 元のリクエストでは「eat clean」の画像が表示されます(左)が、リクエストを変更すると、アプリは「mountain」の画像を表示します(右) :)

その結果がこちらです。
Breakpoint でリクエストを変更すると、アプリは「mountain」の画像を表示します(上)
5. Breakpoint でレスポンスを変更する
次に、アプリがどう処理するかを確認するため、ユーザー名とアバターを変更してみます。Unsplash アプリを開き直して、エンドポイント「api.unsplash.com/me」を呼び出しましょう。
API レスポンスがキャプチャされると、リクエストの場合と同様に、レスポンスの内容を編集できます。
変更前の元のコンテンツ
ユーザー名をより長い名前に変更し、アバターも更新してみましょう。
変更後の新しいコンテンツ
「Execute」を押すと、元のユーザー名とアバター(下)の代わりに、新しいユーザー名とアバター(上)のプロフィールが表示されます :)
Breakpoint でレスポンスを変更すると、アプリは新しいプロフィールを表示します(右)
6. 次のステップ
Breakpoint を使えば、API のリクエストやレスポンスのどの部分でも変更できます。ただし、アプリが期待する形式の正しいデータを受け取れなかった場合、誤動作やクラッシュが起きる可能性があることにご注意ください。
ご存じですか? 同じ変更を何度もテストする場合は、Breakpoint Templates を使うと、適用したい値を保存しておけます。関係のない通信まで停止しないように、各ルールには狭いホストとパスを指定してください。テストが終わったら、ルールをオフにしてください。オフにしないと、バックグラウンドのリクエストがブレークポイントで待機し続け、アプリが固まったように見えることがあります。
ぜひ遠慮なくこのツールを試して、生産性を高めてください。
それでは、楽しいデバッグを :)
Proxyman は、高性能な macOS アプリで、iOS デバイス、iOS シミュレータ、Android デバイス上のアプリやドメインからの HTTP/HTTPS リクエストをキャプチャして確認できます。
https://proxyman.com からダウンロードできます。
