アプリをcharlesでデバッグする方法

## はじめに

株式会社エアークローゼットでエンジニアをしているtangoと申します。

この記事は[エアークローゼット　アドベントカレンダー2022](https://qiita.com/advent-calendar/2022/air-closet "エアークローゼット　アドベントカレンダー2022")の8日目の記事になります。

今回はプロキシアプリであるCharlesを使って、モバイルアプリをデバッグする方法を紹介したいと思います。
アプリ開発だけではなく、web開発の方でも使えるので、ぜひ最後までご覧ください。

## 背景
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/6552f587-a090-76c1-efd4-ba6f9a7855e9.png)
アプリ開発するときに、下記のような問題に直面した経験がある人も多いかと思います。
・最近、アプリが重い。ボタンを押しても反応がない。ネットワークが遅いのか
・なぜかお知らせを押すとエラーが出る。すぐにリクエストとレスポンスを見たいけどどうすればいいだろうか。
・APIを修正したけど、本番環境のアプリで試してみたいけどできるかな？
などなど
みなさんは、こんな時どうしますか？

みんなどうしますか？
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/9d57a10d-754e-d06b-1358-2004686dc845.png)

一般の方法だと、Xcodeでアプリをビルドしてシミュレーターなどで、アプリを開いて、デバッグするという感じだと思いますが、他にもう１つの方法があります。
それは、[Charles](https://www.charlesproxy.com "Charles")を使うことです（チャールズ）

Charlesを使うことで、本番環境のアプリを直接デバッグでき、リクエスト・レスポンスを書き換えることができるので、かなり便利だなと思ってます。

### Charlesの素敵なところ

Charlesはたくさんの機能を提供していますが、個人的には下記の機能が一番良いかなと思います。
・端末の通信内容を確認できる
・リクエストヘッダ内容とレスポンスを書き換えることができる。
・デザインの修正をデプロイ不要で確認できる。
・Breakpoint: 特定な通信に対してブレークポイントを設定できる。
・Throttling(スロットリング): 通信速度を制限できる。

### Charlesダウンロード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/d0bdc496-c791-9a1d-60ff-8dfb7cf9e550.png)
CharlesはWindow, Mac OS, Linuxをサポートしています。
公式サイトからインストールすることができます。
https://www.charlesproxy.com/latest-release/download.do

ダウンロードしたら、Charlesの設定をしましょう。

### Charles側のSSLプロキシ設定
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/0b16c988-8669-e5a6-b4cd-1a2775fc0f91.png)
メニュから、Proxy -> Proxy Settingsを選んで、ポートを8888に設定してください。

### 端末側の設定
次に、端末側の設定をしましょう。
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/17e83ce6-1dca-5e5e-40a1-37466a8948bc.png)
① PCと同じWIFIを使ってください
② 一番下にある「プロキシを構成」を選ぶ
③ 手動を選ぶ
④ PCのIPアドレスとポートを入力してください
サーバー： PCのIPアドレス
ポート：8888
⑤ 保存する

しばらく待つと、PCの方で、下記のポップアップが出てきて、Allowを押してください
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/e9e745ab-8cbc-9931-75f1-a2113a02579e.png)

次に、端末にSSL証明書をインストールします。
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/c307e372-9874-8735-91bd-4d866af037d6.png)

Safariで[https://chls.pro/ssl](https://chls.pro/ssl)を開いて、プロファイルをダウンロードしてください。
ダウンロードしたら、設定を開いて、「プロファイルがダウンロード済み」を押すと、インストールモーダルが表示されて、インストールをしてください。


インストール完了したら、その証明証を有効にする必要があります。
設定 -> 一般 -> 情報 -> 証明書信頼設定 -> Charlesを有効にしてください。

### デバッグ方法

#### 1. リクエスト・レスポンスを確認する

デバッグは結構簡単です。
まず、端末の方でアプリを開くと、Charles画面上でリクエストが表示されます。
![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/7dd2a132-2d20-2c74-a84c-6c4558b25de7.png)
SSL証明書を正しくインストールしないと、リクエストとレスポンスを見れないので、注意が必要です。

#### 2. レスポンスを書き換える
次に、レスポンス書き換え方を紹介します。わかりやすいようにお知らせ画面を例にします。
![図15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/d31427a4-0055-7e63-a0d1-6c3f148b86a3.png)
メニューからTools -> Rewriteを選んでください。
![図16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/14cd744d-728d-d5fb-c217-bde409ba1cd8.png)
Addボタンを押して、Protocol, Host, Port, Pathを自分に合わせて変更してください。
![図17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/c789ced4-048b-d217-b098-b70bfdc9731b.png)
一番下にあるAddボタンを押して、TypeをBodyにし、WhereをResponseにして、Replaceのところで、書き換えたいレスポンスを貼り付けてください。
![図18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103998/3792ad2b-1d12-6256-a1e9-6dd913e43e54.png)
アプリ上で、お知らせ画面を開いたら、お知らせ内容が変わったことがわかると思います。画像のようにみてもらえばわかると思いますが、タイトルと説明文が変わっています。アプリをデプロイしなくても本番環境で直接デバッグできるので、開発効率が上がります。
```
...
"title": "テスト_2022 [XS,XL,XXLサイズ選定] 最大80%OFFのECO SALE開始!",
"description": "テスト",
...
```
他に、たくさんの機能がありますので、お時間あるときに使ってみてください。

### あとがき
最後までご覧いただきありがとうございました。
[エアークローゼット Advent Calendar 2022](https://qiita.com/advent-calendar/2022/air-closet)はまだ続きますので、興味あれば、ぜひ他のエンジニア、PMの記事もご覧いただければと思います。