AI

httpie (hx)の使い方完全ガイド【インストールから応用まで】

httpie (hx)の使い方完全ガイド【インストールから応用まで】

API開発やWebサービスのデバッグ作業は、日常的に発生します。 しかし、そのたびに複雑なHTTPリクエストを手動で構築したり、レスポンスの確認に手間取ったりしていませんか。 従来のツールでは、JSONの整形や色付けがされず、ターミナルでの視認性が低いこともありました。 特に、認証情報や多数のヘッダーを持つリクエストは、記述するだけでも一苦労です。

もし、あなたがそのような状況に直面しているなら、この記事はあなたのためのものです。httpie (hx)というツールを使えば、これらの課題は過去のものとなります。httpieは、まるで人間が話すかのように、シンプルかつ直感的な構文でHTTPリクエストを扱えます。 色分けされた整形済みの出力は、レスポンスの解読を劇的に容易にします。 API開発の現場で、よりスムーズで快適な体験を手に入れましょう。

httpie (hx)とは

httpie (エイチティーティーパイ)は、コマンドラインで動作するHTTPクライアントです。 その最大の目的は、WebサービスとのCLIでのやり取りを「人間にとって優しい」ものにすることです。 APIのテスト、デバッグ、HTTPサーバーとの一般的な対話のために設計されました。 httphttpsというシンプルなコマンドで、あらゆるHTTPリクエストを作成し送信できます。 特に、その読みやすい構文と、整形され色付けされた出力が大きな特徴です。 従来のcurlコマンドに比べて、より直感的に操作できるため、API開発者にとって必携のツールとなっています。 JSONの自動処理、フォームデータやファイルアップロードのサポート、セッション管理など、豊富な機能を備えています。

インストール方法

httpieのインストールは非常に簡単です。 お使いのOSに合わせて、以下のいずれかの方法を選んでください。 Pythonのパッケージマネージャーpipxを使う方法が最も推奨されます。pipxは、Pythonアプリケーションを分離された環境にインストールし、PATHにコマンドを公開するツールです。

macOSの場合

Homebrewを利用してインストールするのが最も一般的です。 まずHomebrewがインストールされていることを確認してください。

brew install httpie

または、pipxを使用することもできます。pipxが未導入の場合は、先にインストールします。

brew install pipx
pipx ensurepath
pipx install httpie

Linuxの場合

多くのディストリビューションでパッケージマネージャーを通じてインストールできます。

Debian/Ubuntuの場合:

sudo apt update
sudo apt install httpie

Fedoraの場合:

sudo dnf install httpie

その他のLinuxディストリビューションや汎用的な方法としてpipx: まずpipxをインストールします。

python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install httpie

Windowsの場合

Chocolateyまたはpipxを利用してインストールできます。

Chocolateyの場合: Chocolateyが未導入の場合は、公式サイトの手順に従ってインストールしてください。

choco install httpie

pipxの場合: まずPythonとpipがインストールされていることを確認してください。 Windows PowerShellまたはコマンドプロンプトで以下のコマンドを実行します。

py -m pip install --user pipx
py -m pipx ensurepath
pipx install httpie

インストールが完了したら、ターミナルでhttp --versionを実行して、バージョン情報が表示されるか確認しましょう。

http --version

基本的な使い方

httpieのコマンドはhttpです。httpsも利用できますが、通常はhttpで十分です。 ここでは、httpieを使い始めるために最低限知っておくべきコマンドを3〜5個紹介します。

1. GETリクエストの送信

最も基本的な使い方は、URLを指定してGETリクエストを送ることです。 レスポンスは自動的に整形され、色付けされて表示されます。

http https://httpbin.org/get

このコマンドは、httpbin.org/getエンドポイントにGETリクエストを送信します。httpbin.orgは、HTTPリクエストのテストに便利なサービスです。 レスポンスには、リクエストの詳細やHTTPヘッダーが含まれます。

