0Pricing
Android Academy · レッスン

デバッグとプロファイリング

Android Studioのデバッグ・プロファイリングツールを使いこなします。ブレークポイント、Logcat、Timber、Memory Profiler、LeakCanary、CPU Profiler、Network Inspector、Layout Inspectorを扱います。

「デバッグとプロファイリング」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。

デバッグの概要

デバッグとは、バグを見つけて修正するプロセスです。Android Studio には、次の強力なツールが用意されています。

  • Debugger — 実行を一時停止し、変数を調べ、コードをステップ実行します
  • Logcat — デバイスからのログ出力をリアルタイムで表示します
  • Layout Inspector — 実行中の UI 階層を調べます
  • Android Profiler — CPU、メモリ、ネットワークを分析します
  • Database Inspector — Room データベースを実行中に表示・クエリします

Logcat — 最初に使うデバッグツール

Log を使って Logcat にメッセージを出力します。TAG を使ってログを絞り込みます。

import android.util.Log

class UserRepository {
    companion object {
        private const val TAG = "UserRepo"
    }

    fun fetchUsers() {
        Log.d(TAG, "fetchUsers() called")        // Debug
        Log.i(TAG, "Fetching ${users.size} users") // Info
        Log.w(TAG, "Cache is empty")               // Warning
        Log.e(TAG, "Network error: $exception")    // Error
    }
}

Timber — より便利なログ出力

Timber は Log の薄いラッパーで、リリースビルドからログ呼び出しを削除し、クラス名を TAG として自動的に追加します。

// app/build.gradle:
// implementation 'com.jakewharton.timber:timber:5.0.1'

// In Application.onCreate():
if (BuildConfig.DEBUG) {
    Timber.plant(Timber.DebugTree())
}

// Usage anywhere in the app (no TAG needed):
Timber.d("User loaded: %s", user.name)
Timber.e(exception, "Failed to fetch data")
Timber.w("Cache miss for key: %s", key)

ブレークポイントと Debugger

Android Studio でブレークポイントを使ってデバッグする手順は次のとおりです。

  1. コード行の横にあるガター(左端の余白)をクリックします — 赤い点が表示されます
  2. Run ではなく Debug(虫のアイコン)でアプリを実行します
  3. 実行がブレークポイントに到達すると、一時停止します
  4. Variables ペインで変数を確認します
  5. Step Over(F8)で1行ずつ進み、Step Into(F7)で関数の中に入ります

式の評価

ブレークポイントで一時停止している間、Evaluate Expression(Alt+F8)を使うと、現在のスコープで Kotlin コードを実行できます。再起動せずに前提を検証できます。

  • list.size や user.email.isNotBlank() を確認します
  • 任意のメソッドを呼び出し、戻り値を確認します
  • 複雑なオブジェクトをその場で調べます

メモリプロファイラ

Memory Profiler(View → Tool Windows → Profiler)でメモリリークを見つけます。

  • 時間の経過に伴うヒープサイズを監視します — 増え続けている場合は、リークの可能性があります
  • GC を強制実行し、メモリが減るか確認します
  • ヒープダンプを取得して、どのオブジェクトが生存しているか確認します
  • GC されるはずなのに残っている Activity や Fragment のインスタンスを探します

LeakCanary — メモリリークを自動検出

LeakCanary は、デバッグビルドでメモリリークを自動的に検出し、通知として報告します。

// app/build.gradle:
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'

// That's it — no code changes needed!
// LeakCanary auto-installs via ContentProvider.
// When a leak is detected, it shows a notification with the leak trace.

// Common causes to watch for:
// - Static references to Context/Activity
// - Not releasing ViewBinding in onDestroyView()
// - Listeners registered to singletons but not unregistered

CPU プロファイラ

CPU Profiler でパフォーマンスのボトルネックを見つけます。

  • 操作を実行しながらトレースを記録します
  • フレームチャートで、どのメソッドに最も時間がかかっているか確認します
  • main thread 上で長時間実行されている処理を探します — これが UI のカクつきの原因になります
  • 負荷の高い計算を Dispatchers.IO または Dispatchers.Default に移します

ネットワークインスペクタ

Network Inspector には、アプリが行うすべての HTTP 呼び出しがリアルタイムで表示されます。

  • リクエスト URL、メソッド、ヘッダー、ボディを確認します
  • レスポンスコード、ボディ、所要時間を確認します
  • 遅いリクエストや失敗しているリクエストを特定します
  • OkHttp(Retrofit が使用)に標準で対応しています

View → Tool Windows → App Inspection → Network Inspector から開けます。

データベースインスペクタ

実行中のデバイス上で、Room データベースをリアルタイムに調べたりクエリしたりできます。

  • テーブルとその内容を表示します
  • カスタム SQL クエリを実行します
  • アプリを使用しながらデータの変化を確認します

App Inspection → Database Inspector から開けます。API 26 以降の Room で使用できます。

レイアウトインスペクタ

Layout Inspector には、UI 階層の実行中の 3D ビューが表示されます。

  • 任意のビューを選択して、マージン、パディング、テキスト、色などの属性を確認します
  • ビューの重なりや、誤った表示状態を見つけます
  • 推測に頼らずにレイアウトの問題をデバッグします

View → Tool Windows → Layout Inspector から開けます。デバイスまたはエミュレータで実行中のアプリに接続します。

StrictMode

StrictMode は、メインスレッド上で誤って実行された低速な処理(ディスク読み取りやネットワーク呼び出しなど)を検出し、デバッグビルドでログを出力するか、アプリをクラッシュさせます。

// In Application.onCreate() — debug builds only:
if (BuildConfig.DEBUG) {
    StrictMode.setThreadPolicy(
        StrictMode.ThreadPolicy.Builder()
            .detectDiskReads()
            .detectDiskWrites()
            .detectNetwork()
            .penaltyLog()      // log violations instead of crashing
            .build()
    )
}

確認問題

追加のコードなしで、Android のデバッグビルドにおけるメモリリークを自動検出するツールはどれですか。

まとめ:デバッグとプロファイリング

問題を効率よく見つけて修正しましょう。

  • Logcat + Timber — 軽量なログ出力。リリース時には自動的に削除されます
  • Breakpoints + Debugger — 実行中の処理を一時停止して確認します
  • Memory Profiler — ヒープの増加とメモリリークを検出します
  • LeakCanary — スタックトレース付きでメモリリークを自動検出します
  • CPU Profiler — メインスレッド上の遅いメソッドを見つけます
  • Network Inspector — HTTP 呼び出しを監視します
  • Database Inspector — Room をリアルタイムにクエリします
  • StrictMode — メインスレッドでの意図しない IO を検出します

おめでとうございます — Android Development コースをすべて修了しました。

よくある質問

「デバッグとプロファイリング」レッスンは無料ですか?

はい。「デバッグとプロファイリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。

「デバッグとプロファイリング」で何を学びますか?

Android Studioのデバッグ・プロファイリングツールを使いこなします。ブレークポイント、Logcat、Timber、Memory Profiler、LeakCanary、CPU Profiler、Network Inspector、Layout Inspectorを扱います。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Android Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「デバッグとプロファイリング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAndroid Academyレッスンでコードを書いて実行できますか?

はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JUnitによるユニットテスト
  2. Mockitoによるモック
  3. EspressoによるUIテスト
  4. デバッグとプロファイリング
← Android Academyに戻る