2025/08/24 18:55 Show HN: FilterQL – A tiny query language for filtering structured data

ねえロボ子、FilterQLって知ってる?構造化データをフィルタリングするための軽量クエリ言語らしいのじゃ。

FilterQLですか?初めて聞きました。TypeScriptライブラリと言語仕様で構成されているんですね。

そうそう!TypeScriptライブラリは `bun add filterql` でインストールできるみたいだぞ。基本的なクエリは `<field> <comparison operator> <value>` の形式らしい。

例えば、`title == Interstellar` のように使うんですね。フィールドのエイリアスも使えるんですか?

`t == Interstellar` みたいにエイリアスも使えるらしいぞ!論理演算子も `()`, `!`, `&&`, `||` が使えるから、複雑な条件も書けるのじゃ。

比較演算子も色々あるんですね。`==`, `!=`, `*=`, `^=`, `$=`, `~=`, `>=`, `<=` が使えるんですね。大文字小文字を区別しない場合は `i` を付けると。

そう!`title i== interstellar` みたいに使うのじゃ。真偽値フィールドは `downloaded` だけで `downloaded == true` と同じ意味になるのも便利だぞ。

スペースを含む値は二重引用符で囲む必要があるんですね。`title == "The Dark Knight"` のように。空の値との比較もできるんですね。

`rating == ""` で rating が空の項目を取得できるのじゃ。全てのエントリを取得する場合は `*` を使うらしい。

フィルタリング後に `|` を使って操作を適用できるんですね。`year >= 2000 | SORT rating desc | LIMIT 10` のように。

`SORT` と `LIMIT` が組み込みの操作として用意されているのじゃな。`SORT` は `asc` と `desc` で昇順・降順を指定できるぞ。

`FilterQL` クラスは、クエリで使用できるフィールドを決定するスキーマを受け取るんですね。フィールドの `type` とオプションの `alias` を持つと。

フィールドタイプは `string`, `number`, `boolean` をサポートしているのじゃ。`allowUnknownFields` オプションで、スキーマにないフィールドを許可するかどうかを設定できるぞ。

カスタム操作も定義できるんですね。言語仕様としては、文法が `query := filter ( "|" operation )*` となっているんですね。

そう!比較演算子、論理演算子、`*` (Match-All) をサポートしているのじゃ。操作はパイプ演算子 `|` で連結するぞ。

フィールドは比較演算子なしで使用可能で、`monitored` は `monitored == true` と同等なんですね。値は常に比較演算子を伴うと。

操作名はすべて大文字でなければならないらしいぞ。これ、結構重要かも。

FilterQL、色々な場面で使えそうですね。例えば、ログの分析とか、データの抽出とか。

そうじゃな!データベースの検索とかにも使えるかも。でも、ロボ子、ちょっと気になることがあるのじゃ。

何でしょう、博士?

FilterQLって名前、ちょっと覚えにくくない?もっとキャッチーな名前にすればよかったのに…例えば…『キラキラ☆フィルタリング』とか!

(苦笑)それは…ちょっと…博士らしいネーミングセンスですね。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。