はじめに

こんにちは!今回はcurlコマンドについて解説します。

curlは、HTTPリクエストを送信してWebからデータを取得・送信するコマンドです。wgetと似ていますが、POSTリクエストやAPI呼び出しに強いのが特徴。APIテストやスクリプト自動化、データ取得の現場で毎日使われるコマンドですね。

「Webとの通信機」って感じです。

curlコマンドとは

curlは、URLを指定してHTTP/HTTPS通信を行うコマンドラインツールです。“client URL"の略ですね。

wgetはダウンロード専門ですが、curlはより柔軟。GET/POST/PUT/DELETEなど複数のHTTPメソッドに対応し、ヘッダー設定、認証、JSONデータ送信など、Web API操作に必要な機能が充実しています。開発者やサーバー管理者の必須ツールです。

基本構文

1
curl [オプション] URL

URLを指定するだけでGETリクエストを送信。レスポンスがSTDOUTに出力されます。

主なオプション

オプション 説明
-o レスポンスをファイルに保存
-O 元のファイル名で保存
-d POSTデータを送信
-X HTTPメソッド指定(GET/POST/PUT/DELETE等)
-H ヘッダーを追加
-i ヘッダーを含めて表示
-I ヘッダーのみ表示
-L リダイレクトに従う
-u 認証情報(ユーザー:パスワード)
-b Cookie を送信
-A User-Agent を指定

使用例

例1: 基本的なGETリクエスト

1
curl https://example.com/

実行結果:

1
2
3
4
5
<!DOCTYPE html>
<html>
  <head><title>Example</title></head>
  <body>Hello, World!</body>
</html>

URLにGETリクエストを送信。HTMLが出力されます。

例2: レスポンスをファイルに保存

1
curl -o index.html https://example.com/

実行結果:

1
2
3
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1234    0  1234    0     0   5000      0 --:--:-- --:--:-- --:--:--     0

-oでレスポンスをファイルに保存。ダウンロードプログレスが表示。

例3: 元のファイル名で保存

1
curl -O https://example.com/image.png

実行結果:

1
2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
100  5678    0  5678    0     0  10000      0 --:--:-- --:--:-- --:--:--     0

-Oで元のファイル名image.pngで保存。

例4: POSTリクエストでデータ送信

1
curl -X POST -d "name=John&age=30" https://example.com/api/users

実行結果:

1
2
3
4
{
  "status": "success",
  "id": 123
}

-dでPOSTデータを送信。JSONレスポンスが返される。

例5: JSONデータを送信

1
2
3
curl -X POST -H "Content-Type: application/json" \
  -d '{"name":"John","age":30}' \
  https://example.com/api/users

実行結果:

1
2
3
4
{
  "status": "success",
  "id": 123
}

ヘッダーでJSON指定。JSONデータを送信。

例6: ヘッダーを確認

1
curl -i https://example.com/

実行結果:

1
2
3
4
5
6
HTTP/1.1 200 OK
Date: Fri, 03 Jan 2026 12:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 1234

<!DOCTYPE html>

-iでレスポンスヘッダーを含めて表示。

例7: ヘッダーのみ表示

1
curl -I https://example.com/

実行結果:

1
2
3
4
HTTP/1.1 200 OK
Date: Fri, 03 Jan 2026 12:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 1234

-Iでヘッダーのみ表示。ステータスコードやContent-Typeを確認。

例8: リダイレクトに従う

1
curl -L https://short.example.com/path

実行結果:

1
2
<!DOCTYPE html>
(最終的なページが表示)

-Lで301/302リダイレクトに自動で従う。

例9: Basic認証でアクセス

1
curl -u username:password https://api.example.com/private

実行結果:

1
2
3
{
  "data": "私的な情報"
}

-uでユーザー名とパスワードを指定。Basic認証対応。

例10: カスタムヘッダーを追加

1
2
3
curl -H "Authorization: Bearer token123" \
  -H "X-Custom-Header: value" \
  https://api.example.com/data

実行結果:

1
2
3
{
  "status": "ok"
}

-Hで複数のカスタムヘッダーを追加。API認証に使用。

Tips・注意点

POSTとGET の違い

1
2
3
4
5
# GET(デフォルト)
curl https://example.com/api

# POST
curl -X POST -d "data=value" https://example.com/api

HTTPメソッドを明確に指定することが大切。

JSONレスポンスの見やすい表示

1
curl https://api.example.com/data | jq

jqコマンドと組み合わせて、JSONレスポンスをフォーマット表示。

サイレント実行

1
curl -s https://example.com/ > /dev/null

-sでプログレスバーを非表示。スクリプトでの使用に適切。

実践的な使い方

REST API へのリクエスト

1
2
3
4
5
6
#!/bin/bash
API="https://api.example.com/users"
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"name":"Alice","email":"[email protected]"}' \
  "$API"

REST APIにユーザー登録データを送信。

ファイルアップロード

1
curl -F "file=@/path/to/image.png" https://example.com/upload

-Fでフォーム形式でファイルをアップロード。

ページの存在確認

1
2
3
4
5
6
STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://example.com/)
if [ "$STATUS" = "200" ]; then
  echo "サイト正常"
else
  echo "エラー: $STATUS"
fi

ステータスコードのみを取得。ヘルスチェックに活用。

まとめ

curlコマンドのポイント:

  • HTTPリクエストを送信してWebからデータを取得・送信
  • -o: レスポンスをファイルに保存
  • -d: POSTデータを送信
  • -X: HTTPメソッドを指定
  • -H: ヘッダーを追加(API認証に必須)
  • -i: ヘッダーを含めて表示
  • -L: リダイレクトに従う
  • -u: Basic認証
  • よく使う組み合わせ: curl -X POST -H -d, curl -i, curl -L

Web API操作の必須ツール。wgetとの使い分けができると、スクリプト自動化の幅が大きく広がりますよ!