Mac上でローカルにデータを永続化するアプリ——メモ、ブックマーク、メッセージ、健康記録、To-Doリストなど——のほとんどは、~/Library/や~/Library/Containers/の中に収められたSQLiteデータベースにデータを保存しています。アプリがどんなデータを収集しているのか見たいのかもしれません。UI上から削除されてしまった何かを復元する必要があるのかもしれません。あるいは自分のアプリをデバッグしていて、実際にディスクに書き込まれた内容を検証する必要があるのかもしれません。理由が何であれ、macOSにはこれらのファイルをビジュアルに調べる組み込みの方法はありません。
アプリのデータベースを見つけて開くのは面倒
まず、ファイルの場所を特定する必要があります。サンドボックス化されたアプリは~/Library/Containers/com.developer.appname/Data/にデータを保存し、サンドボックス化されていないアプリは~/Library/Application Support/を使うことがあります。Libraryフォルダはデフォルトで隠されているため、Finderの「フォルダへ移動」を使うか、ターミナル経由で移動する必要があります。.sqliteや.dbファイルを見つけたら、あとはターミナルでsqlite3を使い、ビジュアルな構造のない生のクエリ出力を読むしかありません。
シミュレータで実行されているiOSアプリの場合、パスはさらに深くなります。~/Library/Developer/CoreSimulator/Devices/の後にUUIDが続き、さらにアプリのDocumentsやLibraryフォルダへとネストしたパスが続きます。何十ものシミュレータデバイスフォルダの中から正しいデータベースを見つけるのは、まるで宝探しです。
Tomeであらゆるアプリのデータベースを調べる
Tomeを使えば、任意のSQLiteデータベースファイルを開いて、テーブル、ビュー、インデックス、トリガー、行データといった内容を、ネイティブなmacOSインターフェースで即座に確認できます。ファイルを見つけたら、Tomeにドラッグするか、「ファイル」→「開く」を使うだけです。
アプリが何を保存しているかを理解する
すべてのテーブルを閲覧すれば、アプリが実際にどんなデータを永続化しているかが正確に分かります。列名はスキーマの設計を明らかにし、行データは実際の値を示します。推測もターミナルコマンドも不要です——サイドバーのテーブルをクリックし、その内容をスクロールするだけです。
自分のアプリのデータ層をデバッグする
SQLiteやCore Dataを使ったmacOSやiOSアプリを開発している場合、Tomeを使えば書き込みが正しく反映されたかを検証できます。リレーションシップが正しく保たれているか確認し、自動生成された列を調べ、シンタックスハイライトとオートコンプリート付きで診断クエリを実行できます。
データを復元・エクスポートする
アプリのUIからは削除されたものの、データベースにはまだ存在しているかもしれないレコードが必要ですか?Tomeでファイルを開き、該当するテーブルを検索しましょう。データが存在していれば、そのまま読み取ることも、SQLクエリを使って必要な部分だけを正確に抽出することもできます。