30個のテーブルを持つSQLiteデータベースに対してSELECTクエリを書いているとします。テーブル名はuser_sessionsかsession_logsのようなものだったと記憶していますが——どちらだったでしょうか?タイムスタンプの列はcreated_at、timestamp、それともdate_createdでしょうか?sqlite3のCLIでは、.schemaモードに切り替えてテーブルを調べ、クエリの記述に戻り、列を参照するたびにこれを繰り返すことになります。実は、この文脈の切り替えにこそ、クエリを書く時間の大半が費やされているのです。
オートコンプリートがないことの代償
sqlite3のCLIには、テーブル名や列名のオートコンプリートがありません。記憶を頼りに入力し、何かを打ち間違えれば、入力中ではなく実行後にエラーが返ってきます。テーブルが数個しかない単純なデータベースであれば、何とかなります。しかし何十ものテーブルと何百もの列を持つデータベースでは、これは生産性に対する絶え間ない負担になります。
テーブルのスキーマをメモファイルにコピーして、クエリを書きながら参照する開発者もいます。.tablesやPRAGMA table_info(tablename);を繰り返し実行する人もいます。どちらのアプローチも、欠けている機能を補うための回避策にすぎません——本来、クエリエディタはスキーマを把握し、正しいSQLを書く手助けをしてくれるべきなのです。
DataGripのような本格的なデータベースIDEは優れたオートコンプリートを提供しますが、高価で重く、エンタープライズ向けのワークフローのために設計されています。ローカルのSQLiteファイルのために、テーブル名の候補を得るためだけにサブスクリプション制のIDEが必要になるべきではありません。
Tomeのオートコンプリート付きクエリエディタ
Tomeには、データベースのスキーマを把握したSQLクエリエディタが搭載されています。テーブル名を入力し始めれば一致する候補が提案されます。テーブルを参照すれば、列名が補完候補として表示されます。本格的なIDEではありませんが、複雑さを増すことなくSQLiteのクエリを速く書けるようにする、ちょうど良いレベルのサポートです。
スキーマを理解した候補表示
Tomeはファイルを開くときにデータベースのスキーマを読み込みます。入力中には、テーブル名、列名、SQLiteのキーワードがすべて候補として表示されます。列名を暗記したり、クエリの途中でスキーマブラウザに切り替えたりする必要はありません。
シンタックスハイライト
SQLキーワード、文字列リテラル、数値、識別子は色分けされます。エラーメッセージを読んでから気づくのではなく、クエリを実行する前に引用符の抜けや打ち間違えたキーワードに気づけます。
ネイティブなグリッドに表示される結果
クエリの結果は、ネイティブなmacOSのテーブルビューに即座に表示されます。列の並べ替え、サイズ変更、大きな結果セットのスムーズなスクロールが可能です。結果をコピーしたり、特定のセルを選択したりできます——このグリッドは、ウェブビューで描画されるHTMLテーブルではなく、きちんとしたMacのデータビューとして振る舞います。