Network Inspectorとは何か、動作原理とネットワークリクエストの監視

著者: IT Sectr 公開日: 2026-05-07 読了時間: 8 分

Android StudioのNetwork Inspectorは、モバイルアプリのネットワークトラフィックをリアルタイムで監視・分析するために設計された組み込みのプロファイリングツールです。Android Developers公式ドキュメント(2025)によると、このツールではリクエストの実行時間、転送データ量、各呼び出しのHTTPステータスを追跡できます。このツールはアプリのコードを変更する必要がなく、API Level 14以上のどのプロジェクトでも"そのまま"動作します。

重要なポイント

  • Network Inspectorは、レスポンスのヘッダーと本文を表示できるネットワークリクエスト監視用のAndroid Profilerコンポーネントです
  • トラフィックのインターセプトは、OkHttp、Retrofit、Ktor、WebViewを含むアプリから行われるすべてのHTTP呼び出しに対して自動的に行われます
  • タイムラインには、各呼び出しの所要時間、サイズ、ステータスを示すリクエストの時系列が表示されます
  • 詳細ビューには、各リクエストのヘッダー、リクエストとレスポンスの本文、Cookie、実行時間の段階別内訳が含まれます
  • データのエクスポートをHAR形式で行うことで、ネットワーク通信を同僚と共有したり、後で分析するために保存したりできます

Network Inspectorとは何か?

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の仕組み

Network Inspectorは、Android Profilerとともに導入されるProfiler Agentメカニズムを使用して、システムレベルでネットワーク呼び出しをインターセプトします。正しく動作させるには、アプリのデバッグビルドが必要です。このツールはアプリのコードを変更せず、基本的な機能に依存関係の追加も必要ありません。

トラフィックのインターセプトの仕組み

プロファイリングを開始すると、Network Inspectorはアプリのデバッグプロセスに接続し、OkHttp Client、UrlConnection、その他のサポートされているライブラリを通過するすべてのHTTP呼び出しを監視します。各リクエストはタイムスタンプ付きで記録されるため、ネットワークアクティビティのタイムラインを構築できます。HTTPSにはシステムレベルのレイヤーが使用され、転送中の暗号化は維持されつつ、Studio内でデコードされたコンテンツを表示できます。

データ収集のアーキテクチャ

データ収集は、ホストの別プロセスで動作するAndroid StudioのProfiler Serviceを通じて行われます。デバイス上では、ADBチャネル経由でリクエストのメタデータを送信する軽量エージェントが動作します。これによりアプリのパフォーマンスへの影響が最小限に抑えられ、Googleのデータによるとオーバーヘッドは3%未満です。リクエストデータ(本文、ヘッダー)自体は、詳細ビューがアクティブな場合にのみ転送されます。

kotlin
// 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の主な機能

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レスポンス構造の確認

サーバーがデータを期待どおりの形式で返すことを確認するのはよくあるタスクです。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の使用などが考えられます。

kotlin
// 重複をなくすための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の制限と代替ツール

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 パケットアナライザー クロスプラットフォーム いいえ いいえ

よくある質問

Network Inspectorがリクエストを表示しないのはなぜですか?

アプリがデバッグ設定でビルドされ、Android Profilerを接続した状態で起動されていることを確認してください。OkHttp 4.xを使用している場合は、ライブラリを最新版に更新する必要があるかもしれません。Ktorの場合、インターセプトをサポートするEngineを持つKtorクライアントを使用した場合にのみリクエストが表示されます。

HTTPSトラフィックを表示できますか?

はい、Network Inspectorは追加設定なしでHTTPSトラフィックをサポートしています。Charles Proxyとは異なり、ルート証明書のインストールは不要です。このツールは、デバッグセッション内でトラフィックをデコードするためにAndroid Profilerのシステムメカニズムを使用します。

Network Inspectorからデータをエクスポートするにはどうすればよいですか?

Network InspectorはHAR(HTTP Archive)形式でデータをエクスポートできます。パネルの右上にあるExportボタンをクリックします。HARファイルは任意のHARビューアーで開くか、さらに分析するためにCharles ProxyやProxymanにインポートできます。

Network Inspectorはアプリのパフォーマンスに影響しますか?

Googleのデータによると、アクティブなプロファイリング時のオーバーヘッドは3%を超えません。Network Inspectorを無効にした場合、オーバーヘッドはありません。このツールはリリースビルドでの使用は推奨されませんが、デバッグセッションでは最新のデバイスへの影響はほとんどありません。

レスポンスがrawデータとして表示される場合はどうすればよいですか?

レスポンス本文が読めないrawデータとして表示される場合、gzip圧縮またはバイナリ形式(Protocol Buffers、MessagePack)が原因である可能性があります。Network Inspectorはgzipを自動的にデコードします。カスタム形式の場合は、レスポンスヘッダーのContent-Typeヒントを使用してください。

まとめ

  • Network Inspectorは、アプリのコードを変更せずにネットワークリクエストをリアルタイムで監視・デバッグするためのAndroid Studio組み込みツールです
  • 自動インターセプトは、OkHttp、Retrofit、Ktor、UrlConnectionを介したすべてのHTTP呼び出しに対して行われ、このツールはデバッグビルドで"そのまま"動作します
  • タイムラインはステータスコードを色分けすることで、遅い、失敗した、繰り返されるリクエストを即座に特定できます
  • 詳細ビューには、各リクエストのヘッダー、本文(JSONフォーマット対応)、Cookie、実行時間のフェーズ別内訳が含まれます
  • Timingのフェーズ別内訳(DNS、TCP、TLS、Request、Response)は、遅いリクエストの原因を正確に特定するのに役立ちます
  • HARへのエクスポートにより、セッションを保存して同僚と共有したり、Charles Proxyなどのサードパーティツールで分析したりできます
  • より複雑なシナリオではCharles ProxyまたはProxymanを使用してください。これらはOSレベルのトラフィックインターセプトとiOSでの動作をサポートしています

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください