2分で最初のテストを実行
単純なエンドポイントを1つ確認したいだけなのに、Postmanの起動を30秒も待たされるのは本当にストレスが溜まります。そこで私はHurlに乗り換えました。これはプレーンテキストでAPIテストシナリオを記述できるコマンドラインインターフェース(CLI)ツールで、非常に高速かつ軽量です。
まずは、Hurlをインストールしましょう。macOSなら、コマンド1つで完了します:
# macOS用
brew install hurl
# Linux用 (Ubuntu/Debian)
curl -LO https://github.com/Orange-OpenSource/hurl/releases/download/4.3.0/hurl_4.3.0_amd64.deb
sudo dpkg -i hurl_4.3.0_amd64.deb
次に、サンプルAPIをテストするための test.hurl ファイルを作成します:
GET https://jsonplaceholder.typicode.com/posts/1
HTTP 200
[Asserts]
jsonpath "$.id" == 1
jsonpath "$.title" contains "sunt aut facere"
以下のコマンドを実行してテストを実施します:
hurl --test test.hurl
結果はすぐに表示されます。煩わしいGUIは不要で、UIテスト自動化と同様に、プロフェッショナルなテストケース一式が手に入ります。
なぜPostmanではなくHurlを選ぶのか?
私はかつて100以上のエンドポイントを持つシステムを管理していました。その際、Postmanの使用においてチームを悩ませた3つの致命的な欠点がありました:
- Gitコンフリクトという悪夢: PostmanのJSONファイルはコードレビューで非常に読みにくいです。2人が同時にコレクションを修正しただけで、マージ作業は悲惨なものになります。Hurlはプレーンテキストを使用するため、差分(diff)が非常にクリーンです。
- 圧倒的なパフォーマンス差: Postmanは通常500MBから1GBのRAMを占有します。一方、Rustで書かれたHurlは、実行時のメモリ消費量が10MB未満です。
- 非常にシンプルなCI/CD統合: Node.jsやNewmanを別途インストールする必要はありません。Hurlは約5MBの単一バイナリファイルであり、GitOpsの実装を含む最小限のDockerイメージに最適です。
Hurlの構文:直感的かつ強力
Hurlは単にリクエストを送信するだけではありません。返ってきたデータ(アサーション)を詳細に検証することができます。
1. データの送信(POSTリクエスト)
REST APIを構築した後のデータの新規作成も非常に自然に記述できます:
POST https://api.itfromzero.com/v1/users
{
"name": "田中 太郎",
"email": "[email protected]"
}
HTTP 201
[Asserts]
jsonpath "$.message" == "User created"
2. レスポンス速度とヘッダーの検証
テストファイル内でパフォーマンス基準を設けることも可能です。負荷テストほど複雑ではありませんが、例えば、APIが500ms以内にレスポンスを返す必要がある場合:
GET https://api.itfromzero.com/v1/health
HTTP 200
[Asserts]
duration < 500
header "Content-Type" == "application/json; charset=utf-8"
複雑なシナリオの処理:リクエストの連鎖
実際の開発では、ログインしてトークンを取得し、その後にメインのAPIを呼び出すという流れが一般的です。Hurlは変数を使用して、このフローを非常にスムーズに処理できます。
# ステップ1: ログインしてトークンを保存
POST https://api.example.com/login
{
"username": "admin",
"password": "secret"
}
HTTP 200
[Captures]
token: jsonpath "$.access_token"
# ステップ2: 次のリクエストでトークンを使用
GET https://api.example.com/profile
Authorization: Bearer {{token}}
HTTP 200
[Asserts]
jsonpath "$.username" == "admin"
複数の環境(Dev/Staging)で実行するには、env.properties ファイルと --variables-file フラグを使用するだけです。このアプローチにより、データとテストシナリオを明確に分離できます。
GitHub Actionsによる自動化
サードパーティの監視サービスにコストをかける代わりに、GitHub Actionsを無料のAPI監視システムに変えることができます。REST API構築後のコードをプッシュするたびに、Hurlが自動的にシステム全体をチェックします。
name: API Monitoring
on: [push, schedule: {cron: "*/5 * * * *"}]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Hurlをインストール
run: |
curl -LO https://github.com/Orange-OpenSource/hurl/releases/download/4.3.0/hurl_4.3.0_amd64.deb
sudo dpkg -i hurl_4.3.0_amd64.deb
- name: テストを実行
run: hurl --test tests/*.hurl
実践的なアドバイス
多くのプロジェクトでHurlを採用した結果, 得られた3つの注意点を紹介します:
- ファイル構成: すべてを1つのファイルに詰め込まないでください。管理しやすくするために、
auth.hurlやpayment.hurlのように機能ごとに分割しましょう。 - HTMLレポートの活用: CI上で
--report-html report/フラグを使用してください。テストが失敗した際、どこにエラーがあるかを視覚的に確認できるWebページが生成されます。 - 使い分けが重要: Hurlは自動化には最適ですが、初めて新しいAPIを試行錯誤(explore)する場合は、PostmanやInsomniaのような GUIツールにも独自の価値があります。
Hurlは「小さくても非常に強力な」ツールです。テストシナリオをソースコード管理の標準フローに組み込むことで、開発プロセスをよりプロフェッショナルなものにしてくれます。

