hurl - 純粋なテキストでHTTPリクエストを記述・実行するRust製ツール

API開発やテストの日々の作業において、コマンドラインから素早くHTTPリクエストを送信し、レスポンスを検証する必要があります。curl は業界標準ですが、複雑なリクエストチェーンや検証ロジックを記述する際、コマンドライン構文が冗長で読みにくくなります。

hurl は、簡潔な純粋テキスト形式でこの問題を解決します。Orangeがオープンソース化したこのRustツールは、Markdownのような構文でHTTPリクエストファイルを記述でき、アサーション、変数、リダイレクト、Cookie管理をサポートします——本質的にはテキストファイルで自動化APIテストを行うことです。

プロジェクト概要

属性内容
GitHubOrange-OpenSource/hurl
⭐ Stars18.7k
🔧 言語Rust
⚡ 特徴純テキスト形式、チェーンリクエスト、アサーション検証
📅 更新今日(アクティブ開発中)

主要機能

1. 純テキストによるリクエスト定義

hurlは直感的なテキスト形式を使用し、複雑なコマンドライン引数を記憶する必要がありません:

GET https://api.example.com/users
Authorization: Bearer {{token}}

HTTP 200
[Asserts]
jsonpath "$[*].id" exists
jsonpath "$[0].name" == "Alice"

2. リクエストチェーンと変数受け渡し

レスポンスからデータを抽出し、後続のリクエストに渡すことが可能です:

# ログインしてトークンを取得
POST https://api.example.com/login
{
  "username": "admin",
  "password": "secret"
}

HTTP 200
[Captures]
token: jsonpath "$.token"

# トークンを使用して保護されたリソースにアクセス
GET https://api.example.com/profile
Authorization: Bearer {{token}}

HTTP 200

3. 豊富なアサーションサポート

レスポンスのステータス、ヘッダー、ボディコンテンツを検証する多様なアサーション方式を内包:

GET https://api.example.com/products/123

HTTP 200
[Asserts]
header "Content-Type" contains "application/json"
jsonpath "$.name" matches /Product .*/
jsonpath "$.price" isInteger
bytes count == 1024

4. curlエコシステムとの互換性

hurlはcurlコマンドにエクスポートでき、既存のcurlリクエストも直接インポートできます:

# curlコマンドにエクスポート
hurl --curl my_request.hurl

# HTMLレポートを生成
hurl --report-html report/ test.hurl

クイックスタート

# macOS
brew install hurl

# Linux
curl --location --remote-name https://github.com/Orange-OpenSource/hurl/releases/latest/download/hurl-linux-x86_64.tar.gz
tar xf hurl-linux-x86_64.tar.gz

# テストを実行
hurl test.hurl

ユースケース

  • APIテスト: バージョン管理可能な統合テストケースを記述
  • CI/CD統合: 軽量な自動化テストツール
  • 開発デバッグ: 複雑なcurlコマンドの代替
  • ドキュメントアズコード: APIリクエストをドキュメントとして管理

まとめ

hurlはcurlと重量級APIテストツールの間のギャップを埋めます。コマンドラインツールの軽量性を保ちつつ、構造化されたテスト機能を提供します。シンプルで保守性の高いテストソリューションを追求する開発チームにとって、注目に値する選択肢です。