curlコマンドを使いこなすチートシート|基本から実践APIまで完全網羅

2026.03.20 09:00
2026.03.16 13:32
curlコマンドを使いこなすチートシート|基本から実践APIまで完全網羅

APIの動作確認やデータ取得を手軽にやりたいとき、まず頼りになるのがcurlコマンドですよね。GUIツールを起動しなくても、ターミナルからサッとリクエストを投げられるのが最大の魅力です。

今回は、curlの基本操作からヘッダー指定、JSON送信、認証パターン、そしてWordPress REST APIやGitHub API、Chatwork APIといった実践的なAPI呼び出しまで、チートシート形式でまとめてみました。手元に置いておけばいつでも使える一覧になっている、、はず!

curlの基本(HTTPメソッド)

curlはデフォルトでGETリクエストを送ります。他のHTTPメソッドを使うには -X オプションで指定します。

GETリクエスト

一番シンプルな形。URLを指定するだけでOKです。

# 基本のGET
curl https://api.example.com/users

# クエリパラメータ付き
curl "https://api.example.com/users?page=1&per_page=10"

POSTリクエスト

データを送信してリソースを作成する場合に使います。

# フォームデータの送信
curl -X POST -d "name=taro&email=taro@example.com" https://api.example.com/users

# JSONデータの送信
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"name":"taro","email":"taro@example.com"}' \
  https://api.example.com/users

PUT / PATCHリクエスト

既存リソースの更新に使います。PUTは全体置換、PATCHは部分更新という使い分けが一般的です。

# PUT(全体更新)
curl -X PUT \
  -H "Content-Type: application/json" \
  -d '{"name":"jiro","email":"jiro@example.com"}' \
  https://api.example.com/users/1

# PATCH(部分更新)
curl -X PATCH \
  -H "Content-Type: application/json" \
  -d '{"name":"saburo"}' \
  https://api.example.com/users/1

DELETEリクエスト

curl -X DELETE https://api.example.com/users/1

ヘッダー指定(-H)

APIを叩くとき、ヘッダーの設定は避けて通れないですよね。-H オプションで自由にカスタムヘッダーを追加できます。

# Content-Typeの指定
curl -H "Content-Type: application/json" https://api.example.com/data

# Acceptヘッダー
curl -H "Accept: application/json" https://api.example.com/data

# Authorizationヘッダー(Bearer トークン)
curl -H "Authorization: Bearer YOUR_TOKEN_HERE" https://api.example.com/me

# 複数ヘッダーを指定
curl -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_TOKEN" \
     -H "X-Custom-Header: custom-value" \
     https://api.example.com/data

JSONデータの送信(-d / –data-raw)

JSON形式でデータを送る場面は非常に多いです。-d--data-raw の違いも押さえておくと便利ですね。

# -d でJSON送信(Content-Typeは明示的に指定が必要)
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"テスト記事","status":"draft"}' \
  https://example.com/wp-json/wp/v2/posts

# --data-raw は特殊文字(@など)をそのまま扱う
curl -X POST \
  -H "Content-Type: application/json" \
  --data-raw '{"email":"user@example.com"}' \
  https://api.example.com/users

# ファイルからJSONを読み込んで送信
curl -X POST \
  -H "Content-Type: application/json" \
  -d @data.json \
  https://api.example.com/users

# ヒアドキュメントで複雑なJSONを送信
curl -X POST \
  -H "Content-Type: application/json" \
  -d @- https://api.example.com/users <<'EOF'
{
  "name": "taro",
  "email": "taro@example.com",
  "profile": {
    "age": 30,
    "city": "Tokyo"
  }
}
EOF

ポイント: -d を使うと @ から始まる値がファイル名として解釈されます。メールアドレスなど @ を含むデータをそのまま送りたいなら --data-raw を使うのが安全です。

ファイルアップロード(-F)

画像やドキュメントのアップロードには -F(multipart/form-data)を使います。

# 画像ファイルのアップロード
curl -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "file=@/path/to/image.jpg" \
  https://api.example.com/upload

# ファイルとテキストデータを同時に送信
curl -X POST \
  -F "file=@photo.jpg" \
  -F "description=プロフィール画像" \
  -F "category=avatar" \
  https://api.example.com/upload

# Content-Typeを明示的に指定
curl -X POST \
  -F "file=@document.pdf;type=application/pdf" \
  https://api.example.com/upload

-F を使うと、curlが自動的に Content-Type: multipart/form-data を設定してくれます。 -H で別途指定する必要はないですね。

