Androidアプリを作り始めるといろんな不具合やエラーに悩まされることは多いですよね。アプリ開発を始めたばかりでエラーの内容もよくわからいし、原因の特定の仕方もわからなくて進まなくなったということもあると思います。実際、エンジニアはどうやって不具合やエラーを解決しているのか気になるところですよね。
今回は、エンジニアが使っているデバッグ手法を紹介していきたいと思います。
デバッグとは?
不具合やバグなどを見つけて直していく作業のことで、プログラミングをやっていく上で必ず必要になってきます。デバッグは、不具合やエラーの原因を見つけてプログラムを修正するためにデバッガーと呼ばれるツールを使います。
Androidアプリ開発では、標準でついているAndroid Studioのデバッガーとツールウィンドを利用してデバッグしていきます。
実機デバッグする方法
Androidで実機デバッグするためには、端末の設定画面からUSBデバッグを有効にする必要があります。[設定] > [デバイス情報] のビルド番号を7回タップすると、[設定] > [システム] > [詳細]の中に「開発者オプション」という項目が出現します。
開発者オプションの中に「USBデバッグ」という項目があるのでオンにします。すると、PCにUSB接続した時にAndroid Studioのデバイスリストに表示されるようになります。
大前提としてエラーはしっかり読もう
1番最初に身につけて欲しいのは、エラーメッセージを「わからない」で終わらせるのではなくしっかり読むことです。エラーメッセージには、問題点の内容・発生場所・発生の時間など様々な情報が含まれています。
ネットで調べなくてもエラーの原因を考えたり、人に聞く時の参考情報として伝えることができるため聞かれた方も答えやすくなります。クラッシュやエラーなどがある時は、ほぼ必ずエラーログが上がってくるので必ず読みましょう。わからないキーワードがあったときは、1度調べてどんな内容なのか理解しようとすることも大切です。
Androidアプリをデバッグする3つの手法
ここからは、具体的なデバッグの手法を紹介していきます。どれも比較的簡単に試すことができるので、デバッグの手法を学んで見たい人は是非試してみてください。
コンポーネントの階層が見れるLayout Inspector
UI崩れなどの原因を探ることができるようになります。想定外のレイアウトになってしまった場合に、どのビューが崩れてしまっているのかコンポーネントのプロパティを見てどの値がおかしいのかわかります。
ログ出力
コンソールに変数や関数を実行したときのメッセージをログとして出力することができます。このログは、デバッグ時に使うことで不具合の原因を探ることやアプリをリリースしたあとに発生した不具合の原因究明などにも活用することができます。
ログレベル | 解説 |
---|---|
Log.e | エラーとして出力する |
Log.w | 警告として出力する |
Log.i | 情報として出力する |
Log.d | デバッグログとして出力する |
Log.v | その他として出力する |
フィルタリング
ログをエラー/デバッグログ/実行ログのように出力を分けた場合に、フィルタリングを使うことでそれぞれのログのみコンソールに表示することができます。
カラーリングして見やすくする
コンソールのログはデフォルトでは単色になっています。そのため、エラーログやデバッグログが表示されていても判別しにくいことがあります。ログレベルごとに色を分けることで、ログを見分けやすいようにすることができます。
メニューバーの [Android Studio] > [Preferences] > [Editor] > [Color Scheme] > [Android Logcat] から以下のようにカラーを設定することができます。
ブレークポイント
Android Studioにはブレークポイント(breakpoint)という機能があります。この機能を利用すると以下のことができます。
- 特定のタイミングで処理を一時停止する
- 一時停止中に保持している変数の値を参照することができる
- インタラクティブに変数の値を変更することができる
想定外の手順で処理が実行されたときに、どの変数の値が不自然なのか確認したり発生しうる例外を見つけたりすることができます。
値をみる
ブレークポイントで一時停止した時点で変数が、どのような値を保持しているのか確認することができます。「このタイミングで処理を実行した時、値ってどうなってるんだろう」って思った時に確認して動作を検証することができます。
スレッド
ブレークポイントで処理を止めたときやアプリがクラッシュしたときに、どこで発生したのかを確認することができます。下記の例だと MainActivity の onOptionsItemSelected という関数で止まっていることが確認できます。
デバッグ機能を上手く使おう
様々なデバッグ手法を使うことで、エラーや不具合の原因を特定したり動作を確認するのが非常にやりやすくなります。開発ではデバッグ作業は必ず発生するので、デバッグツールの使い方を覚えて開発にかける時間を増やせるようにしていきましょう。