ターミナルでAPIを確認するとき、curlのフラグが長くなり、JSONレスポンスが読みづらいと感じるなら、curlieを試す価値がある。curlieはcurlをラップし、HTTPie風の短い構文と色付き出力を提供するコマンドラインHTTPクライアントだ。この記事では、curlieのインストール、基本的な使い方、curl/HTTPieとの違い、そしてターミナルでの一時的な確認から再現可能なAPIテストへ移行する判断基準を実装ベースで整理する。
curlieとは何か
curlieは、curlのフロントエンドとして動作するCLIツールだ。HTTP通信を独自に再実装するのではなく、HTTPieスタイルのコマンドを解析し、対応するcurl呼び出しを組み立て、実際の通信をローカルのcurlバイナリに渡す。
レスポンスはシンタックスハイライトされ、JSONは整形されて表示される。
この設計により、curlieはcurlの以下の特性をそのまま利用できる。
- プロトコルサポート
- TLS処理
- プロキシ設定
- curlの既存フラグ
- ネットワークまわりの挙動
つまり、curlieは「curlを置き換えるツール」ではなく、「curlを読みやすく、書きやすくする薄いラッパー」と考えると分かりやすい。
curlieは単一のGoバイナリとして配布されている。Pythonランタイムやプラグインは不要で、バイナリをPATHに置けば使える。
curlieを使う理由
curlはほぼすべての環境で使えるが、APIの探索には少し扱いづらい場面がある。
例えば、curlでJSON APIを叩くと次のようになりがちだ。
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token123" \
-d '{"name":"taro","role":"admin"}'
これでも問題なく動くが、フラグが増えるほど読みづらくなる。レスポンスもデフォルトでは整形されない。
curlieを使うと、同じ操作をより短く書ける。
curlie POST https://api.example.com/users \
Authorization:"Bearer token123" \
name=taro \
role=admin
curlieが便利なポイントは次の通り。
JSONレスポンスが読みやすい
色付きで表示され、JSONは整形される。HTTPie風の短い構文が使える
ヘッダー、クエリ、JSONボディを簡潔に書ける。内部ではcurlが動く
curlの挙動やフラグをそのまま活用できる。依存関係が少ない
単一バイナリで導入できる。-vでデバッグしやすい
実際に送受信されたヘッダーを確認できる。
curlieのインストール
curlieはプリビルドバイナリやパッケージマネージャーで配布されている。最新の手順はGitHubのリリースページで確認するのが確実だが、代表的な導入方法は以下の通り。
macOS: Homebrewでインストール
brew install curlie
インストール後、バージョンを確認する。
curlie --version
Goでインストール
Goが入っている場合は、次のコマンドでインストールできる。
go install github.com/rs/curlie@latest
$GOPATH/binまたは$HOME/go/binがPATHに含まれていることを確認する。
which curlie
curlie --version
バイナリを直接配置する
リリースページからOS/アーキテクチャに合ったバイナリをダウンロードし、PATH配下に配置する。
chmod +x curlie
sudo mv curlie /usr/local/bin/
curlie --version
curlieは内部でcurlを呼び出すため、システムにcurlが必要だ。macOSや多くのLinuxディストリビューションでは、通常curlは最初から利用できる。
確認するには次を実行する。
curl --version
基本的な使い方
GETリクエストを送る
最もシンプルな使い方は、URLを指定するだけだ。
curlie httpbin.org/get
スキームを省略した場合、curlieはhttp://を補完する。明示したい場合は次のように書く。
curlie https://httpbin.org/get
メソッドを指定しない場合はGETとして扱われる。
POSTでJSONを送る
JSONボディを送る場合は、key=value形式でフィールドを渡す。
curlie POST httpbin.org/post name=apidog role=platform
このコマンドは、概念的には次のJSONを送信する。
{
"name": "apidog",
"role": "platform"
}
curlieはJSONボディを作成し、Content-Type: application/jsonを設定する。
ヘッダーを追加する
ヘッダーはHeader:value形式で指定する。
curlie GET httpbin.org/get Authorization:"Bearer token123"
複数のヘッダーも指定できる。
curlie GET httpbin.org/get \
Authorization:"Bearer token123" \
X-Request-Id:"dev-001"
クエリパラメータを追加する
クエリパラメータはparam==value形式で指定する。
curlie GET httpbin.org/get search==apidog page==1
これは次のようなURLに相当する。
http://httpbin.org/get?search=apidog&page=1
ヘッダー、クエリ、JSONを組み合わせる
APIの確認では、認証ヘッダー、クエリ、JSONボディを同時に扱うことが多い。
curlie POST https://api.example.com/users \
Authorization:"Bearer token123" \
debug==true \
name=taro \
role=admin
この例では次を行う。
-
POST https://api.example.com/users?debug=trueへ送信 -
Authorizationヘッダーを付与 - JSONボディとして
nameとroleを送信
curlのフラグを混ぜて使う
curlieの短い構文で足りない場合は、curlのネイティブフラグをそのまま渡せる。
curlie -v --max-time 5 https://httpbin.org/get
-vは特にデバッグで有用だ。リクエスト/レスポンスヘッダーを確認できる。
curlie -v POST https://httpbin.org/post \
Authorization:"Bearer token123" \
name=apidog
curlのフラグを詳しく確認したい場合は、curl REST APIガイドも参考になる。
よく使うcurlieコマンド例
APIの疎通確認
curlie https://api.example.com/health
Bearerトークン付きリクエスト
curlie GET https://api.example.com/me \
Authorization:"Bearer $API_TOKEN"
JSONをPOST
curlie POST https://api.example.com/projects \
Authorization:"Bearer $API_TOKEN" \
name=demo \
visibility=private
タイムアウトを設定
curlie --max-time 10 https://api.example.com/slow-endpoint
レスポンスヘッダーを確認
curlie -v https://api.example.com/users
環境変数と組み合わせる
export API_BASE_URL="https://api.example.com"
export API_TOKEN="token123"
curlie GET "$API_BASE_URL/users" \
Authorization:"Bearer $API_TOKEN"
シェル履歴にトークンを直接残したくない場合は、環境変数を使う方が扱いやすい。
curlie vs curl vs HTTPie
3つのツールはいずれもターミナルからHTTPリクエストを送信できる。違いは、構文、出力、内部実装にある。
| 項目 | curl | HTTPie | curlie |
|---|---|---|---|
| エンジン | libcurl | Python requestsスタイル | curlをラップ |
| 構文 |
-X, -H, -dなどのフラグ中心 |
key=value形式の短い構文 |
HTTPie風の短い構文 |
| 出力 | 生の出力 | 色付き、整形済みJSON | 色付き、整形済みJSON |
| インストール | 多くの環境でプリインストール | Pythonパッケージ | 単一Goバイナリ |
| curlフラグ | 利用可能 | 利用不可 | パススルー可能 |
| 依存関係 | なし | Pythonランタイム | curlバイナリ |
| 主な用途 | スクリプト、アドホック確認 | 読みやすいアドホック確認 | curl互換性を保ったアドホック確認 |
選び方はシンプルだ。
- どの環境でも確実に動かしたい: curl
- 読みやすい構文と出力を重視する: HTTPie
- curlの挙動を使いながら、HTTPie風に書きたい: curlie
HTTPieについて詳しく知りたい場合は、HTTPieチュートリアルを参照できる。curlとHTTPieの構文差を比較したい場合は、curlとHTTPieの比較も役立つ。
その他のCLI/GUIツールも含めて検討するなら、REST APIテスト用curl代替ツールのまとめを確認するとよい。
curlieが向いているケース
curlieは、短時間でAPIを探索する用途に向いている。
例えば、次のような作業だ。
- 新しいエンドポイントのレスポンスを確認する
- JSONの構造を目視で確認する
- 認証ヘッダーやクエリパラメータを試す
-
-vで実際のHTTPヘッダーを確認する - curlコマンドを書く前に、短い構文で挙動を確認する
開発中の典型的な流れは次のようになる。
# 1. まず疎通確認
curlie https://api.example.com/health
# 2. 認証付きでユーザー情報を確認
curlie GET https://api.example.com/me \
Authorization:"Bearer $API_TOKEN"
# 3. POSTの挙動を確認
curlie POST https://api.example.com/users \
Authorization:"Bearer $API_TOKEN" \
name=taro \
role=admin
# 4. 詳細ログでヘッダーを確認
curlie -v POST https://api.example.com/users \
Authorization:"Bearer $API_TOKEN" \
name=taro \
role=admin
このような「試す、見る、修正する」という作業では、curlieは非常に使いやすい。
curlieが向いていないケース
一方で、curlieはテストランナーではない。次のような用途では限界がある。
- リクエストをチームで保存・共有したい
- ローカル、ステージング、本番の環境を切り替えたい
- ステータスコードやレスポンスフィールドを自動検証したい
- CI/CDでAPIテストを実行したい
- テスト結果をレポートとして残したい
例えば、curlieの結果をgrepやjqでチェックするスクリプトを書き始めると、管理が難しくなる。
response=$(curlie https://api.example.com/health)
echo "$response" | grep "ok"
このようなチェックが増えてきたら、アドホックな確認ではなく、保存可能で再現可能なAPIテストとして管理する段階だ。
アップグレードパス: 一時的な確認から再現可能なワークフローへ
curlieは探索に向いている。だが、同じリクエストを繰り返し実行したり、チームで共有したり、CIで検証したりする場合は、専用のプラットフォームへ移す方がよい。
Apidogは、curlieで確認したAPIリクエストを、保存・共有・検証できるワークフローに移すためのツールだ。curlieのターミナル代替ではなく、ターミナルで探索した後の次のレイヤーとして使う。
Apidogでは次のようなことができる。
リクエストを保存する
シェル履歴ではなく、整理されたコレクションとして管理できる。環境を管理する
ローカル、ステージング、本番などの変数を切り替えて同じリクエストを実行できる。アサーションを追加する
ステータスコード、レスポンスフィールド、スキーマなどを検証できる。CIでテストを実行する
apidog runを使って、保存済みのテストシナリオをパイプラインで実行できる。チームで共有する
一度デバッグしたリクエストを、チームメンバーが再利用できる。
実践的には、次の流れが扱いやすい。
- curlieでエンドポイントを素早く探索する
- 必要なヘッダー、クエリ、ボディを確定する
- Apidogにリクエストとして保存する
- ステータスコードやレスポンスフィールドのアサーションを追加する
- CIで定期的に実行する
APIテストの考え方を整理したい場合は、APIテストガイドが参考になる。
よくある質問
curlieはcurlの代替になるのか?
厳密には代替ではない。curlieはcurlの上で動作するフロントエンドだ。短い構文をcurl呼び出しに変換し、出力を読みやすく整形する。実際の通信はcurlが担当する。
curlieはCI/CDパイプラインで使えるのか?
シェルスクリプトからcurlieを呼び出すことはできる。ただし、curlie自体は自動テスト向けに設計されていない。アサーション、保存済みシナリオ、構造化レポートは提供しない。
CIでAPIを検証するなら、レスポンスを評価し、失敗時にビルドを落とせるランナーが必要になる。Apidogのapidog runはその用途に対応する。その他の選択肢は、主要なAPIテストクライアントのリストでも確認できる。
curlieはHTTPieとどう違うのか?
curlieはHTTPie風の構文と色付き出力を提供するため、使い勝手は似ている。違いは内部実装だ。
HTTPieはPython製のスタンドアロンツールで、独自のHTTPクライアントとして動作する。curlieはGo製の薄いラッパーで、実際の通信はcurlに渡す。そのため、curlのフラグや挙動をそのまま利用したい場合はcurlieが向いている。
curlieが実行する実際のリクエスト内容を確認できるか?
できる。-vフラグを付けて実行すると、リクエストヘッダー、レスポンスヘッダー、通信の詳細を確認できる。
curlie -v GET https://httpbin.org/get \
Authorization:"Bearer token123"
これは、認証ヘッダーが正しく送られているか、サーバーがどのヘッダーを返しているかを確認する際に役立つ。
結論
curlieは、curlの強力さを維持しながら、HTTPie風の短い構文と読みやすい出力を提供する実用的なCLIツールだ。エンドポイントの疎通確認、JSONレスポンスの確認、認証ヘッダーのデバッグなど、ターミナルでのアドホックなAPI探索に向いている。
一方で、リクエストを保存し、共有し、アサーションを追加し、CIで実行したい場合は、テストワークフローとして管理する段階だ。Apidogをダウンロードして、curlieで探索したAPIを、チームで再利用できる保存済みリクエスト、環境、テストシナリオに変換できる。
素早い確認にはcurlieを使い、繰り返し検証すべき作業はApidogで管理するのが実践的な使い分けだ。


Top comments (0)