Help us understand the problem. What is going on with this article?

WebPayをコマンドラインで料理する。jqを使おう。

More than 5 years have passed since last update.

こんにちは、@sowawaです。まだまだアドベントカレンダーの世界の初心者ですがよろしくお願いします。今日までアドベントカレンダーの話はWebPayを簡単に使うためのCheckoutHelperが中心でした。もうWebPayを簡単にWebページに組み込む方法を皆さんには知ってもらえたでしょうか?今日は、ここまでのアドベントカレンダーとは全く違うは、黒い画面の話をしたいと思います。(コンソールが黒じゃない人はごめんなさい)

Cooking WebPay in Command line

すでにWebPayではcurlを使ったドキュメントを用意していますので、「コマンドラインからWebPayを使う」とかいわれても「そんなの常識だろ」とおっしゃる人も多いと思いますが、RestやJSONが全盛の現代でいかにCLI厨のおじさんたちがどうやって生き残っていくか、そんな生存戦略を語っていきたいと思います。

sed awk jq

コマンドラインで様々な操作をするエンジニアの皆さんにとって、sedawkはとても身近なツールだと思います。あとはgrepuniqsortなんていうコマンドもありますね。そこで今回紹介したいのは、コマンドラインツールjqです。jqを使うことでJSONを柔軟に取り扱うことが出来るようになるため、これらのコマンドと組み合わせることでAPIの出力を自由自在に操れるようになります。

コマンドラインを使ってデータを整形したり、変換したり、集計する作業の最初の一歩として、簡単なプログラムを作ったり、awkを使ってCSVを作ったりすることはよくありますよね。様々な形をしたデータを自分がほしい形に整形して利用するために、jqを活用して行きましょう。

課金の一覧を取得してjqを使ってみる

簡単な例として課金の一覧を取得してcharge_idの一覧表示する例を作ってみました。

$ curl "https://api.webpay.jp/v1/charges?count=3" \
-u "test_secret_eHn4TTgsGguBcW764a2KA8Yd": | jq '(.data[].id)'
"ch_aK68QI3xLbnW5Rv"
"ch_aK677mg0QedR0Og"
"ch_aK6fM75s37i3g57"

うまくcharge_idの一覧を作ることが出来ましたね。WebPayのドキュメントで示されているレスポンス例を元に少し解説をしたいと思います。

{
  "object": "list",
  "url": "/v1/charges",
  "count": 3,
  "data": [
    {
      "id": "ch_7KhaO74sY0MPedM",
      "object": "charge",
      "livemode": false,
      "currency": "jpy",
      "description": "First charge",
      "amount": 1000,
      "amount_refunded": 0,
      "customer": null,
      "created": 1366576035,
      "paid": true,
      "refunded": false,
      "failure_message": null,
      "card": {
        "object": "card",
        "exp_year": 2020,
        "exp_month": 4,
        "fingerprint": "215b5b2fe460809b8bb90bae6eeac0e0e0987bd7",
        "name": "KEISUKE SOGAWA",
        "country": "JP",
        "type": "Visa",
        "cvc_check": "pass",
        "last4": "4242"
      },
      "captured": true,
      "expire_time": null
    },
    {...},
    {...}
  ]
}

最初のポイントとしては、jqというのはxmlのxpathやCSS形式のようなイメージを持っていただくのがわかりやすいと思います。jqに渡している.data[].idという引数の部分がまさにxpathのような感じですね。最初の.data[]という部分は、JSONのルートからみた要素のdataを配列形式で取得します。続く.idで配列の各要素のidを取得しています。.amountに変更すると金額を取得することができます。

注:詳細な使い方はjqの公式を参照してください。

今日はjqの導入部分を紹介したかったので詳しい機能の解説はしませんが、jqにはまだまだたくさんの機能が用意されています。mapやselectのような関数も用意されていたり、四則演算も行うことができるのでぜひjqの全機能に目を通してみてください。きっとあなたのコマンドラインライフを素晴らしい物に変えてくれるはずです。

それでは今日のアドベントカレンダーはここまでです。See you again. Have a nice weekend.

sowawa
sowasowa
mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away