QueryFolio — SQL クライアントデスクトップアプリ
2026-07-10 (41 hours ago)

QueryFolio は、JetBrains DataGrip の軽量な代替を目指して自作した SQL クライアントのデスクトップアプリです。日々の開発で MySQL / PostgreSQL / SQLite に接続してクエリを書く作業を、できるだけ軽く・安全に・手になじむ形で行いたくて作りました。
作った理由
DataGrip は高機能ですが、起動が重く、単純に「接続してクエリを叩いて結果を見る」だけの用途にはオーバースペックに感じていました。かといって軽量なクライアントは対応 DB が限られていたり、SSH トンネルや接続情報の管理が貧弱だったりします。「軽い・複数 DB 対応・接続情報を安全に扱える・AI で補助してくれる」を全部満たすものが欲しくて、自分で書くことにしました。
技術スタック
- Tauri 2 — Rust バックエンド + WKWebView。Electron より遥かに軽量なバイナリになります。
- SvelteKit + Svelte 5 (runes) — フロントエンド。
- CodeMirror 6 — SQL エディタ (エンジン別の方言ハイライト・補完)。
- sqlx 0.8 — MySQL / PostgreSQL / SQLite への接続。
- ssh2 — SSH ローカルポートフォワード (known_hosts 検証付き)。
主な機能
- マルチ DB 対応 — MySQL / PostgreSQL / SQLite に 1 つのアプリで接続。
- 接続情報を YAML で管理 — sql-agent-mcp-server 互換フォーマット。シークレットは 1Password に置いたまま、
op read "op://..."のような取得コマンド経由で遅延ロードでき、パスワードを設定ファイルに直書きせずに済みます。 - SSH トンネル — known_hosts 検証付きのローカルポートフォワードで、踏み台越しの DB にも接続。
- スキーマ補完 — テーブル名・カラム名を補完。スキーマブラウザ (TABLES ペイン) はカラムを遅延ロード。
- クエリの安全ガード — 接続ごとに
readonly: trueを指定すると、INSERT / UPDATE / DELETE / DDL (CTE でラップした DML 含む) を拒否。LIMIT を書き忘れた SELECT には自動でLIMITを付与 (デフォルト 500)。 - psql 風メタコマンド —
\l\dt\dv\dn\du\d [table]をエンジン別のカタログクエリに変換 (MySQL / SQLite でも可能な範囲で対応)。 - クエリ履歴 — 接続ごとにローカル保存。SQL には機密が含まれ得るため、ファイルは制限付きパーミッションで保存。
- 結果の扱い — タブ・ピン留め・セルインスペクタ・CSV / TSV / JSON コピー (数式インジェクション対策込み)。実行中のクエリはキャンセル可能。
- AI 支援 (OpenAI) — 自然言語からの SQL 生成、エラー時の Fix with AI、EXPLAIN プランの解説とインデックス提案、選択 SQL の解説。生成された SQL はエディタに挿入されるだけで、自動実行はしません。送信するのはスキーマ (テーブル名・カラム名)・エンジン方言・SQL 文・実行計画のみで、クエリ結果は一切送りません。
セキュリティ設計で気をつけたこと
SQL クライアントは扱う情報が機微なので、いくつか方針を決めています。API キーはフロントエンド (WebView) 側に一切渡さず、Rust バックエンドの中だけで扱います。AI に投げるのはスキーマ構造とクエリ文だけで、実データ (クエリ結果) は送りません。接続パスワードは 1Password に置いたまま参照でき、設定ファイルに平文で残さずに済むようにしています。
現状
macOS 向けに Developer ID 署名済みのビルドを配布できる状態です (公証は未対応)。ソースコードは MIT ライセンスで GitHub に公開しています。