【最新サービス試用⑧】リクエスト管理やJSON出力結果整形等に便利なcurl拡張コマンドツールの「curlx」を試用。


  • 日々輩出される素晴らしき最新サービスを素早く試して、不鮮明な先見性を堂々と誇示する記事第八弾。
  • 歴史的偉人の集中力の記事の、収集作業に精を出している生活。
  • 今回は、curlでの出力の際に、Terminal上であらゆる高機能な作業が可能な「curlx」を試用することにしよう。

概要

  • レスポンス確認やAPI通信の際の際に用いる「curl」のリクエストの管理が捗るコマンドツール。
  • 「JSONでの出力結果の整形」や「リクエストのコレクション(グループ化)」等の機能を、GUIツール等を利用せずに、ターミナル内のみで可能。
  • GUIツールの「Postman」やJSON整形コマンドツールの「jq」の両方の機能を備えたようなツール。
  • 公式サイト
  • 公式Github

特徴

出力結果の整形

  • 可読が容易ではないcurlでのJSON出力結果を、cxでは整形して、見やすく表示してくれる。
  • jqを利用することなく、標準で整形してくれる。

リクエスト履歴の視覚化

  • リクエスト履歴の確認が容易に可能であることに加え、ステータスや通信形式、時間等の詳細情報が表として、わかりやすく確認できる。

リクエストのコレクション(グループ)化

  • リクエストをカテゴリごとにグループ化できるため、「よく投げるコマンドのエイリアス登録」や「内容別でのリクエストのグループ管理」が可能。
  • Postmanでのコレクション機能を、ターミナル内で利用が可能。

結果

  • テストAPIとして、LivedoorさんのWeather Hackを利用。

  • 下記のように、curlでは見づらいjson形式や文字化けが、簡単なコマンドで見やすくなる。

  • 通信形式やステータス結果等も含んだ、わかりやすい履歴の表示も可能。

  • よく使う出力等を、グループ化で整理して、簡単なコマンドでリクエストが可能。

作業環境

  • Amazon Linux 2
  • Node.js v10.16.0
  • npm 6.9.0
  • Node.js環境が利用できれば、MacやWindowsでも可能。

インストール

# Node.jsのバージョン確認
$ node -v

# npmのバージョン確認
$ npm -v
  • 確認後、下記のコマンドをうち、「curlx」のインストールを行う。
# curlxのインストール
$ sudo npm install curlx -g

# バージョン確認
$ cx version

基本操作

  • curlxの基本操作は、下記。
    • 基本的にcurlコマンドをcxに置き換えるだけで可能。
内容 コマンド
通常リクエスト cx 接続先URL
※オプション指定なしで、ヘッダー出力やjson整形が可能。
リクエスト(オプション付き) cx -オプション URL
オプションは、curlと同様なため、curlをcxに置き換えるだけ。
例 : cx -X GET URL
リクエスト履歴確認 cx history
リクエストのグループ(コレクション)化 cx new collections
実行後、いくつかの質問に回答していく形で、作成していく
詳細は、下記の操作例を確認。
作成コレクションへのリクエストの追加 cx new request
コレクション作成同様、質問形式で追加していく
詳細は、下記の操作例を確認。
コレクション一覧 cx collections
idやコレクションリクエストでの実行 cx run <id or collection_id>
詳細は、下記の操作例を確認。
リクエストやコレクションの削除 cx delete <id or collectionname>
詳細は、下記の操作例を確認。
ヘルプページ確認 cx help
バージョン確認 cx version

操作例

通常リクエスト

  • 下記のコマンドをうち、URLでの通常リクエストを行う。
    • オプションは、curlと同様に扱えるため、cxに置き換えるだけでよい。
# 通常リクエスト
$ cx http://weather.livedoor.com/forecast/webservice/json/v1?city=471010

# オプション指定でのリクエスト
$ cx -X GET http://weather.livedoor.com/forecast/webservice/json/v1?city=471010

コレクションの作成〜実行

  • 下記のコマンドをうち、cxコマンドをグループ化することで、任意の名前とidでリクエストが可能。
# コレクション(グループ)を作成
$ cx new collection

✔ Name of your new collection … コレクション名(例:getWeather)入力

This collection already exists
✔ Would you like to add a new request to getWeather … リクエスト追加確認(例:yes)

✔ Enter complete request  eg: cx -X GET https://httpbin.org/get … 実行コマンド入力(例:cx -X GET URL)

✔ Give a name for your request … リクエスト名(例:getOkinawa)

# コレクション一覧確認
$ cx collections

┌────────────┬────────────────────┬────────┬──────────────────────────────┐
│ id         │ name               │ method │ url                          │
├────────────┼────────────────────┼────────┼──────────────────────────────┤
│ y2Q9JCOjL  │ getOkinawa         │ get    │ http://weather.livedoor.com… │
└────────────┴────────────────────┴────────┴──────────────────────────────┘


