Android StudioのNetwork Inspectorは、モバイルアプリのネットワークトラフィックをリアルタイムで監視・分析するために設計された組み込みのプロファイリングツールです。Android Developers公式ドキュメント(2025)によると、このツールではリクエストの実行時間、転送データ量、各呼び出しのHTTPステータスを追跡できます。このツールはアプリのコードを変更する必要がなく、API Level 14以上のどのプロジェクトでも"そのまま"動作します。
重要なポイント
Network Inspectorは、Android Studioに組み込まれたネットワークアクティビティのプロファイリングツールです。開発者は、ヘッダー、リクエストとレスポンスの本文、ステータスコード、実行時間を含め、アプリから送信されるすべてのHTTP/HTTPSリクエストをリアルタイムで表示できます。Android Studio 3.0以降、Android Profilerパネルから利用できます。
Network Inspectorの主な目的は、モバイルアプリとサーバー間のネットワーク通信のデバッグです。このツールは、送信データの正確性の確認、応答時間の分析、APIエラーの検出、非効率的なネットワークパターン(1画面の読み込み時の複数リクエストなど)の発見に使用されます。Network InspectorはAPI Level 14以上のすべてのデバイスで動作します。
このツールは、Androidの主要なHTTPクライアント(OkHttp(2.x以降)、Retrofit、Ktor(KMM)、UrlConnection、Apache HttpClient(非推奨)、WebView)をすべてサポートしています。OkHttpとRetrofitにはOkHttp Profilerライブラリが必要で、Android Studio 4.1以降を使用すると自動的に接続されます。Ktorではインターセプターの個別設定が必要です。
Network Inspectorは、Android Profilerとともに導入されるProfiler Agentメカニズムを使用して、システムレベルでネットワーク呼び出しをインターセプトします。正しく動作させるには、アプリのデバッグビルドが必要です。このツールはアプリのコードを変更せず、基本的な機能に依存関係の追加も必要ありません。
プロファイリングを開始すると、Network Inspectorはアプリのデバッグプロセスに接続し、OkHttp Client、UrlConnection、その他のサポートされているライブラリを通過するすべてのHTTP呼び出しを監視します。各リクエストはタイムスタンプ付きで記録されるため、ネットワークアクティビティのタイムラインを構築できます。HTTPSにはシステムレベルのレイヤーが使用され、転送中の暗号化は維持されつつ、Studio内でデコードされたコンテンツを表示できます。
データ収集は、ホストの別プロセスで動作するAndroid StudioのProfiler Serviceを通じて行われます。デバイス上では、ADBチャネル経由でリクエストのメタデータを送信する軽量エージェントが動作します。これによりアプリのパフォーマンスへの影響が最小限に抑えられ、Googleのデータによるとオーバーヘッドは3%未満です。リクエストデータ(本文、ヘッダー)自体は、詳細ビューがアクティブな場合にのみ転送されます。
// Network Inspectorとの統合のためのOkHttpのセットアップ
val client = OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BASIC
})
.build()
// Network Inspectorは、clientを介したすべての呼び出しを自動的にインターセプトします
client.newCall(Request.Builder()
.url("https://api.example.com/data")
.build()).execute()
Network Inspectorは、ネットワークトラフィックを総合的に分析するためのツール群を提供します。各機能は、ヘッダーの確認からAPIのパフォーマンス分析まで、特定のデバッグタスクの解決を目的としています。
Network Inspectorのメイン画面には、すべてのリクエストの時系列がタイムラインとして表示されます。各リクエストは色付きのバーで表されます。緑は成功レスポンス(2xx)、青はリダイレクト(3xx)、黄はクライアントエラー(4xx)、赤はサーバーエラー(5xx)です。バーの長さは、接続から完全なレスポンスの受信までのリクエスト実行時間に対応します。これにより、遅いリクエストやエラーで失敗したリクエストをすぐに特定できます。
| パラメータ | 説明 | 値の例 |
|---|---|---|
| URL | リクエストの完全なアドレス | https://api.example.com/v2/users |
| Method | リクエストのHTTPメソッド | POST |
| Status | レスポンスのHTTPコード | 200 OK |
| Size | リクエスト+レスポンスのサイズ(バイト) | 12.4 KB |
| Time | 合計実行時間 | 342 ms |
特定のリクエストを選択すると、詳細パネルが開きます。Headers(リクエストとレスポンスのすべてのヘッダー)、Request Body(テキストまたはバイナリ形式のリクエスト本文)、Response Body(JSONフォーマット対応のレスポンス本文)、Cookies(送受信されたCookie)、Timing(DNS、Connection、TLS Handshake、Request、Responseのフェーズ別時間内訳)です。
Network Inspectorは、URL、HTTPメソッド、ステータスコード、コンテンツタイプによるリクエストのフィルタリングをサポートしています。特定のAPIにのみ焦点を当てるために、特定ドメインへのリクエストを除外することもできます。検索は本文やヘッダーを含むリクエストのすべてのフィールドで機能し、アプリの特定機能のデバッグに便利です。組み合わせフィルターを使用すると、プロファイリングの起動ごとに自動的に適用されるルールセットを作成できます。
タイムラインはURLパターンによるリクエストのグループ化をサポートしています。たとえば、/api/v2/users/* 形式のすべてのリクエストを1つのグループに折りたたむことができます。これにより、アプリが短時間に数百のリクエストを行う場合の分析が容易になります。隣接するリクエストを比較する機能は、繰り返し呼び出し時のサーバーレスポンスの変化を検出するのに役立ちます。
Network Inspectorの実践的な使い方には、データ形式の確認、遅いエンドポイントの特定、未クローズの接続によるメモリリークの発見、キャッシュ分析など、典型的なデバッグシナリオが含まれます。
サーバーがデータを期待どおりの形式で返すことを確認するのはよくあるタスクです。Network Inspectorは、構文のハイライトを含むJSONフォーマットのレスポンス本文を表示します。クライアントでレスポンスをパースできない場合、インスペクターで原因(フィールドの欠落、データ型の誤り(数値の代わりの文字列)、過剰なネスト)がすぐに確認できます。サーバーがエラーを返した場合、インスペクターはコードとメッセージを含むエラー構造を表示します。バイナリ形式(Protocol Buffers、画像)の場合は、サイズとcontent-typeが表示されます。
Timingタブは、リクエストの実行をDNS Resolution、TCP Connection、TLS Handshake、Request Send、Response Receiveのフェーズに分割します。合計時間が1〜2秒を超える場合は、フェーズ別の内訳で原因を特定できます。たとえば、DNSが遅い場合はリゾルバの問題、TLS Handshakeが遅い場合はサーバー側のプロトコルバージョンの古さ、Responseが遅い場合はサーバーコードの遅延や過剰なデータを含む非効率的なリクエストを示します。Timingの分析は、サーバー側の最適化を始める前のボトルネックの発見に役立ちます。
Network Inspectorは、画面を回転するたびにActivityがデータ読み込みを再作成する場合など、冗長なリクエストの検出に役立ちます。タイムライン上で同じリクエストが連続すると、問題が明確に示されます。解決策としては、キャッシュの使用、状態を保持するViewModelの利用、1回だけ読み込むためのSingleLiveEventの使用などが考えられます。
// 重複をなくすためのOkHttpによるリクエストのキャッシュ
val cache = Cache(
File(context.cacheDir, "http_cache"),
cacheSize = 10L * 1024 * 1024 // 10 MB
)
val cachedClient = OkHttpClient.Builder()
.cache(cache)
.addNetworkInterceptor(CacheInterceptor())
.build()
Network Inspectorは幅広い機能を備えていますが、考慮すべき制限がいくつかあります。自己署名証明書を使用したHTTPSのインターセプトやサードパーティライブラリのトラフィック分析など、一部のシナリオでは代替ツールが必要になる場合があります。
Network InspectorはAndroidアプリのみで動作し、iOSには対応していません。Kotlin Multiplatform(KMM)では、ネイティブ部分で実行されるリクエストの一部が表示されない場合があります。一部のライブラリ(gRPC、WebSocket(HTTPではない)、Apollo経由のGraphQL(3.x以前)など)は、追加のインターセプターを設定するまで部分的にしかインターセプトされないか、まったくインターセプトされない場合があります。
ネットワークトラフィックをより深く分析するためのサードパーティソリューションがあります。Charles Proxy(HTTPSインターセプト対応の本格的なプロキシサーバー)、Proxyman(macOS用の代替)、Wireshark(パケットレベルでの分析)、Stetho by Facebook(Chrome DevToolsとの統合)、Chucker(アプリ内でリクエストを検査するライブラリ)です。各ツールにはそれぞれの用途があります。CharlesとProxymanは開発初期のサーバーとの連携デバッグに欠かせず、Chuckerはテストビルドでの情報収集に適しています。
| ツール | 種類 | プラットフォーム | HTTPS | HAR |
|---|---|---|---|---|
| Network Inspector | Android Studioに組み込み | Android | はい | はい |
| Charles Proxy | プロキシサーバー | クロスプラットフォーム | はい | はい |
| Proxyman | プロキシサーバー | macOS, iOS | はい | はい |
| Chucker | アプリ内インスペクター | Android | はい | いいえ |
| Wireshark | パケットアナライザー | クロスプラットフォーム | いいえ | いいえ |
よくある質問
アプリがデバッグ設定でビルドされ、Android Profilerを接続した状態で起動されていることを確認してください。OkHttp 4.xを使用している場合は、ライブラリを最新版に更新する必要があるかもしれません。Ktorの場合、インターセプトをサポートするEngineを持つKtorクライアントを使用した場合にのみリクエストが表示されます。
はい、Network Inspectorは追加設定なしでHTTPSトラフィックをサポートしています。Charles Proxyとは異なり、ルート証明書のインストールは不要です。このツールは、デバッグセッション内でトラフィックをデコードするためにAndroid Profilerのシステムメカニズムを使用します。
Network InspectorはHAR(HTTP Archive)形式でデータをエクスポートできます。パネルの右上にあるExportボタンをクリックします。HARファイルは任意のHARビューアーで開くか、さらに分析するためにCharles ProxyやProxymanにインポートできます。
Googleのデータによると、アクティブなプロファイリング時のオーバーヘッドは3%を超えません。Network Inspectorを無効にした場合、オーバーヘッドはありません。このツールはリリースビルドでの使用は推奨されませんが、デバッグセッションでは最新のデバイスへの影響はほとんどありません。
レスポンス本文が読めないrawデータとして表示される場合、gzip圧縮またはバイナリ形式(Protocol Buffers、MessagePack)が原因である可能性があります。Network Inspectorはgzipを自動的にデコードします。カスタム形式の場合は、レスポンスヘッダーのContent-Typeヒントを使用してください。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。