🌟

TUIのDBクライアントを作った話

に公開

作ったもの

https://github.com/ppdx999/clazydbm

これは何?

TUIベースのDBクライアント。テーブル一覧やテーブル定義などを素早く閲覧できる。

なぜ作った?

筆者はSIerにつき、PJごとに異なるDBを使うことが多い。レガシーなシステムの案件に当たると、現状のアプリの挙動やDBから動きをリバースエンジニアリングすることもしばしば。そこで以下のような機能をもったツールが欲しかった。

  • はじめましてのDBのテーブル構造を理解するためにテーブル定義を俯瞰してみれるツール
  • DBが異なっても同じ操作性を実現している(DBごとに異なるツールを使うのは辛い...)
  • 全ての動作をキーボードで制御できる(マウスポチポチ苦手)

のようなツールを探したところTaKO8Kiさんのgobangを発見

https://github.com/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