2. POSTリクエストとJSONデータの送信

httpieは、JSONデータの送信を非常に簡単に行えます。 キーと値をスペースで区切って指定するだけで、自動的にJSON形式に変換して送信してくれます。 :=を使うと、指定した値がJSONの文字列ではなく、元の型(数値、真偽値など)として扱われます。

http POST https://httpbin.org/post name=Alice age:=30 is_active:=true

この例では、nameは文字列、ageは数値、is_activeは真偽値として送信されます。POSTメソッドは、URLの前に指定します。

3. HTTPヘッダーの指定

カスタムヘッダーを追加するには、Header-Name:Valueの形式で指定します。 コロンの後にスペースは不要です。

http GET https://httpbin.org/headers User-Agent:'My HTTPie Client' X-Custom-Header:HelloWorld

User-AgentX-Custom-Headerといったヘッダーをリクエストに追加します。 値にスペースが含まれる場合は、クォートで囲みます。

4. 認証情報の送信

ベーシック認証を行うには、-aオプションにユーザー名:パスワードの形式で指定します。

http -a user:pass https://httpbin.org/basic-auth/user/pass

このコマンドは、userというユーザー名とpassというパスワードで認証を試みます。httpbin.orgのこのエンドポイントは、正しい認証情報が提供された場合に成功します。

5. 詳細なリクエスト情報の表示 (-vオプション)

送信するリクエストや受信したレスポンスのヘッダーを詳細に確認したい場合、-v (または--verbose) オプションを使用します。 これはデバッグ時に非常に役立ちます。

http -v POST https://httpbin.org/post message='Hello from HTTPie'

このコマンドを実行すると、実際のリクエストヘッダーとボディ、そしてレスポンスヘッダーとボディの両方が表示されます。 どのような情報がサーバーに送られ、どのような情報が返ってきたのかを正確に把握できます。

便利な使い方・応用例 3選

実際の開発シーンでは、より複雑なリクエストを扱うことがよくあります。httpieは、それらのタスクもシンプルにこなすことができます。

1. ファイルアップロードとフォームデータの送信

Webアプリケーションでは、ファイルアップロード機能が頻繁に利用されます。httpieを使えば、ファイルを簡単にアップロードできます。--formオプションを使ってフォームデータとして送信し、@を使ってファイルを指定します。 例えば、./hello.txtというファイルを作成し、アップロードしてみましょう。

まず、適当なテキストファイルを作成します。

echo "Hello, HTTPie!" > hello.txt

次に、このファイルをhttpbin.org/postエンドポイントにアップロードします。nameというフィールドにテキストデータ、fileというフィールドにファイルデータを指定しています。

http --form POST https://httpbin.org/post name=MyName file@./hello.txt

このコマンドは、namefileを含むマルチパートフォームデータとしてリクエストを送信します。 レスポンスには、アップロードされたファイルの内容とフォームデータが含まれていることを確認できます。

2. セッション管理と認証情報の再利用

APIとのやり取りでは、ログイン後に取得したトークンを使って、その後のリクエストを行うことがよくあります。httpieのセッション機能を使えば、認証情報やヘッダーをセッションとして保存し、複数のリクエストで再利用できます。 これにより、繰り返し認証情報を入力する手間が省けます。

例えば、架空の認証APIとデータ取得APIを想定します。 まず、--sessionオプションでセッション名を指定し、ログインリクエストを送ります。

http --session=my_api_session -a user:password POST https://api.example.com/login

このリクエストが成功し、セッションデータ(例えばクッキーや認証トークン)が保存されたとします。 次に、同じセッションを使ってデータを取得するリクエストを送ります。

http --session=my_api_session GET https://api.example.com/data

my_api_sessionという名前のセッションが、認証情報やクッキーを自動的に引き継ぎます。 これにより、再度認証情報を渡す必要なく、安全にAPIリクエストを実行できます。 セッションデータは、デフォルトでは~/.config/httpie/sessions/以下に保存されます。

