1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

手触りの良さにこだわった TUI MySQL クライアント を公開しました

1
Last updated at Posted at 2026-04-29

demo.gif

ℹ️ インストール方法

Homebrew でインストールできます。

brew tap hatohato25/sqsh
brew install sqsh

🍀 はじめに

MySQL WorkBench を業務で利用しています。インポート、エクスポートでちょっとクセがありますが、基本的な機能は満足して使わせてもらっています。

ですが、利用においてちょっとしたストレスを感じることがありました。GUI で目的のものを選択するまで、目的のレコードにたどり着くまでのちょっとした"待ち"にストレスを感じていました。そこで、手触りの良さにとことんこだわった TUI MySQL クライアント を自作しました。

この記事では、開発したクライアントの機能と、こだわりのポイントについてご紹介します。

この記事の対象読者

  • MySQL を日常的に使っているエンジニア
  • ターミナルでの作業を好み、TUI ツールに興味がある方
  • キーボード中心の操作で生産性を高めたいと考えている方

前提知識

この記事を読むにあたって、以下の知識があると理解しやすいです:

  • MySQL の基礎知識

なぜ TUI MySQL クライアント を自作したのか

既存ツールへの不満

MySQL WorkBench などの GUI クライアントは高機能で使いやすいですが、ターミナル作業の途中で切り替えるのが面倒に感じることがあります。
また、SRE な私は業務で管理する RDS インスタンスが多く、MySQL WorkBench を開くと接続先一覧で画面が埋まっていて、その中から目的の接続先を探すのに時間を使う、とても残念な作業を日々行っています。
100 万レコードを超えるテーブルを開こうとすると、アプリケーションがフリーズしたかのようになり、読み込み中は操作不能になるなどといった課題も感じていました。

こだわったポイント:手触りの良さ

このクライアントを作るにあたって最も重視したのは、操作のリズムと手触りです。具体的には:

  • Fuzzy Finder を全面的に採用し、どの選択操作も素早くできるようにする
  • 大量データでもストレスなく表示できる仕組みを取り入れる
  • SQL 入力をサポートする機能を充実させる

これらを実現することで、ターミナルから一歩も出ずに、快適に MySQL を操作できる環境を目指しました。

参考とした大好きなツール

zoxide と fzf を連携させて利用する cd 拡張ツールに惚れ込んでいて、zi コマンドが無くては生きていけない体になっています。この Fuzzy Finder 機能をデータベース操作でも利用したいと考えました。

🌈 主要機能の紹介

Fuzzy Finder による階層的な選択

このクライアントの中核をなす機能が、Fuzzy Finder を用いた選択操作です。

接続先 → データベース → テーブル → レコード の各階層すべてで Fuzzy Finder が使えるため、キーボードから手を離すことなく、インクリメンタルサーチで目的の場所まで素早くナビゲートできます。

たとえば、複数の接続先を管理している場合でも、接続先名の一部を入力するだけで絞り込めます。データベースやテーブルの選択も同様です。

demo.gif

接続先選択 → (fuzzy search) "loca" と入力 → 即座に絞り込まれる
       ↓
データベース選択(sd [show database のスニペット]) → (fuzzy search) "anal" と入力して選択
       ↓
テーブル選択(st [show tables のスニペット]) → (fuzzy search) "eve" と入力して選択
       ↓
レコード一覧が表示される

Fuzzy Finder は部分一致・あいまい検索に対応しているため、正確なスペルを覚えていなくても素早く目的のものを見つけられます。


100 万レコードでも快適な Stream 取得

大量のレコードを持つテーブルを開いたとき、全件をメモリに読み込もうとすると表示が重くなってしまいます。このクライアントでは、レコードを Stream で逐次取得する方式を採用しているため、100 万レコード規模のテーブルでも、最初の表示がすぐに始まり、快適に操作できます。

従来のクライアントで発生しがちな「表示されるまでしばらく待つ」という体験を、できる限り排除しました。

