Android StudioのDatabase Inspectorは、モバイルアプリケーションのSQLiteデータベースをリアルタイムで表示およびデバッグするための組み込みツールです。Android Developersの公式ドキュメント(2025)によると、このツールはアクティブなデータベースに対してSQLクエリを実行し、テーブル構造を表示し、アプリケーションを停止せずにレコードを編集できます。このツールはRoom、SQLiteOpenHelper、および任意のアプリ内データベースをサポートし、プロファイリング開始時に自動的に検出します。
重要なポイント
Database Inspectorは、モバイルアプリケーションのローカルデータベースを検査およびデバッグするためのAndroid Studioのツールです。Roomデータベース、SQLiteOpenHelper、サードパーティライブラリなど、アプリケーションによって作成されたすべてのSQLiteデータベースを表示できます。このツールはAndroid Studio 4.1から利用可能で、Android Profilerを介して、またはViewメニューから直接起動できます。
Database Inspectorの主な目的は、開発中のデータの可視化です。データベースの内容をログに出力したり、データを表示するための別画面を作成したりする代わりに、開発者はDatabase Inspectorを開いてすべてのテーブル、そのスキーマ、内容を即座に確認できます。このツールはリレーショナルSQLiteデータベースとAutoマイグレーション対応のRoomの両方をサポートしています。
このツールは、操作実行後にデータストレージの正確性を検証する必要があるシナリオで不可欠です:ユーザー登録、サーバー同期、リストキャッシング。テストUIを作成する代わりに、データベースダンプをDatabase Inspectorで表示します。このツールはRoomのマイグレーションデバッグにも積極的に使用され、スキーマ更新ごとに実際のテーブルスキーマを確認できます。
Database Inspectorは、Android Profiler Serviceを介してAndroidアプリケーションのプロセスに接続します。アプリケーション内のすべての開いているSQLite接続を検出し、サイドパネルに表示します。API Level 26(Android 8.0)以上のDebugビルドのアプリケーションが必要です。
起動時に、Database Inspectorはデバイス上のアプリケーションとコンピューター上のIDEの間にADBトンネルを作成します。SQLite WAL(Write-Ahead Logging)データベースファイルはこのトンネルを介してストリーミングされ、内容が表示されます。SQLコマンドは、RoomおよびSQLiteDatabaseでのDatabase Inspectorのサポートを通じて、アプリケーションのSQLiteエンジンに直接送信されます。ツールはアプリケーションがデータベースを開いたタイミングを自動的に検出し、検査リストに追加します。
Database Inspectorを正しく動作させるには、Android Studio 4.1+、API Level 26+のデバイスまたはエミュレーター、およびアプリケーションのDebugビルドが必要です。Roomの場合は、room-runtimeライブラリバージョン2.2+が追加で必要です。Room 2.2+の標準であるWALモードでデータベースが作成されている場合、ツールはメインアプリケーションをブロックせずにデータを読み取ることができます。
// Database InspectorでサポートされるRoomデータベースの例
@Database(
entities = [User::class, Order::class],
version = 2,
autoMigrations = [AutoMigration(from = 1, to = 2)]
)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
abstract fun orderDao(): OrderDao
}
Database Inspectorは、テーブルスキーマの表示から複雑なSQLクエリの実行、レコードの編集まで、ローカルデータを操作するための完全な機能セットを提供します。
左パネルにはすべてのデータベースとテーブルが表示されます。テーブルを選択すると、その内容がカラム付きのテーブルで表示されます:すべてのレコードフィールドがカラムとして表示され、各行が個別のレコードです。テーブルスキーマ(名前、型、制約)は上部に表示されます。外部キーについては、テーブル間の関係が表示されます。
| データ型 | SQLite型 | Room型 | 例 |
|---|---|---|---|
| 整数 | INTEGER | Int, Long | 42 |
| 文字列 | TEXT | String | "John" |
| 小数 | REAL | Double, Float | 3.14 |
| バイナリデータ | BLOB | ByteArray | [0x00, 0x01] |
| 日付/時刻 | INTEGER (Unix epoch) | Long, Date | 1720000000 |
Queryタブでは、選択したデータベースに対して任意のSQLコマンドを直接実行できます。SELECT、INSERT、UPDATE、DELETE、CREATE INDEX、JOINおよびその他のSQLite演算子がサポートされています。結果はクエリエディタの下に表形式で表示されます。クエリ履歴はセッション中保持されます。
テーブルセルは直接編集できます — 値をクリックして新しい値を入力するだけです。変更は実行中のアプリケーションに即座に適用されます。これはエッジケースのテストに特に便利です:必須フィールドへのnull設定、存在しないIDへの置き換え、長い文字列の処理確認など。すべての変更はリアルタイムでコミットされます。
Database InspectorはRoomと深く統合されており、このライブラリを使用したアプリケーション開発に不可欠です。標準機能に加えて、インスペクターはRoom固有の機能を提供します。
Roomデータベースの場合、Database Inspectorは各DAOメソッドの生成されたSQLクエリを表示します。これにより、特にJOIN、@Relation、@Transactionを使用した複雑なクエリに対して、Roomが正しいSQLを生成しているか確認できます。Roomが非効率的なクエリ(単一のJOINの代わりにN+1クエリなど)を実行した場合、Database Inspectorのクエリログで即座に確認できます。
AutoMigrationまたは手動マイグレーションでRoomスキーマを更新する際、Database Inspectorはマイグレーション後の実際のテーブル構造を表示します。アプリケーション起動後にインスペクターを開き、すべてのカラム、インデックス、外部キーが正しく作成されているか確認するだけです。マイグレーションがエラーで失敗した場合、データベースは開かれず、ツールは最後に利用可能なバージョンを表示します。
Roomでは、@Relationと@Embeddedを使用して複数のテーブルからデータを結合できます。Database Inspectorは関連テーブルのデータを並べて表示することで、リレーションシップの正確性を視覚的に確認するのに役立ちます。各外部キーについて、ワンクリックで関連テーブルに移動できます。
// Database Inspectorで確認するためのRelation付きEntity
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String
)
data class UserWithOrders(
@Embedded val user: User,
@Relation(parentColumn = "id", entityColumn = "user_id")
val orders: List<Order>
)
Database Inspectorは、ローカルデータストレージを扱う際に発生する特定の開発タスクを解決します。日常業務におけるツールの最も一般的な使用例を見てみましょう。
多くの場合、アプリケーションはAPI応答をローカルデータベースにキャッシュします。Database Inspectorを使用すると、キャッシングの正確性を検証できます:同期後、キャッシュテーブルに実際のレコードが表示されます。データが表示されない場合は保存コードに問題があります。重複が表示される場合はupsertロジックに問題があります。
DAOメソッドがデータを保存せず、かつ例外をスローしない場合、Database Inspectorはテーブルの実際の状態を表示します。一般的な原因:Primary Key競合(OnConflictStrategy設定)、カラムの誤ったデータ型、NOT NULL制約違反、または外部キー違反です。インスペクターは操作前後のデータベース変更セットを表示できます。DAO呼び出し前後のデータスナップショットを比較することは、トランザクションエラーをデバッグし、複雑な書き込み操作中のアプリケーションのビジネスロジックの正確性を検証する最も効果的な方法の1つです。
テーブルスキーマの変更(カラム追加、フィールド名変更、テーブル分割)時、Database Inspectorはマイグレーション結果の検証に役立ちます。新しいデータベースバージョンでアプリケーションを起動し、すべてのデータが新しい構造に正しく転送されたか確認するだけです。マイグレーション後にデータが失われた場合は、リファクタリング前に保存したダンプから復元できます。このシナリオは、SQLiteOpenHelperからRoomへの移行時や、アプリケーションの新バージョンで既存テーブルの構造を変更する場合に特に重要です。
Database InspectorはSQLクエリのパフォーマンス評価にも使用できます。QueryタブからSELECTを実行し、応答時間を測定することで、インデックスが不足しているクエリを特定できます。Roomは自動的に遅いクエリをSLOW SQLタグ付きでLogcatに記録し、Database Inspectorから即座にEXPLAIN QUERY PLANを実行して実行計画を分析できます。
よくある質問
アプリケーションがDebugモードで実行されており、デバイスのAPI Levelが26以上であることを確認してください。データベースが別のプロセスで作成されているか、SQLCipher(暗号化)を使用している場合、Database Inspectorは検出できない可能性があります。SQLCipherの場合は、暗号化なしの補助デバッグデータベースを使用してください。
はい、データ編集はテーブルセルで直接可能です。値をダブルクリックして変更できます。変更は実行中のアプリケーションのデータベースに即座に適用されます。新しいレコードを追加するには、QueryタブからINSERT SQLクエリを使用してください。
いいえ、Database InspectorはRealmがSQLiteを使用しないため、Realmをサポートしていません。Realmのデバッグには、Realm Object Server、Realm Studio、またはアプリ内ログを使用してください。MongoDB Realm SDKの場合は、Realm StudioツールがmacOS、Windows、Linuxで利用可能です。
Database Inspectorではデータベース全体をエクスポートできます。リスト内のデータベース名を右クリックし、Export Databaseを選択します。.dbファイルがコンピューターに保存されます。表示するには、DB Browser for SQLiteなどの任意のSQLiteブラウザーを使用してください。
Googleによると、オーバーヘッドは最小限です — Database Inspectorは書き込みをブロックせずにWALデータベースファイルを読み取ります。カスタムSQLクエリの実行はデータベースに一時的に負荷をかける可能性がありますが、これは開発者によって制御されます。プロダクションビルドではツールは自動的に無効になります。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。