レスポンスの確認(-v / -i / -o)

APIのデバッグでは、レスポンスヘッダーやステータスコードを確認したい場面が多いです。用途に応じたオプションを使い分けていきます。

# -i: レスポンスヘッダーを表示
curl -i https://api.example.com/users

# -v: リクエスト・レスポンスの詳細を表示(デバッグに最適)
curl -v https://api.example.com/users

# -o: レスポンスボディをファイルに保存
curl -o response.json https://api.example.com/users

# -O: URLのファイル名で保存
curl -O https://example.com/files/document.pdf

# -s: プログレスバーを非表示(スクリプト向け)
curl -s https://api.example.com/users

# -w: レスポンスの情報をフォーマット指定で表示
curl -s -o /dev/null -w "HTTP Status: %{http_code}\nTime: %{time_total}s\n" \
  https://api.example.com/users

特に -w オプションはAPIのパフォーマンス計測にも使えます。ステータスコードだけ取得したい場合は -o /dev/null と組み合わせると便利です。

認証パターン

APIごとに認証方式は異なります。よく使う3パターンを押さえておきます。

Bearer トークン認証

OAuthやJWTなど、多くのモダンなAPIで採用されている方式です。

curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  https://api.example.com/me

Basic認証

ユーザー名とパスワードをBase64エンコードして送る方式です。WordPressのアプリケーションパスワードなどで使います。

# -u オプションで指定(curlが自動的にBase64エンコード)
curl -u "username:password" https://api.example.com/data

# ヘッダーで直接指定する場合
curl -H "Authorization: Basic $(echo -n 'username:password' | base64)" \
  https://api.example.com/data

Cookie認証

ブラウザセッションと同じ認証方式を使いたい場合です。

# Cookieを送信
curl -b "session_id=abc123; token=xyz789" https://example.com/dashboard

# Cookieをファイルに保存して再利用
curl -c cookies.txt -d "user=admin&pass=secret" https://example.com/login
curl -b cookies.txt https://example.com/dashboard

リダイレクト追従(-L)

curlはデフォルトでリダイレクト(301, 302)を追従しません。-L をつけると自動で追従してくれます。

# リダイレクトを追従
curl -L https://example.com/old-page

# リダイレクトの回数を制限(デフォルトは50回)
curl -L --max-redirs 5 https://example.com/old-page

# リダイレクト先を確認(-vと組み合わせ)
curl -L -v https://example.com/old-page 2>&1 | grep "Location:"

短縮URLの展開先を調べたいときなどにも -L -v の組み合わせは重宝しますね。

タイムアウト設定

外部APIを叩くスクリプトでは、タイムアウトの設定が大事です。応答のないサーバーに延々と待たされるのを防げます。

# 接続タイムアウト(サーバーへの接続確立までの制限時間)
curl --connect-timeout 5 https://api.example.com/data

# 全体タイムアウト(リクエスト全体の制限時間)
curl --max-time 30 https://api.example.com/large-data

# 両方を組み合わせ(実用的な設定)
curl --connect-timeout 5 --max-time 30 https://api.example.com/data

# リトライ設定(失敗時に再試行)
curl --retry 3 --retry-delay 2 https://api.example.com/data

--connect-timeout は接続確立までの時間、--max-time はレスポンス受信完了までの全体時間を制限します。スクリプトで使う場合はどちらも設定しておくのがおすすめです。

jqとの組み合わせ

APIのレスポンスはJSON形式が多いです。jq コマンドと組み合わせると、必要なデータだけを抽出したり、整形して表示したりできます。

# JSONを整形して表示
curl -s https://api.example.com/users | jq .

# 特定のフィールドだけ抽出
curl -s https://api.example.com/users | jq '.[].name'

# 条件でフィルタリング
curl -s https://api.example.com/users | jq '[.[] | select(.active == true)]'

# 複数フィールドを組み合わせて新しいオブジェクトを生成
curl -s https://api.example.com/users | jq '[.[] | {id, name, email}]'

# レスポンスの件数をカウント
curl -s https://api.example.com/users | jq 'length'

# ネストされたデータにアクセス
curl -s https://api.example.com/users/1 | jq '.profile.address.city'

jqが入っていない場合は brew install jq でインストールできます。JSONを扱うなら必須のツールですね。

実践例:各APIへのアクセス

ここからは実際のAPIを使った具体的な例です。コピペしてすぐに使えるようにまとめました。

WordPress REST API

WordPressのREST APIはBasic認証(アプリケーションパスワード)で利用できます。

