PartiQLを実行するTUIツールをGoで作ってみた

SQL互換クエリ言語のPartiQLを使ってDynamoDBのCRUD操作ができるTUIツールをGoで作ってみました。完成には程遠いですが、とりあえず動きはします。
2020.11.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部のうらわです。

先日発表されたPartiQLを実行するTUIツールをGoで作ってみたのでご紹介します。

PartiQLについては弊社ブログ記事をご参照ください。

初めて作ったTUIツールですが、既存の素晴らしい作品と素晴らしいライブラリを参考にすることで1日で「とりあえる動くもの」は作れました。TUIツール作りはGoの勉強のモチベーションが高まるのでおすすめです。

つくったもの

QueryパネルにSQLを入力してEnterキーを押すとResultsパネルに結果が表示する、という単純なつくりです。

今はSELECT文以外のSQLは実行後にResultパネルに何も表示されません(これは追々良い感じにしたい)。

エラーの場合はAWS CLIのエラーメッセージを色など加工して表示しています。

実装について

  • PartiQLはGoのSDKは未対応なので、AWS CLIでクエリを実行しています。TUIツールを起動する前にあらかじめaws configureでプロファイルの設定が必要です。

  • AWS CLIの実行結果(標準出力)を頑張って加工してテーブル表示させています。

  • 実行結果をテーブル表示するために、 標準出力 → JSON文字列 → JSON → DynamoDB Attribute Value → mapの配列 というかなり面倒な手順でデータを加工しています。もっとさくっと変換する方法があるのかもしれないですが今のところは上記の流れで落ち着いています…。

参考にしたTUIツール

(ほとんどの)実装は個人的に使用している以下のTUIツールを参考にしています。

https://github.com/skanehira/pst

使用したライブラリ

上記の参考にしたTUIツールでも使用しているライブラリです。コードのコメントを見れば大体どんなことができるかわかります。wikiに実装例も載っています。

https://github.com/rivo/tview

今後について

今後は以下のような機能を実装していきたいと思います。

  • SQL実行履歴の保存(今は都度入力しないといけない)
  • goroutineによる非同期処理化(AWS CLIの実行で操作をブロックしない)
  • 見栄え改善(色など)

コードはこちらです。

https://github.com/urawa72/pqlt