curl かーる
簡単に言うとこんな感じ!
コマンド1行でウェブサーバーや APIに「話しかけ」できるツールだよ!ブラウザを開かなくても「このURLに繋いで、その返事を見せて」ってサクッとできる、IT担当者の万能メモ帳みたいな存在なんだ!
curlとは
curl(カール)は、コマンドラインから URL を指定してデータの送受信を行うツール・ライブラリです。正式名称は “Client URL” で、ブラウザを使わずにサーバーへリクエストを送り、レスポンスを受け取ることができます。HTTP/HTTPS はもちろん、FTP・SMTP・SFTPなど多様なプロトコルに対応しているのが大きな特徴です。
実務でよく使われる場面は API の動作確認 です。「このAPIエンドポイントにデータを送ったとき、正しく返ってくるか?」を素早く試すとき、開発者は真っ先に curl を使います。ベンダーのAPI仕様書でも「まずこの curl コマンドを実行してみてください」というサンプルが頻繁に登場します。
curl はツールとしてのコマンド(curlコマンド)と、プログラムに組み込むためのライブラリ(libcurl)の2つの顔を持ちます。LinuxやmacOSには標準でインストールされており、Windows 10/11 にも標準搭載されているため、追加インストールなしにすぐ使える点が普及を後押ししています。
curlの基本的な使い方と仕組み
curl コマンドは「どのURLに」「どんな方法で」「何を送るか」をオプションで組み合わせて使います。
| オプション | 意味 | 使用例 |
|---|---|---|
| (なし) | GETリクエスト(データを取得) | curl https://example.com |
-X POST | POSTリクエスト(データを送信) | curl -X POST https://api.example.com/users |
-H | ヘッダーを追加 | -H "Authorization: Bearer TOKEN" |
-d | 送信するデータ(ボディ)を指定 | -d '{"name":"田中"}' |
-o | レスポンスをファイルに保存 | -o result.json |
-v | 通信の詳細を表示(デバッグ用) | curl -v https://example.com |
-k | SSL証明書のエラーを無視 | curl -k https://... |
-I | レスポンスヘッダーのみ取得 | curl -I https://example.com |
典型的なAPI呼び出しの例
# 天気APIからデータを取得する(GET)
curl -H "X-Api-Key: 自分のAPIキー" \
"https://api.weather.example.com/v1/current?city=Tokyo"
# 新しいユーザーを登録する(POST)
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name":"山田太郎","email":"yamada@example.com"}'
-v オプションで何が見えるか(デバッグの要)
-v(verbose)を付けると、通信の全工程が表示されます。
* Trying 93.184.216.34:443... ← サーバーへの接続試行
* Connected to example.com ← 接続成功
* SSL handshake完了 ← 暗号化の握手
> GET / HTTP/1.1 ← 送ったリクエスト(>が送信)
> Host: example.com
> User-Agent: curl/8.1.2
>
< HTTP/1.1 200 OK ← 受け取ったレスポンス(<が受信)
< Content-Type: text/html
<
(レスポンスボディ)
>が送信、<が受信と覚えると読みやすくなります。
歴史と背景
- 1996年 — 前身となる
httpgetがスウェーデンの開発者 Daniel Stenberg によって作られる - 1997年 — ツール名が
curlに変更される。“Client URL” の略 - 1998年 — libcurl が分離され、ライブラリとしても使えるようになる
- 2000年代 — Linux ディストリビューションへの標準搭載が進み、インフラエンジニアの必携ツールに
- 2013年 — Windows PowerShell に
Invoke-WebRequestが登場するが、本家 curl との違いから混乱が生まれる(後述) - 2018年 — Windows 10 ビルド1803に本家
curl.exeが標準搭載され、OS間の差がなくなる - 現在 — HTTPクライアントの事実上の標準として、スクリプト・CI/CD・API テストなど幅広い場面で使われ続けている。対応プロトコルは25種類以上
curl・wget・Postman の使い分け
ネットワーク越しにデータ取得・送信ができるツールは複数あります。立場によって使い分けが変わります。
| ツール | 主な用途 | GUIの有無 | プロトコル対応 | 向いている人 |
|---|---|---|---|---|
| curl | API検証・スクリプト組込み | なし(CLI) | 25種類以上 | エンジニア・インフラ担当 |
| wget | ファイルのダウンロード・再帰取得 | なし(CLI) | HTTP/FTP中心 | Linux管理者 |
| Postman | APIの設計・テスト・チーム共有 | あり(GUI) | HTTP中心 | 開発チーム全体 |
| ブラウザ | 通常のWeb閲覧 | あり | HTTP/HTTPS | 全員 |
Windows の curl と PowerShell の curl は別物!
Windows PowerShell で curl と打つと、実は Invoke-WebRequest のエイリアスが呼ばれることがあります。動作が微妙に異なるため、PowerShell 上で本家 curl を使いたい場合は curl.exe と .exe まで明示するのが確実です。
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 9110 | HTTP Semantics(HTTPの意味仕様) |
| RFC 9111 | HTTP Caching |
| RFC 9112 | HTTP/1.1 |
| RFC 9113 | HTTP/2 |
| RFC 9114 | HTTP/3 |
| RFC 3986 | URI(Uniform Resource Identifier)の構文 |
| RFC 8446 | TLS 1.3(HTTPS通信の暗号化に使用) |