🌟
TUIのDBクライアントを作った話
作ったもの
これは何?
TUIベースのDBクライアント。テーブル一覧やテーブル定義などを素早く閲覧できる。

なぜ作った?
筆者はSIerにつき、PJごとに異なるDBを使うことが多い。レガシーなシステムの案件に当たると、現状のアプリの挙動やDBから動きをリバースエンジニアリングすることもしばしば。そこで以下のような機能をもったツールが欲しかった。
- はじめましてのDBのテーブル構造を理解するためにテーブル定義を俯瞰してみれるツール
- DBが異なっても同じ操作性を実現している(DBごとに異なるツールを使うのは辛い...)
- 全ての動作をキーボードで制御できる(マウスポチポチ苦手)
のようなツールを探したところTaKO8Kiさんのgobangを発見
しかし以下の理由から自作することにしました。
- 2年近く更新がなくメンテされているか怪しい
- SQL実行の部分で既存のCLIツールとの連携をさせたい
- 表示を自分好みにカスタマイズしたい
技術選定
言語はRustで書きました。理由はいくつかあって
-
gobangがRustで書かれていたので参考にしやすかった - ratatui(rustのtuiライブラリ)の完成度が高く手軽にTUIを作れたこと
- 軽量で配布しやすい
などなどです。
アーキテクチャ
The Elm Archtecture(TEA)を参考にしました。
具体的には
- UIは純粋関数を木構造に組み合わせて表現
- 全ての副作用をupdate関数に閉じ込める
- update関数はMsgやCmdをリターンする
- appがMsgやCmdを良しなにハンドリングする
のようなアーキテクチャにしました。
感想や反省など
- TEAアーキテクチャは書きやすかった。
- ウィジェット単位で構造体を作り、それらを組み合わせて木構造にする書き方はどのTUIを作るときも参考になりそう。
- 非同期のRustを組み込むの難しかった。(非同期処理のたびにスレッドを呼び出している...orz)
- Claude Codeのおかげでモチベ保ったまま(ひとまずの)完成までいけた。ありがたい。
最後に
Rustは楽しい
Discussion