Edited at

JSONをインタラクティブに掘り下げるコマンド jid


はじめに

私はCLIを利用することが多いのもあり、 jq は今やJSONを利用する上は欠かせないツールとなっています。

ただ

・ jqのクエリを書くことなれるまで少し時間がかかる

・ クエリを書くことに慣れたとしても、初見だったりして 構造を把握していないJSONに関しては非常に手間

でみたいな感じだなと思っていました。

インタラクティブに jq のクエリを書いていければいいのに、と思ってツールを探しました(CLI限定で)が、あまり良さそうなものが見つかりませんでした。

そこで、Golangで何か作ってみたいのもあったので、作ったのが jid というツールです。

リポジトリ

Github : simeji/jid


インストール

以下からバイナリダウンロードしてzip解凍するだけです。

https://github.com/simeji/jid/releases

Macの場合はbrewで入れる事もできます。(thx. @ikeisuke )

brew install jid

また、以下のOSでは公式リポジトリに組み込んでくださっていたので、各OSのパッケージマネージャーを利用してインストールできます。

Packaging status


できること

タイトルの通り、パイプで標準出力のJSONを渡すことで、掘り下げていくことができます。

大体は、TABENTER 押しておけばなんとかなることが多いです。

※ キーマップ一覧はこちら

絞り込んだ結果は標準出力されるので更にパイプすることも可能です。

デモ(カラー出力対応しました)

jid

aws cliの戻り値もJSONのものが多いので利用できます。

普段は aws ec2 describe-instances などと合わせて利用することが多いですが、IDなどを伏せるのが面倒だったので今回は ec2 describe-availability-zones でやってます。

jid-with-awscli


まだできないこと、したいこと


  • jq のクエリではできる |[]mapselect は実装されていません。

  • もう少し設計を変えてプラガブルに他のフォーマットにも対応できるようにしたい。

  • リファクタリングをもっとしたい。


開発の中で気づいたこと


  1. 最初は2ファイルくらいに収まるでしょと思って作り始めた

  2. 適当に思いついたベースで機能を追加していってしまっていた

  3. 最初からテストを書いてなくて途中からさかのぼって書き始めた

あたりの話があって、後ほどデグレに気をつけながら機能追加していくのが、だんだんと辛くなってきたので最低限のテストは書き始めたが、もともとテスタブルなコードを意識していなかったので、書くのに辛くなりました。

すでに結構辛い。

あとから一部Interfaceとかにしたんですが、すごい中途半端な状態になった。

(とはいえ最初からがっちり設計はできなさそうだったんでどっかのタイミングで作りなおした方がいいんだろうなと思ってます)

ただ、振り返ってても思ったのですが、 一番大変だったのはUI考えるところ です。

サジェストやオートコンプリートのタイミングとかどこまでどうやって絞り込むんで、どうやって選択させるかとかは、何度か人に使ってもらって意見もらいながら変更し、という感じでやってました。

この辺はまた変更するかもしれません。


さいごに

vimのネタも書きたい