mdqをさくっと使うツール「mdqi」の紹介

mdqiの紹介

Lobi事業部サービス基盤チームの長田です。

この記事はKAYAC Advent Calendar 2017の11日目です。


以前本ブログでmdqというツールを紹介しました。

今回はこれを少し便利にするツールを作ってみました。

モチベーション

mdqは複数のデータベースにクエリを発行して、結果をまとめてくれる便利なやつです。 データベースを水平分割している環境において、調査・集計作業が格段に楽になります。

JSONフォーマットで出力されるため、jqコマンドなどを使って再利用しやすいのですが、 「ちょっと集計して中身を見たいだけなんだけどなー」という場合、つまり人が読む場合にはちょっと読みづらいです。

mdqi

と、いうわけでmdqのインターフェイスとなるmdqiというツールを作ってみました。

mdqのインターフェイスとして動作します。 mdqと同じくGo製です。

mdqが出力するJSONをパースしてmysqlcliライクに表示するのが主な機能です。 mysqlcliとほぼ同じ感覚で使用することができます。

mdq> select * from jewel where month = 12;
+-----|----|--------------|-------+
| db  | id |     name     | month |
+-----|----|--------------|-------+
| db2 | 25 | turquoise    | 12    |
| db2 | 26 | lapis lazuli | 12    |
| db2 | 27 | blue zircon  | 12    |
| db2 | 28 | tanzanite    | 12    |
+-----|----|--------------|-------+

項目数が多いテーブル用にvertical表示があったり、

mdq> /display set vertical
mdq> select * from jewel where month = 12;
*************************** 1. row ***************************
  db    : db2
  id    : 25
  name  : turquoise
  month : 12
*************************** 2. row ***************************
  db    : db2
  id    : 26
  name  : lapis lazuli
  month : 12
*************************** 3. row ***************************
  db    : db2
  id    : 27
  name  : blue zircon
  month : 12
*************************** 4. row ***************************
  db    : db2
  id    : 28
  name  : tanzanite
  month : 12

設定したtagを覚えてプロンプトに表示してくれたりします。

mdq> /tag set main
mdq[main]>

コマンド履歴にも対応しています。

mdqは記憶を持たないツールなので、その記憶部分をmdqiが担当しています。

使用感

mdqiの導入で、サクッと調査したいときのストレスがだいぶ解消されました。 ちなみに、Lobiの本番環境では調査用のクエリ発行はredashから行うようにしているため、 mdq & mdqiは専ら開発環境での活躍がメインとなっております。

おわり

カヤックでは余計なストレスを減らして楽をするために時間を使いたいひとも募集しています!

明日は昨年好評だったキーボードのはなしの2017年版です。

お楽しみに。