# 日報(2021-02-07) JSONPath
# はじめに
firebase の strage の消費量が全く不可解で、数百M 〜 GByte オーダーの usage が発生しているのにその原因が全くわからず、firebase なので問い合わせのパスもなく、SO で聞いても「同じ質問がすでにたくさんあるので君の質問はコミュニティーにとって無価値」みたいに言われるけどそもそもそんな payment に直結するようなものが不可解な挙動を示してるって質問が SO にいっぱい上がっている時点でかなり怖いです
で、SO のそういうのを見てると function が使う node_module とからしいので function を消してみたのだけど半分しか減らない。残りはどこがつかっているの?
このあたりで firebase の使用が不安になってきたので alternative の使用を考えはじめて、firestore の alternative だと cockloachdb や faunadb はすでにもっと不安な思いをしてきているのでナシ、その他諸々の候補もいろいろとイマイチで、自分の使い方だと初心に戻って SQL の JSON 型でいいじゃない、MariaDB だと galera cluster で簡単にマルチマスタのクラスタ組めるからそれでいいんじゃないか?と思ったのが発端です
# Path って?
で、ドキュメント読んでてもイマイチよく理解できないというか、JSON の CRUD もよく理解できない感じ。 チュートリアルとかを読んでもわからない、仕方ないので広いレベルの人たちの話を聞くのもヒントに繋がるかと思い -qiita を外して検索してみるんだけどやっぱり皆さんが何をやっているのか理解できない感じ
なんかシンプルそうなものがこんなにわからなく感じるモヤモヤ感も若い頃以来な気がしてちょっと新鮮で気持ちがいいです
初心に戻って Json Functions (opens new window) を一つづつ手を動かしていていると、だんだんわからない原因がはっきりしてきました、よく出てくるこの path って引数はなんだ?
# JSONPath
MariaDB のドキュメントを検索していると JSONPath Expressions (opens new window) というページに行き着きました
読んでて納得、というかこれ面白い!なんだろ、Json ってそもそもプログラム言語のオブジェクトに直接マッピングされるものなので、Json の操作って言語が提供する仕組みを使ってやるもの、それこそが XML に対する Json の魅力だとずっと思ってたのですが、JSONPath ってそれとは真逆に言語の仕組みを使わない抽象的な Json の操作って感じで、あっそうか、SQL みたいなそもそも2次元のデータしか操作できないようなある意味貧弱な言語の世界だと直接的なマッピングが無理なのでこういうのが必要になるんだ、まるで言語へのマッピングのないXML の XPath みたいじゃん!
# XPath との関係
わからなかった事がわかり、紅茶に浸したひとさじのマドレーヌが口蓋に触れた瞬間のような興奮を覚えたのですが、ちょと冷めてきて冷静になった所でググってみるとまさにこちら JSONPath - XPath for JSON (opens new window) にたどり着き、ホントに origin が XPath だった事にまた驚きました
# 前世紀の思い出
XML なんかがバズワードだった頃の前世紀の思い出が蘇ってくるのですが、Json と違って言語のオブジェクトと直結しない XML は言語での使い勝手がとにかく悪く、DOM にするとメモリの使用量が大きいし SAX を使うと毎回パースが走る、そんな中ででてきた XPath はオサレでかっこよかったのでした
# 今世紀になって
今世紀にはいって DLNA という、XML べったりな SOAP の世界に Twonky Media が JSON を持ち込んできて「なにこれ?便利じゃん」って思って以来、すっかり XML をプログラマ目線で軽蔑するようになってしまい、たとえばONVIF に関するブログ (opens new window) で毒はいたりしてました ^^;;;
# 結論
SQL みたいに JSON をネイティブにマップできない世界だと JSONPath ってイケてる!