# id名でのリクエスト実行
# まず、history(履歴)内のid名での実行
$ cx history

┌────────────┬────────┬──────────────────────────────┬────────┬────────────┐
│ id         │ method │ url                          │ status │ timestamp  │
├────────────┼────────┼──────────────────────────────┼────────┼────────────┤
│ H0yIigcQv  │ get    │ http://weather.livedoor.com… │ 200    │ 2019-7-13  │
│            │        │                              │        │ 12:51 PM   │
├────────────┼────────┼──────────────────────────────┼────────┼────────────┤

$ cx run H0yIigcQv

{
  "pinpointLocations": [
    {
      "link": "http://weather.livedoor.com/area/forecast/4720100",
      "name": "那覇市"
    },
    {


# コレクション内のリクエストidでの実行
# ※コレクション内のidは、コレクション名も同時に明記する必要がある。
$ cx run getWeather y2Q9JCOjL

{
  "pinpointLocations": [
    {
      "link": "http://weather.livedoor.com/area/forecast/4720100",
      "name": "那覇市"
    },

コレクションへのリクエスト追加

  • 下記のコマンドをうち、既存コレクションに新規リクエストを追加
# コレクション確認
$ cx collections

┌────────────┬────────────────────┬────────┬──────────────────────────────┐
│ id         │ name               │ method │ url                          │
├────────────┼────────────────────┼────────┼──────────────────────────────┤
│ y2Q9JCOjL  │ getOkinawa         │ get    │ http://weather.livedoor.com… │
└────────────┴────────────────────┴────────┴──────────────────────────────┘

# リクエストの新規追加
$ cx new request

✔ Name of your new collection … コレクション名(getWeather)入力

✔ Enter complete request  eg: cx -X GET https://httpbin.org/get … 実行コマンド(例:cx URL)

✔ Give a name for your request … リクエスト名(getOsaka)

# コレクション一覧再確認
$ cx collections

┌────────────┬────────────────────┬────────┬──────────────────────────────┐
│ id         │ name               │ method │ url                          │
├────────────┼────────────────────┼────────┼──────────────────────────────┤
│ y2Q9JCOjL  │ getOkinawa         │ get    │ http://weather.livedoor.com… │
├────────────┼────────────────────┼────────┼──────────────────────────────┤
│ nG3nzD53k  │ getOsaka           │ get    │ http://weather.livedoor.com… │
└────────────┴────────────────────┴────────┴──────────────────────────────┘

リクエストidやコレクションidの削除

  • 下記のコマンドをうち、リクエストidやコレクションの削除を行う。
# id名でのリクエスト削除
$ cx delete H0yIigcQv

# コレクション内のid名でのリクエスト削除
$ cx delete getWeather:y2Q9JCOjL

操作履歴やコレクション確認

  • curlxの操作履歴やコレクション一覧は、下記のファイルで確認できる。
    • curlxの履歴やコレクションといった情報は、ルートフォルダの「cxdb」というフォルダに保存されている。
    • 簡単な履歴やコレクション確認の際は、上記の操作例での操作方法で可能。
# 操作履歴格納ファイルの中身確認
$ less ~/cxdb/history.json

{
  "history": [
    {
      "id": "UsVI7Oq9Y",
      "method": "get",
      "command": "curl -i \"http://weather.livedoor.com/forecast/webservice/json/v1?city=471010\"",
      "url": "http://weather.livedoor.com/forecast/webservice/json/v1?city=471010",
      "status": "200",
      "ts": "2019-7-12 11:58 PM"
    },
    {
      "id": "So_ybzFn3",
      "method": "get",
      "command": "curl -i \"http://weather.livedoor.com/forecast/webservice/json/v1?city=471010\"",
      "url": "http://weather.livedoor.com/forecast/webservice/json/v1?city=471010",
      "status": "200",
      "ts": "2019-7-13 12:01 AM"
    },
# コレクション一覧ファイルの中身確認
$ less ~/cxdb/collection.json

{
  "collections": {
    "getWeather": [
      {
        "id": "y2Q9JCOjL",
        "name": "getWeather",
        "method": "get",
        "command": "curl -i \"-X\" \"GET\" \"http://weather.livedoor.com/forecast/webservice/json/v1?city=471010\"",
        "url": "http://weather.livedoor.com/forecast/webservice/json/v1?city=471010"
      }

まとめ

  • 今回は、curlでのAPI結果整形ということで、「Terminalのみでの利用幅の拡大」による「パソコンの容量削減」を感慨深く染みながら、記事を書く。
  • 「利用機能による、GUIツールとCUIツールの併用」の誓いは、すぐさま「日毎の気分利用」に変化することを確信。
  • しばらく、この賢人ツールとの付き合いが続くと感じたため、より一層開発者礼拝を強化。

参考