Stream 取得により、表示開始までの待ち時間を最小化しています。スクロールやフィルタリング操作も、取得済みのデータに対してリアクティブに動作します。


SQL 入力をストレスフリーにする機能群

MySQL を操作する上で避けて通れないのが SQL の入力です。このクライアントでは、SQL 入力を快適にするための機能を複数用意しています。

スニペット機能

よく使う SQL をスニペットとショットカットキーに登録しておきました。

スニペット ショートカットーキー アクション
sd Ctrl+D show databases
st Ctrl+T show tables
sc Ctrl+S Column selection mode (table → column picker)

ショートカットキー

入力を補助するショートカットキーを割り当てています。

ショートカットーキー アクション
Ctrl+A Select all
Ctrl+C Copy selection / quit (no selection)
Ctrl+V Paste from clipboard
Ctrl+X Cut selection
Ctrl+K Delete from cursor to end of line
Ctrl+U Delete from start of line to cursor
Ctrl+W Delete previous word
Ctrl+Y Paste from kill buffer
Ctrl+E Move cursor to end of line
Home / End Move cursor to start / end of line
Alt+← / Alt+→ Move cursor one word left / right
Shift+← / Shift+→ Extend selection left / right
Alt+Shift+← / Alt+Shift+→ Extend selection one word left / right

入力補完

よく使う予約語、テーブル名やカラム名の補完機能により、SQL を入力する際の負担を軽減しています。スペルミスによるエラーを事前に防ぐことができます。


Readonly 設定

本番環境への誤った書き込みを防ぐため、接続先ごとに readonly モードを設定できます。

readonly に設定した接続先では、SELECT 以外の操作が制限されるため、「本番 DB に誤って UPDATE を実行してしまった」というインシデントを防ぐことができます。

設定方法は 2 通りあります:

  1. config.toml で接続先ごとに設定する(永続的に反映)
  2. 起動時のオプション指定で設定する(その接続のみ適用)
# 起動時に readonly モードで起動する例(オプション名は README を確認してください)
sqsh -r

本番環境の接続先には、設定ファイルで readonly: true を設定しておくことを強くおすすめします。


日本語・英語の多言語対応

UI のラベルやメッセージが日本語と英語の両方に対応しています。available for English.

設定方法は 2 通りあります:

  1. config.toml で設定する(永続的に反映)
  2. 起動時のオプション指定で設定する(その接続のみ適用)
# 起動時に言語を選択して起動する例(オプション名は README を確認してください)
sqsh --lang ja

接続先を管理する

設定方法は 2 通りあります:

  1. 指定しない(オプション無しで~/.config/sqsh/config.toml
  2. 起動時のオプション指定で設定する(その接続のみ適用)
# デフォルト以外の接続先一覧を指定する例(テスト環境のみの一覧など分けて管理もできる)
sqsh --config /path/to.toml

接続先など詳細な設定方法については、GitHub リポジトリの README を参照してください。toml で一元管理できるようになっています。


テスト用のコンテナ

テスト用に 100 万レコードのテーブルを含む MySQL コンテナを用意しています
リポジトリに compose ファイルがありますので、ぜひ試してみてください

# docker/init 以下の sql が入ります
docker compose up -d

詳細な手順はGitHub リポジトリの README を参照してください。


💾 まとめ

この記事では、手触りの良さにこだわって制作した TUI MySQL クライアント の主要機能をご紹介しました:

  • Fuzzy Finder による階層的な選択で、目的のレコードへ最短距離でアクセス
  • Stream 取得により、100万レコード規模のテーブルでも快適に操作可能
  • スニペット・ショートカット・入力補助で、SQL 入力のストレスを軽減
  • readonly 設定で、本番環境への誤操作を防止
  • 日本語・英語の多言語対応

ターミナルから離れずに MySQL を操作したい方、既存の GUI クライアントにストレスを感じている方にぜひ試していただけると嬉しいです。

フィードバックや機能リクエストは GitHub の Issue でお待ちしています。


参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?