Database Inspector を使用してデータベースをデバッグする

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Android Studio 4.1 以降では、Database Inspector を使用してアプリの実行中にアプリのデータベースを検査、クエリ、変更できます。これは、特にデータベースのデバッグで役立ちます。Database Inspector は、プレーン SQLite や、Room などの SQLite の上に構築されたライブラリで動作します。

Database Inspector を開く

Database Inspector でデータベースを開く手順は次のとおりです。

  1. API レベル 26 以降を搭載した接続デバイスまたはエミュレータでアプリを実行します。

  2. メニューバーから [View] > [Tool Windows] > [App Inspection] を選択します。

  3. [Database Inspector] タブを選択します。

  4. プルダウン メニューから、実行中のアプリプロセスを選択します。

  5. [Databases] ペインに、現在実行中のアプリのデータベースが表示されます。検査するデータベースのノードを展開します。

データを表示、変更する

[Databases] ペインには、アプリのデータベースのリストと、各データベースに含まれるテーブルが表示されます。テーブル名をダブルクリックすると、そのデータが Inspector ウィンドウの右側に表示されます。列見出しをクリックすると、その列で Inspector ウィンドウのデータを並べ替えることができます。

[Database Inspector] ウィンドウのスクリーンショット。
図 1. [Database Inspector] ウィンドウ

テーブル内のデータを変更するには、セルをダブルクリックし、新しい値を入力して Enter キーを押します。アプリで Room を使用し、UI で(LiveDataFlow などによって)データベースを監視している場合、データに加えた変更は実行中のアプリですぐに表示されます。それ以外の場合、変更内容は、変更したデータをアプリで次にデータベースから読み取るときにのみ表示されます。

自動のデータベース変更を確認する

実行中のアプリを操作したとき、Database Inspector で表示されるデータを自動的に更新する場合は、Inspector ウィンドウの上部にある [Live updates] チェックボックスをオンにします。ライブ アップデートが有効になっている場合、Inspector ウィンドウのテーブルは読み取り専用になるため、値の変更はできません。

また、Inspector ウィンドウ上部の [Refresh table] ボタンをクリックしてデータを手動で更新することもできます。

データベースにクエリを実行する

Database Inspector は、アプリの実行中にアプリのデータベースに対してクエリを実行できます。アプリで Room を使用している場合は DAO クエリを使用できますが、カスタム SQL クエリもサポートされています。

DAO クエリを実行する

アプリで Room を使用している場合、Android Studio はガター アクションを提供し、DAO クラスで定義済みのクエリメソッドをすばやく実行できます。こうしたアクションは、アプリが実行中であり、Database Inspector が IDE で開いているときに利用できます。@Query アノテーションの横にある Run SQLite statement in Database Inspector ボタンをクリックすると、DAO で任意のクエリメソッドを実行できます。

DAO ガター アクションのスクリーンショット
図 2. DAO クエリ ガター アクション

アプリに複数のデータベースが含まれている場合、Android Studio には、クエリを実行するデータベースをプルダウン リストから選択するよう求めるプロンプトが表示されます。クエリメソッドに名前付きバインド パラメータが含まれている場合、Android Studio では、クエリを実行する前に各パラメータの値がリクエストされます。クエリ結果が Inspector ウィンドウに表示されます。

カスタム SQL クエリを実行する

Database Inspector を使用して、アプリの実行中にアプリのデータベースに対してカスタム SQL クエリを実行することもできます。データベースにクエリを実行する手順は次のとおりです。

  1. [Databases] ペインの上部にある Open New Query tab をクリックし、Inspector ウィンドウに新しいタブを開きます。

    New Query タブのボタンを示すスクリーンショット。
    図 3. [New Query] タブを開く
  2. アプリに複数のデータベースが含まれている場合は、[New Query] タブのプルダウン リストから、クエリを実行するデータベースを選択します。

  3. [New Query] タブの上部にあるテキスト フィールドにカスタム SQL クエリを入力し、[Run] をクリックします。

または、クエリ履歴機能を使用して、以前使用したクエリを実行することもできます。

  1. クエリ履歴表示ボタン クエリ履歴表示ボタン をクリックすると、選択されているデータベースに対して以前実行したクエリのリストが表示されます。

    クエリ履歴のプルダウンを示すスクリーンショット。
    図 4. クエリ履歴メニュー
  2. リスト内のクエリをクリックするとエディタにクエリ全体のプレビューが表示され、Enter キーを押すとエディタにコピーされます。

  3. [Run] をクリックしてステートメントを実行します。

[New Query] タブに表示されるクエリ結果は読み取り専用であり、変更できません。ただし、カスタム SQL クエリ フィールドを使用して、UPDATEINSERTDELETE などの修飾子ステートメントを実行することは可能です。アプリで Room を使用し、UI で(LiveDataFlow などによって)データベースを監視している場合、データに加えた変更は実行中のアプリですぐに表示されます。それ以外の場合、変更内容は、変更したデータをアプリで次にデータベースから読み取るときにのみ表示されます。

オフライン モード

Android Studio 4.2 以降では、プロセスが切断された後でも引き続きアプリのデータベースを検査できます。これにより、クラッシュ後のアプリのデバッグが容易になります。

切断が発生すると、Database Inspector はデータベースをダウンロードして、オフライン モードで利用できるようにします。オフラインの場合でも、テーブルを開いてクエリを実行できます。

ライブ アプリプロセスに再接続すると、Database Inspector はオフライン モードを終了し、デバイス上のデータのみを表示します。つまり、アプリプロセスに再接続した場合、オフライン モードで表示されるデータは保持されません。この制限のため、Database Inspector では、オフライン モードでデータを編集したり、変更 SQL ステートメントを実行したりできません。

データベース接続を開いたままにする

Database Inspector は、アプリがデータベースへのライブ接続を維持しているときにしか、データベースを変更できません。つまり、アプリがデータベースへの接続と切断を頻繁に行う場合、データベースのデバッグが難しくなることがあります。[Databases] ペインはアイコンを使用して、開いている()データベースと閉じているデータベース()を区別します。

また、[Databases] ペインの上部で Keep database connections open をオフ()からオン()に切り替えることで、データベース接続が閉じないようにできます。

Database Inspector からデータをエクスポートする

Database Inspector を使用すると、データベース、テーブル、クエリ結果をエクスポートして保存、共有、またはローカルで再作成できます。Android Studio でアプリ プロジェクトを開き、Database Inspector でそのプロジェクトのアプリを検査する際に、次のいずれかの方法でデータのエクスポートを開始できます。

  • [Databases] パネルでデータベースまたはテーブルを選択し、パネルの上部近くの [Export to file] をクリックします。
  • [Databases] パネルでデータベースまたはテーブルを右クリックし、コンテキスト メニューから [Export to file] を選択します。
  • タブのテーブルまたはクエリ結果を調べるときは、テーブルまたはクエリ結果の上にある [Export to file] をクリックします。

エクスポート アクションを選択した後、以下に示すように、[Export] ダイアログを使用して最終的な手順を実施します。データベース、テーブル、クエリ結果のいずれをエクスポートするかに応じて、DB、SQL、CSV のうち 1 つ以上の形式でデータをエクスポートできます。

[Export Database] ダイアログ ボックス

参考情報

Database Inspector の詳細については、以下の参考情報をご覧ください。

ブログ投稿

動画