18
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

team-lab-engineeringAdvent Calendar 2019

Day 6

プロキシアプリCharlesで通信まわりのデバッグが快適になったので布教したい

Last updated at Posted at 2019-12-05

この記事はチームラボエンジニアリングアドベントカレンダー6日目の記事です。

はじめに

iOSアプリ開発でCharlesを使ってみたところ、通信まわりのデバッグがたいへん快適になりました!
モバイルだけでなく、Web開発でも通信周りのデバッグでCharlesは威力を発揮しそうです。
導入も簡単で、10分あれば設定が完了します。

この記事では、以下についてまとめています。

  • Charlesの導入方法
  • 通信をキャプチャしたい端末側の設定(PC, iOS実機, iOSシミュレータ)
  • Charlesでのデバッグ方法

とにかく、みんなCharles使おうぜ!という布教記事です:innocent:

Charlesについて

公式サイト
https://www.charlesproxy.com/

モバイル開発・Web開発かかわらず、こんなことでお困りではないでしょうか?

  • サーバがメンテナンス中で通信まわりの実装の確認ができない
  • 開発用のモックサーバを書き換えに行くのが面倒
  • 正しい順番で複数のAPIを呼べているか不安…

プロキシアプリCharlesを使えば、自分のPC上で通信をキャプチャ&編集できるので、これらの悩みが一気に解決します!

有料アプリ(50US$)ですが、30日間は無料で利用できます。
ただし5分に1回ぐらい購入してねアラートが出る、かつ30分でアプリが強制終了します…
イラっとしたら購入しましょう :moneybag:

Charlesでできること

  • 通信のモニタリングがリアルタイムできる!(ブレイクポイントも置ける)
  • 通信のリクエスト・レスポンスを自由に書き換えられる!
  • 低速の通信状況をシミュレータできる!
  • リバースプロキシを試せる!

…などなど通信まわりのハンドリングが自由自在にできます。
激アツです:fire:

Charlesの導入方法

バージョン: 4.5.4 (2019/11/28時点での最新版)

1. Charlesのダウンロード

スクリーンショット 2019-11-26 13.45.49.png
  • Charlsを立ち上げる。
スクリーンショット 2019-11-28 21.28.55.png

2. プロキシの設定

  • プロキシの設定を行う
スクリーンショット 2019-11-26 14.32.14.png
  • 画像のように設定されていればOK
スクリーンショット 2019-11-26 14.31.59.png

3. 証明書の設定

  • 証明書の設定を行う
スクリーンショット 2019-11-26 14.33.11.png
  • キーチェーンアクセスが表示されるので、Charles Proxy CAを探す
スクリーンショット 2019-11-26 14.30.41.png
  • 「常に信頼」に変更する
スクリーンショット 2019-11-26 14.31.01.png

4. SSLプロキシの設定

  • SSLプロキシの設定を行う
スクリーンショット 2019-11-26 14.34.24.png
  • 「Enable SSL Proxying」にチェックを入れ、「Add」をクリック
スクリーンショット 2019-11-26 14.34.42.png
  • Hostにワイルドカード「*」を設定
スクリーンショット 2019-11-26 14.35.25.png

これで下準備は完了です!簡単!

Charlesで通信をキャプチャしたい端末側の設定

1. ローカルPC

  • 「Proxy」 → 「macOS Proxy」を選択
スクリーンショット 2019-12-01 23.09.30.png
  • PCの通信が表示されればOK
スクリーンショット_2019-12-01_23_18_21.png

2. iOSの実機

※ 画像のOSのバージョンは12.3.1ですが、13.2.2も同様に設定できました。

プロキシの設定

実機の通信をキャプチャーするためには、Charlesを起動させているPCと同じIPアドレスで接続する必要があります。

  • [Charles側]以下を選択して、表示されたローカルIPアドレスをメモしておく
スクリーンショット 2019-11-26 14.38.13.png
  • [実機側]Charlesを起動させているPCと同じwifiに接続して、接続先の詳細から「プロキシを構成」を選択
スクリーンショット 2019-11-26 14.38.13.png
  • 「手動」を選択して先ほどメモしたIPアドレスを入力
IMG_0016.png

証明書の設定

IMG_0018.PNG
  • 「設定」を開いて、インストールを完了させる
IMG_0020.PNG IMG_0020.PNG
  • [Charles側]設定が完了すると、一度だけ以下のアラートが表示されるので「Allow」を選択
スクリーンショット 2019-11-26 14.41.22.png
  • Charlesにシミュレータの通信が表示されていればOK

3.シミュレータ

※ 画像のシミュレータのXcodeバージョンは11.1です。

  • [Charles側]「Help」→「Install Charles Root Certificate in iOS Simulators」を選択して証明書をインストールする
スクリーンショット 2019-12-02 0.52.46.png
  • [シミュレータ側]設定から「about」を選択
スクリーンショット 2019-12-02 0.52.46.png
  • 「Certificate Trust Settings」を選択
スクリーンショット 2019-12-02 0.52.46.png
  • Charlesの証明書をONに変更する
スクリーンショット 2019-12-02 0.52.46.png
  • Charlesにシミュレータの通信が表示されていればOK

Charlesでのデバッグ方法

Charlesには色々なデバッグ機能がありますが、ここでは私が最もよく使っている2つのデバッグ機能をご紹介します。

1. 通信のレコーディング

  • 「Proxy」 → 「Start Recording」 を選択  
スクリーンショット 2019-12-02 1.40.26.png
  • もしくは画面上部の記録スタートボタンを押下する スクリーンショット 2019-12-02 1.40.47.png

  • 通信が一覧で表示されるので、詳細を確認したいURLをクリック

スクリーンショット_2019-12-01_23_18_21.png

2. 通信のレスポンス書き換え

  • ブレイクポイントを設定する 「Proxy」→ 「Brakepoint Settings」
スクリーンショット 2019-11-26 15.05.35.png
  • 「Add」→ブレイクポイントを貼りたいURL(= 書き換えたいURL)を設定する
スクリーンショット 2019-11-26 15.06.07.png
  • ブレイクポイントが追加される
スクリーンショット_2019-11-26_15_05_56.png
  • ブレイクポイントを貼ったURLとの通信が走ると、通信をキャプチャするので「Edit Response」タブで通信のレスポンスを書き換え
スクリーンショット_2019-11-26_15_05_10.png
  • 編集が終わったら画面下部の「Excute」をクリックすると、編集後の通信が走る

まとめ

プロキシアプリCharlesの導入とデバッグ方法について、簡単にご紹介しました。

公式サイトでは以下のようにCharlesが紹介されています。

Charlesは、デバッグを迅速で信頼性が高く、高度なものにします。時間とフラストレーションを節約できます!

実際にこのアプリを使ってみて、デバッグの時間とフラストレーションを節約できてるなーと実感しています:innocent:
Charlesを使って快適なデバッグライフを送りましょう!

参考文献

18
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?