動かざることバグの如し

近づきたいよ 君の理想に

JSONのAPIリクエストコマンドを楽にするjoという奴

やりたいこと

最近のAPIは猫も杓子もJSONをContent-Typeとして受け付けるのがほとんどである。別にそれはいいのだがJSONは人間には優しくない。特にターミナル上でJSONを記述しようものなら死ぬ。

ターミナルで編集させる気が1ミリも感じさせないcurlコマンドの例

#!/bin/bash
curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [
      {"role": "user", "content": "こんにちは、今日の天気を教えてください。"}
    ],
    "temperature": 0.7
  }'

そこでコマンドラインからJSONを簡単に生成できるjoコマンドを使ってみる。

インストール

# Ubuntu
apt install jo

# MacOS
brew install jo

使い方

joコマンドは、コマンドラインからJSONデータを簡単に生成するためのツールで、キーと値のペアや配列を引数として渡すことで、JSONオブジェクトを作成できる

❯ jo name=かぐや age=17

すると出力が

{"name":"かぐや","age":17}

となる。最高

# pretty出力
jo -p name=かぐや age=17

# 配列の生成
jo -a 春 夏 秋 冬

# ブール値の指定
jo is_student@true

# ファイルの内容を埋め込む
jo content=@file.txt

# ネスト
jo -p name=Alice info=$(jo age=30 city=Tokyo)

curlと組み合わせた例

jo単体で使うっていうよりcurlとパイプで組み合わせると便利

jo -p message=hello | curl -XPOST -H "Content-Type: application/json" -d @- https://httpbin.org/post

ちなみに冒頭のcurlのオプションをjoで書き直すと

jo messages=$(jo -a $(jo role=user content='こんにちは、今日の天気を教えてください。')) temperature=0.7

になる。