🐙

Jmespathだって便利だぞ(awscli --query で使われてるやつ)

2024/03/30に公開

Introduction

こちらの記事が私の近いところで結構ホットな反応で迎えられています。
https://zenn.dev/kou_pg_0131/articles/jnv-introduction

私も実際に試しましたが、確かに便利で直感的な操作感が気持ちいい、といった感覚でおもしろいと思いました。

そんな中「月に1つはブログを投稿するぞ」と数ヶ月前から決めている私は今月も終わりが近づき何もしていない今月の投稿について困っていた今日この頃です。

今から新しい技術を習得しつつのアウトプットは厳しくなってきた感じがする、、という中、
そうか、jnv も便利だったけど、類似したもので私の結構loveなこいつのアウトプットは丁度いいネタではないかと思いました。

jmespath

こいつを簡単に紹介しようと思います。
(新しいものではないから、すでに世間で紹介記事はいっぱいあるけどね。)

jmespathとは

JMESPath is a query language for JSON

とWEBページのトップで紹介されていますね。
そうです、jsonのためのクエリ言語です。
要はjqみたいにjsonから特定のキーの値を抽出したり、といった事ができるものです。
値のフィルターとか検索に特化してて、要素の追加、削除とかはできなさそうです。(多分)

これタイトルにもデカデカ書きましたがawscliの --queryオプション使用時に裏で動いてるものです。

ちなみに今回の投稿にあたり初めて知りましたが、
Azure Cli, ansibleにおいてのjsonフィルタでも使用されているようです。
(そんなにメジャーだったとは)

あとは各種言語向けのライブラリもあります。
(自分は全然ライブラリとして使ったことないですが、これ使い慣れてきたら結構便利なのでは。。)
https://jmespath.org/libraries.html

実際の使い方

実際の使い方を見るにあたって
こちらの tutorialのページが大変便利です。

https://jmespath.org/tutorial.html

何が便利かって。画像貼ろう。
<1>

<2>

画像の2つを見比べていただくと、オレンジ枠の箇所の内容が変わっている事が分かると思います。本当は動画を載せたかったところですが、要はこのtutorialのページもjnvにあったようにインタラクティブにフィルターした結果が確認できるんです!

ちなみに一番最初にリンクを貼ったjmepathのwebトップページもインタラクティブな動作確認ができます。
(まぁウェブページですし機微な情報突っ込んで試すのは、、、ってとこですけどね。。)

あと使用事例のパターンも豊富ですし、
こちらの Examples の方ではより高度な使い方をインタラクティブな操作で自身でも試しながら確認することができます。
特定のキーの値抽出、演算を含めた条件による抽出、出力結果のsortなどなど。

もっと詳細を深堀りたい場合はこちらのページから望みの構文や式、フィルターなどを探すことになるのかなと思います。
https://jmespath.org/specification.html#spec
(私はあまりここは使ったことないです、、)

良さ

個人的に感じるjmespathの良さ、aws-cliを使う前提の話にはなりますが、awsの--queryオプションでこのjmespathが使われているので、awsにおいてコンテナやらインスタンスに追加でパッケージのインストール(jqの追加)せずともaws-cliで取得した結果をフィルターできることです。

あー、この値を取得する処理が欲しいがために、Dockerfileにjqインストールを追加せねばいかんのかな。(jq って書くだけやで、、)
jqインストール、というだけのプルリクを上げてマージされるタイミングはリリース時の1,2か月後とかになるの?えーー、、、といった問題を解消してくれて大変助かったことが何度かありました。
(プルリクあげてからのスピード感、マージタイミングは現場それぞれですけどね。)

まぁそんなこんなで詳しいフィルター事例は全く紹介していませんが、こんな具合で便利なものなんでjsonフィルターするのは「jqだけじゃないぞ」って所はもしjmespathを知らなかった方がいましたらご認識いただけたら幸いです。

Discussion