デバッグとプロファイリング
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 でブレークポイントを使ってデバッグする手順は次のとおりです。
- コード行の横にあるガター(左端の余白)をクリックします — 赤い点が表示されます
- Run ではなく Debug(虫のアイコン)でアプリを実行します
- 実行がブレークポイントに到達すると、一時停止します
- Variables ペインで変数を確認します
- 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 unregisteredCPU プロファイラ
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- JUnitによるユニットテスト
- Mockitoによるモック
- EspressoによるUIテスト
- デバッグとプロファイリング