永続化にCore Dataや生のSQLiteを使うiOSアプリを開発しているとします。UI上で何かがおかしく見える——リストが表示されない、あるいは値が古いままのように見える。データベースを確認する必要があります。XcodeにはデータモデルエディタとInstrumentsのプロファイラがありますが、どちらもSQLiteファイル内に実際に存在する行を表示してはくれません。そこでターミナルを開き、シミュレータのコンテナパスを探し出し、Z接頭辞付きのテーブルに対してSELECT *クエリを実行し始めます。このワークフローは、毎回集中力を途切れさせます。
iOS開発者が抱えるデータベースの問題
iOSシミュレータを実行するたびに、そのデータはUUID名のディレクトリの中にネストされた~/Library/Developer/CoreSimulator/Devices/以下に保存されます。シミュレータをリセットしたりデバイスを切り替えたりすると、パスは変わります。場所をブックマークしておいても、次のXcodeのアップデートで配置が変わるかもしれません。正しい.sqliteファイルを見つけることが、そもそも戦いの半分を占めます。
見つけたところで、sqlite3のCLIが返すのは生のテキスト出力です。Core DataのZ接頭辞付きのテーブル名・列名は、手動でのクエリをさらに分かりにくくします。列名のオートコンプリートもなく、行をざっと確認するビジュアルなグリッドもなく、UPDATE文をフルで書かずにテスト値を素早く編集する方法もありません。ほとんどの開発者は、この一連の作業に毎日何度も無駄な時間を費やしています。
DB Browser for SQLiteのようなサードパーティ製ツールは動作はするものの、macOS上では異質に感じられます——Qtベースのインターフェースには合わないキーボードショートカットとネイティブでないファイルダイアログがあります。DBeaverやDataGripは本格的なデータベースIDEであり、ローカルのSQLiteファイルを調べるには過剰です。
Tome:Macのワークフローのために作られたSQLiteブラウザ
Tomeは、iOS開発者のワークフローに自然に溶け込むネイティブなmacOS向けSQLiteブラウザです。シミュレータの.sqliteファイルを開けば、すべてのテーブル、ビュー、インデックスが即座に表示されます。Core DataのZ接頭辞付きテーブルをスクロール可能なグリッドで閲覧できます。SQLを書かずに、値をその場で編集してテストシナリオを準備できます。
Core Dataのストアをビジュアルに調べる
Core DataのSQLiteテーブルは、ターミナルでは解読しづらいZ接頭辞付きの名前を使います。Tomeでは、すべてのテーブルがサイドバーに表示されます——クリックすれば、きちんと整列した列ですべての行が表示されます。ZUSERやZPOSTといったテーブルを、ひと目で管理オブジェクトモデルと照合できます。
再ビルドせずにテストデータを編集
バグを再現するために値を変更する必要がありますか?Tomeでセルをクリックし、新しい値を入力するだけです。UPDATE文を書いたり、アプリのシーディングロジックを再実行したりする必要はありません。行を挿入してエッジケースをテストしたり、レコードを削除してクリーンな状態をシミュレートしたりできます。
診断クエリを実行
シンタックスハイライトとオートコンプリート付きのTomeのSQLエディタを使えば、アプリのデータに対して結合、集計、絞り込みクエリを書けます。リレーションシップの検証、レコード数のカウント、特定の値の検索——すべてアプリを離れることなく行えます。