【開発支援ツール】Charlesの使い方【神ツール】

# Charlesの使い方
![charles](https://camo.qiitausercontent.com/8b10de84f8ec7e605d2c98ad831c517f5dfc9a72/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f333630332f32633061613066322d373363662d656134632d356430352d3263643330613164663237342e6a706567)
## 1.Charlesとは

## 注意
本稿は古い記事です。こちらに新しい記事を用意しましたので、これからCharlesを使う方は新しい方をご参照くださいmm
[【開発支援ツール】Charlesの使い方更新版【神ツールv4.5.6】](https://qiita.com/ishigaki_hige/items/cf86d35e13470a543551)

**1-1**. はじめに  
アプリ開発をしているとAPIのレスポンスを見たかったり、正しいドメインにアクセスしているかを確認したい場合が出てくると思います。  
そんな時に便利なツールが**Charles**です！(とても便利)  
開発に携わるのならば、是非Charlesを使えるようになりましょう！！(とてもとても便利)  
神ツールです

---
**1-2**. Charlesでできること  
Charlesを使用すればこんなことができます。  
・**通信のモニタリング**
　-アクセスしたドメインやAPIのレスポンスを確認できます。  
・**通信速度のシミュレーション** 
　-通信速度を変えて通信できるようになります。タイムアウトのテストなどができます。  
・**データの上書き**
　-APIのリクエストやレスポンスを書き換えることができます。  
Charlesは無料期間があり、インストール後30日間はすべての機能を利用することができます。  
しかし、30分ごとに強制再起動が行われるためウザいです。  
ライセンス買ってください。
<br>
## 2.Charlesのインストール  
**2-1**. インストール手順  
Charlesのインストールは[ダウンロードページ](http://www.charlesproxy.com/download/)から、インストーラをダウンロードし、指示に従って手順を踏むだけで行えます。  
使っているOSに合ったインストーラをダウンロードしましょう。  
![Charles_Download](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVdWtSOUNpa0VjLTA)  
Charlesがインストールできたら、次は設定を行います。  
## 3.Charlesの設定  
**3-1**. ProxySetting  
Charlesを起動したら、メニューバーの **Proxy** -> **Proxy Setting...** を開きます。`HTTP Proxy`のポート番号はデフォルトのままで大丈夫です。(デフォルトは8888)  
念のため"Enable transparent HTTP Proxy"にチェックを入れましょう。  
![Proxy_Setting](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVd0g0X3l1TmJaNUU)  
![Proxy_Setting_Detail](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVUzZnajJkUWI0TUk)  
また、WEBブラウザなどの通信を見たいなら、項目"macOS"の"Enable macOS Proxy"にチェックを入れます。  ![Proxy_Setting_macOS](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVREdJTzhuZHF1SDQ)  

---

**3-2**. SSLProxySetting  
これでHTTP通信を見ることができるようになりました。次にHTTPS通信を見るために、SSLプロキシを有効にするための設定を行います。メニューバーから **Proxy** -> **SSL Proxy Setting...** を開きます。"Enable SSL Proxying"にチェックを入れ、`Locations`に * (ワイルドカード)を追加します。  
![SSL_Proxy_Setting](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVLUkwakF2UmVzTzA)  
![SSL_Proxy_Setting_Detail](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVcDZQN0F0dkxkcVU)  
`Location`の追加は、"Add"ボタンをクリックし、現れた画面の`Host`に * を入れ、"OK"ボタンをクリックすれば大丈夫です。
![SSL_Add](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVT3VZZFhsWkdScWM)

---

**3-3**. SSL証明書  
SSLの設定が終わったら、SSLの証明書をインストールします。SSL証明書はメニューバーの **Help** -> **SSL Proxying** -> **Install Charles Root Certificate** からインストールできます。  ![Charles_Root_Certificate](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVSXNBODhpcGtZWlU)  
インストールすると、キーチェーンが表示されます。`Charles Proxy Custom Root Certificate`がCharlesのSSL証明書になります。  
しかし、このままではHTTPS通信を行ってもSSLHandShakeが出てしまい、通信を見ることができません。なので証明書をダブルクリックし、"この証明書を使用する時"を`常に信頼`に変更します。  
![Certificate_Default](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVaEFnZ2lybHlMalU)  
　　　　　　　　　**↓**  
![Certificate_Trust](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVRjRPNDlOVXhUbDQ)
## 4.iPhoneとAndroidの設定  
**4-1**. 各端末の設定について  
SSLの設定と証明書のインストールが終わったら、次はiPhoneとAndroidの通信を見るための設定を行います。  
通信をキャプチャするためには、PCと端末は同一のWi-Fiに接続しておく必要があるため、あらかじめ同じWi-Fiに接続しておきます。
また、PC側で接続しているWi-FiのIPが必要になるので、メニューバーの **Help** -> **Local IP Address**を選択して、現在のIPアドレスが表示されるので控えておきます。  
IPアドレスが分かったら、端末のプロキシ接続設定を行います。
![Local_IPAddress](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVcUZxbDFpVjBwS2s)

---

**4-1-1**.iPhoneの場合  
ホーム画面の **設定** -> **Wi-Fi** から接続しているWi-FiをタップしてWi-Fi設定画面を表示します。Wi-Fi設定画面の最下部に`HTTPプロキシ`項目があるので、"手動"にした上で、控えておいた`IPアドレス`と`ポート番号`を入力します。  
これでiPhoneの通信をCharlesで見ることができます。  
さらにSSL通信も見られるようにiPhoneに`証明書`をインストールします。`証明書`はCharlesを起動して、プロキシ接続をしたまま、Safariで[http://www.charlesproxy.com/getssl](http:www.charlesproxy.com/getssl)を開きます。  
するとインストール画面が開かれるので、そこからインストールします。これでSSL通信も見られるようになります。  
**★★2017-06-06追記★★**  
iOS10.3から証明書の設定項目が１つ加わりました。  
ホーム画面の **設定** -> **一般** -> **情報**の最下部にある証明書信頼設定がタップして証明書を信頼する必要があります。  
[参考サイト-Qiita](http://qiita.com/shtnkgm/items/cd32df0c7b4bd424f107)

---

**4-1-2**.Androidの場合  
**設定**からWi-Fi設定を開き、接続しているWi-Fiを長押しします。その後、**ネットワーク設定を変更** -> **プロキシ** -> **手動**とした上で、控えておいた`IPアドレス`と`ポート番号`を入力します。  
次にAndroidに`証明書`をインストールします。`証明書`はCharlesを起動して、プロキシ接続をしたまま、Chromeで[http://www.charlesproxy.com/getssl](http:www.charlesproxy.com/getssl)を開きます。  
するとインストール画面が開かれるので、そこからインストールします。  
注意すべき点は、両OSともCharlesを起動した上でプロキシ接続をしておくことです。そうしないと上記のURLを叩いても証明書のインストールができないため、確認した上でインストールしてください。  
## 5.通信をキャプチャする  
**5-1**. 通信内容の確認  
上記までの設定が終わると、端末及びPC上の通信がCharlesに表示されます。また、端末の場合、初回接続時にアラートが出るので`Allow`で通信のキャプチャを許可します。  
![Charles_Capture](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVVFpDWkllVkplR3M)  
画像のように通信しているドメインが表示されます。ドメインを開いていくと、エンドポイントのオーバービューを見ることができます。また、エンドポイントに対してのリクエストやレスポンスも確認することができます。

---

**5-2**. ブレークポイントを張る  
Charlesではドメインやパスに対して`ブレークポイント`を張る事もできます。ブレークポイントを張った状態で通信をすると、リクエスト及びレスポンス時に通信が一旦止まります。この時、レスポンスの内容を書き換えることができるので、アプリ開発でAPIを叩くテストをする時や、任意のレスポンス時の動作確認をするときはレスポンスを書き換えて確認しましょう。とても便利です。  
![Charles_request](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVOEUxY09lTlppWWs) 
![Charles_response](http://drive.google.com/uc?export=view&id=0B1mzDVhT-5rVUUFlcTI3OWZPTGc)  

---

**5-3**. レスポンスの編集  
アプリ開発では、結構APIを叩きます。しかし、必要なAPIがまだ無かったり、メンテナンス中でアクセスできない状況も割とあります。  
その時にレスポンスを自分で書き換えて、あたかもAPIが叩けた風にすることでAPIがなくてもテストや動作確認ができますので、ぜひ使いこなせるようにしましょう。便利だよ。  
初めて使うときは何をどうすればいいのか戸惑う事もあると思います。もし分からないことがあればWikiを読み直したり誰かに聞いてみてください。Charlesを使ってストレスフリーなアプリ開発を目指しましょう！  
## 6.参考文献  
[プロキシアプリで開発をスムーズに](https://app.codegrid.net/entry/charles-1)
[通信系のデバッグには Charles が便利](http://qiita.com/usagimaru/items/d340e87da98e62f99b60)