3. レスポンスのフィルタリングとパイプ処理

httpieの出力は読みやすいですが、特定の情報だけを抽出したい場合もあります。 Unixのパイプ機能と他のCLIツールを組み合わせることで、レスポンスをさらに加工できます。 例えば、jqというJSONパーサーと組み合わせると、複雑なJSONレスポンスから必要なデータだけを抽出できます。

まずは、httpbin.orgからJSONデータを含むレスポンスを取得します。 ここでは、https://api.github.com/users/httpieからHTTPieユーザーの情報を取得する例を考えます。

http GET https://api.github.com/users/httpie

このコマンドは、ユーザーの詳細なJSONデータを返します。 ここから、ユーザー名(loginフィールド)とフォロワー数(followersフィールド)だけを抽出したいとします。jqコマンドをインストールしていれば、以下のようにパイプで繋いで処理できます。

http GET https://api.github.com/users/httpie | jq '{login: .login, followers: .followers}'

このコマンドは、GitHub APIから取得したJSONデータの中から、loginfollowersの2つのフィールドだけを抽出し、新しいJSONオブジェクトとして表示します。jqを使うことで、JSONレスポンスの構造を理解し、必要な情報だけを効率的に取り出すことが可能です。 これは、大規模なAPIレスポンスを扱う際に特に有効なテクニックです。

他ツールとの組み合わせ

httpieは単体でも強力ですが、他のCLIツールと組み合わせることで、その真価をさらに発揮します。 Unix哲学に基づき、それぞれのツールが得意な処理を担当することで、より複雑なタスクも効率的に実行できます。

1. jq:JSONデータの整形と抽出

前述の例でも紹介しましたが、jqはJSONデータを処理するための非常に強力なコマンドラインツールです。httpieが返す整形されたJSON出力を、さらに細かくフィルタリングしたり、変換したりするのに使われます。

# GitHub APIからリポジトリ一覧を取得し、各リポジトリの名前とスター数のみを抽出
http https://api.github.com/users/httpie/repos | jq '.[].{name: .name, stars: .stargazers_count}'

jqを使うことで、数百行に及ぶJSONレスポンスから、特定の数行だけを抽出するような処理が容易になります。

2. less:長いレスポンスのページング表示

APIからのレスポンスが非常に長く、画面に収まらない場合、lessコマンドと組み合わせると便利です。lessは、ファイルをページ単位で表示するツールです。

http GET https://api.example.com/large_data | less

このコマンドを実行すると、httpieの出力がlessに渡され、矢印キーで上下にスクロールしたり、検索 (/) を行ったりできます。 これで、巨大なJSONやHTMLのレスポンスも快適に閲覧できます。

3. grep:レスポンスからのキーワード検索

レスポンスの中から特定のキーワードが含まれているかどうかを確認したい場合、grepコマンドが役立ちます。

# GitHub APIから公開されているIPアドレスの範囲を取得し、特定のIPアドレスがあるか検索
http GET https://api.github.com/meta | grep '192.30.252.0/22'

grepを使うことで、大量のテキストの中から目的の情報を素早く見つけ出すことができます。-iオプションで大文字小文字を区別しない検索、-Cオプションで前後の行も表示することも可能です。

4. xargs:前のコマンドの出力を引数に渡す

xargsは、標準入力から読み込んだ文字列を、別のコマンドの引数として渡すコマンドです。 例えば、httpieで取得したIDリストを使って、別のAPIエンドポイントを複数回叩くような場合に利用できます。

# 架空のAPIでユーザーIDのリストを取得し、それぞれのIDで詳細情報を取得する例
# user_ids.txt に1行1IDでリストが書かれていると仮定
cat user_ids.txt | xargs -I {} http GET https://api.example.com/users/{}

この例では、user_ids.txtから各行(ユーザーID)を読み込み、それぞれのIDに対してhttp GET https://api.example.com/users/{id}を実行します。xargs-I {}は、標準入力の各行を{}に置き換えてコマンドを実行する指示です。

