blog.anqou.net
rss
author
tags

NDJSON の TUI ビューワー logq

GLM Coding Plan を契約していて GLM-5.1 が使い放題(使い放題ではない)なので、GLM-5.1 backed な Claude Code をしばいて NDJSON[1] の TUI ビューワー logq を作っています。なんと Rust 製です。私は Rust が読み書きできないので[2]中身は一行も見ていませんが、それなりにまともに動いています。例によって GitHub で大公開しています。

https://github.com/ushitora-anqou/logq

NDJSON でログを出力するようなソフトウェアと組み合わせて使うことが想定されています。起動方法は二種類あり、以下のどちらかで起動します。特に理由がなければ stdout と stderr を自動的に区別して表示してくれる前者のほうが便利です:

# command が実行したいコマンドだとする。
logq command
# あるいは
command | logq

起動すると GNU nano のような TUI の画面が開き tail -f のように command の出力をフォローします。 JSON がやってくると JSON としてハイライトされ、それ以外の出力はそのまま表示されます。

使い方ですが C^G を打つと簡単なヘルプが表示されるので、それを見ながら操作するのが楽だと思います。おおよそ Vim バインドなので、 jk で上下移動、^F^B でページ単位の移動ができます。また Enter を押すと JSON が整形されて表示されます。

また JSON の内容を検索することもできます。ここが少しこだわっているところで、/ を押すと検索画面に遷移し、そこで LogQL もどきのフォーマットでフィルタを書けます[3]。以下のようなシンタックスをサポートしています:

# シンプルな全文検索
|= "example.com"

# 含むべき文字列と含んではいけない文字列を指定して検索
|= "example" != ".org"

# 正規表現での検索
|~ "e...." !~ ".*s.*"

# JSON のフィールドを指定しての検索
| name =~ "本"

# line_format による整形
| name =~ "本" | line_format "{{ .name }}"

詳細な使い方やインストール方法は(これまた Claude Code backed by GLM-5.1 が書いた)README を見てください。

注釈

  1. Newline Delimited JSON の略で、要するに一行ずつ JSON が書かれたプレインテキストです。

  2. 読み書きできた時代もあったんですが、最近はもう OCaml しか書いていません。

  3. logq と似たモチベーションのソフトウェアとして lnav があるのですが、lnav の SQL によるフィルタリングが自分には使いこなせなかったので logq を作ったという背景があります。