# 記事一覧を取得
curl -s "https://example.com/wp-json/wp/v2/posts?per_page=5" | jq '[.[] | {id, title: .title.rendered, status}]'

# 新規記事を作成(下書き)
curl -X POST \
  -u "admin:XXXX XXXX XXXX XXXX XXXX XXXX" \
  -H "Content-Type: application/json" \
  -d '{"title":"curlから投稿テスト","content":"これはcurlから投稿した記事です。","status":"draft"}' \
  https://example.com/wp-json/wp/v2/posts

# 記事を更新
curl -X POST \
  -u "admin:XXXX XXXX XXXX XXXX XXXX XXXX" \
  -H "Content-Type: application/json" \
  -d '{"title":"更新したタイトル"}' \
  https://example.com/wp-json/wp/v2/posts/123

# メディア(画像)をアップロード
curl -X POST \
  -u "admin:XXXX XXXX XXXX XXXX XXXX XXXX" \
  -F "file=@eyecatch.jpg" \
  https://example.com/wp-json/wp/v2/media

GitHub API

GitHub APIはPersonal Access Token(PAT)を使ったBearer認証が基本です。

# 自分のリポジトリ一覧
curl -s -H "Authorization: Bearer ghp_xxxxxxxxxxxx" \
  https://api.github.com/user/repos | jq '[.[] | {name, private, language}]'

# リポジトリの情報を取得
curl -s https://api.github.com/repos/owner/repo | jq '{name, description, stargazers_count, forks_count}'

# Issueを作成
curl -X POST \
  -H "Authorization: Bearer ghp_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"title":"バグ報告","body":"ログイン画面でエラーが発生します","labels":["bug"]}' \
  https://api.github.com/repos/owner/repo/issues

# プルリクエスト一覧
curl -s -H "Authorization: Bearer ghp_xxxxxxxxxxxx" \
  https://api.github.com/repos/owner/repo/pulls | jq '[.[] | {number, title, user: .user.login, state}]'

Chatwork API

Chatwork APIは X-ChatWorkToken ヘッダーでAPIトークンを渡す独自の認証方式です。

# 自分の情報を取得
curl -s -H "X-ChatWorkToken: YOUR_API_TOKEN" \
  https://api.chatwork.com/v2/me | jq .

# ルーム一覧を取得
curl -s -H "X-ChatWorkToken: YOUR_API_TOKEN" \
  https://api.chatwork.com/v2/rooms | jq '[.[] | {room_id, name, type}]'

# メッセージを送信
curl -X POST \
  -H "X-ChatWorkToken: YOUR_API_TOKEN" \
  -d "body=curlからのテスト送信です" \
  https://api.chatwork.com/v2/rooms/ROOM_ID/messages

# タスクを作成
curl -X POST \
  -H "X-ChatWorkToken: YOUR_API_TOKEN" \
  -d "body=レビューお願いします&to_ids=12345&limit=1735689600" \
  https://api.chatwork.com/v2/rooms/ROOM_ID/tasks

よく使うオプション一覧

最後に、よく使うcurlオプションを一覧でまとめておきます。

-X METHOD    HTTPメソッドを指定(GET/POST/PUT/PATCH/DELETE)
-H "Header"  リクエストヘッダーを追加
-d "data"    リクエストボディを送信(POSTデータ)
--data-raw   @を特殊文字として扱わずにデータを送信
-F "key=val" multipart/form-dataで送信(ファイルアップロード)
-u user:pass Basic認証
-b "cookie"  Cookieを送信
-c file      Cookieをファイルに保存
-o file      レスポンスをファイルに保存
-O           URLのファイル名で保存
-i           レスポンスヘッダーを表示
-v           詳細な通信情報を表示
-s           プログレスバーを非表示
-S           -sと併用してエラーだけ表示
-L           リダイレクトを追従
-k           SSL証明書の検証をスキップ
-w "format"  レスポンス情報のフォーマット出力
--connect-timeout N  接続タイムアウト(秒)
--max-time N        全体タイムアウト(秒)
--retry N           リトライ回数
--retry-delay N     リトライ間隔(秒)

まとめ

curlはシンプルなコマンドですけど、オプションの組み合わせ次第でかなり柔軟に使えます。特にAPIの動作確認やデバッグでは、GUIツールよりも素早く操作できるのが強みですね。

このチートシートを手元に置いておけば、「あのオプション何だっけ?」というときにすぐ参照できる、、はず!

今回は以上です!