5. シェルスクリプト:複数のhttpieコマンドの自動化

一連のAPIリクエストを自動化したい場合、シェルスクリプトにhttpieコマンドを記述するのが最も効果的です。 例えば、認証、データ作成、データ取得、データ更新といった一連のテストフローをスクリプト化できます。

#!/bin/bash

# 環境変数からAPIベースURLと認証情報を読み込む
API_BASE_URL="https://api.example.com"
USERNAME="testuser"
PASSWORD="testpassword"

echo "--- 1. ログイン ---"
AUTH_TOKEN=$(http --session=test_session -a "$USERNAME":"$PASSWORD" POST "$API_BASE_URL/login" | jq -r '.token')

if [ -z "$AUTH_TOKEN" ]; then
    echo "ログインに失敗しました。"
    exit 1
fi
echo "認証トークン: $AUTH_TOKEN"

echo "--- 2. 新しいアイテムを作成 ---"
CREATE_RESPONSE=$(http --session=test_session POST "$API_BASE_URL/items" name="New Item" description="This is a new item." | jq -r '.id')
if [ -z "$CREATE_RESPONSE" ]; then
    echo "アイテム作成に失敗しました。"
    exit 1
fi
echo "作成されたアイテムID: $CREATE_RESPONSE"

echo "--- 3. アイテム一覧を取得 ---"
http --session=test_session GET "$API_BASE_URL/items"

echo "--- 4. 作成したアイテムを更新 ---"
http --session=test_session PUT "$API_BASE_URL/items/$CREATE_RESPONSE" name="Updated Item" status="completed"

echo "--- 5. 作成したアイテムを削除 ---"
http --session=test_session DELETE "$API_BASE_URL/items/$CREATE_RESPONSE"

echo "--- 完了 ---"

このシェルスクリプトは、ログインからアイテムの作成、取得、更新、削除までの一連のAPI操作を自動化します。httpieのセッション機能とjqを組み合わせることで、レスポンスから必要な情報を抽出し、次のリクエストに利用できます。 このようなスクリプトは、APIのE2Eテストや定期的なデータ操作に非常に有効です。

よくある設定・カスタマイズ

httpieは、コマンドラインオプションだけでなく、設定ファイルや環境変数を使ってカスタマイズできます。 これにより、よりパーソナルな開発環境を構築できます。

1. エイリアスの設定

最も手軽なカスタマイズは、シェルにエイリアスを設定することです。httpieのコマンド名httpは短くて便利ですが、場合によっては他のツールと競合する可能性があります。 そこで、例えばhxというエイリアスを設定しておくと良いでしょう。 また、よく使うオプションをエイリアスに含めておくと、毎回入力する手間が省けます。 例えば、常に整形・色付けして出力し、リダイレクトを自動で追跡する設定をデフォルトにできます。

.zshrc.bashrcファイルに以下の行を追加します。

# httpie のエイリアス設定
alias hx='http --pretty=all --follow'

設定を反映するには、シェルを再起動するか、source ~/.zshrc(または.bashrc)を実行します。 これで、httpの代わりにhxと入力するだけで、--pretty=all --followオプションが自動的に適用されます。

# エイリアスを使ってリクエストを送信
hx https://httpie.io/hello

2. デフォルトヘッダーの設定

特定のAPIに対して常に同じヘッダー(例えばAuthorizationトークンやUser-Agent)を送りたい場合があります。httpieは、設定ファイルを通じてデフォルトヘッダーを設定できます。 設定ファイルは、~/.config/httpie/config.json(Linux/macOS)または%APPDATA%\httpie\config.json(Windows)に配置します。

例えば、~/.config/httpie/config.jsonに以下のように記述します。

{
    "default_options": [
        "--ignore-stdin",
        "--pretty=all"
    ],
    "default_headers": {
        "User-Agent": "MyCustomHTTPieClient/1.0",
        "X-App-ID": "my-awesome-app"
    }
}

