- 日々輩出される素晴らしき最新サービスを素早く試して、不鮮明な先見性を堂々と誇示する記事第八弾。
- 歴史的偉人の集中力の記事の、収集作業に精を出している生活。
- 今回は、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でも可能。
インストール
-
curlxのインストールは、Nodejsのnpmやyarnで可能なため、未導入の場合は、下記を参考にインストールする。
-
Node.jsのインストール後、下記のコマンドをうち、バージョン確認をする。
# 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ツールの併用」の誓いは、すぐさま「日毎の気分利用」に変化することを確信。
- しばらく、この賢人ツールとの付き合いが続くと感じたため、より一層開発者礼拝を強化。
参考
-
https://curlx.dev/
→公式サイトです。大変お世話になりました。 -
https://github.com/shivkanthb/curlx
→公式Githubです。大変お世話になりました。 -
https://entry.anypicks.jp/product-curlx/
→こちらの記事で知りました。大変お世話になりました。