この設定により、すべてのhttpieリクエストにUser-AgentX-App-IDヘッダーが自動的に追加されます。default_optionsでは、デフォルトで適用したいコマンドラインオプションを指定できます。

3. プロキシ設定

企業ネットワークなど、プロキシ経由でインターネットにアクセスする必要がある場合、httpieはプロキシをサポートしています。 これは環境変数を通じて設定するのが一般的です。

# HTTPプロキシの設定
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"

# プロキシを介してリクエストを送信
http GET http://example.com

これらの環境変数を設定すると、httpieは自動的に指定されたプロキシサーバーを経由してリクエストを送信します。 プロキシ認証が必要な場合は、http://user:pass@proxy.example.com:8080のようにURLに認証情報を含めることも可能です。

4. SSL証明書の検証設定

開発環境や自己署名証明書を使用している場合、SSL証明書の検証を無効にしたいことがあります。 これはセキュリティ上のリスクを伴うため、本番環境では推奨されません。 --verify=noオプションを使用するか、設定ファイルでデフォルトに設定できます。

# 特定のリクエストで検証を無効にする
http --verify=no GET https://self-signed.example.com

設定ファイルに記述する場合は、default_optionsに追加します。

{
    "default_options": [
        "--verify=no"
    ]
}

これらの設定を適切に行うことで、httpieをより効率的かつ安全に、あなたの開発ワークフローに統合できます。

今日からできる実行プラン

httpieの導入は非常に簡単です。 以下の3ステップで、すぐにその便利さを体験してみましょう。

ステップ1: httpieをインストールする

まずは、お使いの環境にhttpieをインストールしてください。 最も推奨される方法はpipxを使うことです。 もしpipxがインストールされていなければ、先にpipxをインストールしましょう。

# pipxをインストール (既にインストール済みの場合はスキップ)
python3 -m pip install --user pipx
python3 -m pipx ensurepath

# httpieをインストール
pipx install httpie

インストール後、http --versionを実行して、正しくインストールされたか確認してください。

ステップ2: 基本的なGETリクエストを試す

インストールが完了したら、httpieの「Hello World」とも言える簡単なGETリクエストを試してみましょう。httpie.ioが提供するテストエンドポイントを利用します。

http https://httpie.io/hello

このコマンドを実行すると、整形され色付けされたJSONレスポンスが表示されます。curlとは異なる、その視認性の高さに驚くはずです。 次に、httpbin.orgを使って、より詳細なリクエストを試してみましょう。

# 送信元のIPアドレスを確認する
http https://httpbin.org/ip

# リクエストヘッダーがどのように見えるか確認する
http https://httpbin.org/headers User-Agent:'My First HTTPie Request'

ステップ3: 自分の開発中のAPIをhttpieで叩く

基本的な操作に慣れたら、いよいよ自分の開発しているAPIエンドポイントをhttpieで叩いてみましょう。 例えば、ログインAPIやデータ取得APIなど、普段curlやGUIツールでテストしているものをhttpieに置き換えてみてください。

例:ログインAPIへのPOSTリクエスト (例えば、あなたのAPIがhttp://localhost:8000/api/loginで動作し、JSONでusernamepasswordを受け取るとします。)

http POST http://localhost:8000/api/login username=your_user_name password=your_password

例:データ取得APIへのGETリクエスト(認証トークン付き) (ログインレスポンスからtokenを取得し、Authorizationヘッダーにセットするとします。)

http GET http://localhost:8000/api/items Authorization:"Bearer YOUR_AUTH_TOKEN"

これらの操作を通じて、httpieがAPI開発やデバッグ作業をいかに効率化し、快適にするかを実感できるはずです。 ぜひ、今日からあなたのツールボックスにhttpieを加えて、よりスムーズな開発体験を手に入れてください。


参考文献

広告

-AI