最終更新日 2025年2月17日

Linuxのcurlコマンドとは?
Linuxのcurl
コマンドは、データを送受信するための強力なCLI(コマンドラインインターフェース)ツールです。HTTP/HTTPSをはじめ、FTP、SFTPなどの多様なプロトコルに対応し、ファイルのダウンロードやAPIリクエストの送信に活用されます。Linux環境に標準搭載されていることが多く、スクリプトや自動化処理でも頻繁に使用される必須ツールです。
curlとは?基本概要と特徴
Linuxのcurl
コマンドは、「Client URL」の略称で、URLを指定してデータを送受信できるコマンドです。HTTP/HTTPS、FTP、SFTP、SMTPなど、さまざまなプロトコルに対応しているため、単なるファイルダウンロードツールではなく、API通信やデータ取得など多用途に活用できます。
curlの主な特徴
- さまざまなプロトコルに対応(HTTP, HTTPS, FTP, SFTP, SCP, LDAP など)
- シンプルな構文でリクエスト送信が可能
- GET・POSTなどのHTTPリクエストを手軽に送れる
- スクリプトに組み込みやすく、自動化が可能
- Linuxに標準搭載されていることが多く、追加インストールなしで利用できる

curlって何ができるコマンドなんですか?

簡単に言うと、インターネット上のデータをコマンド一つで取得できるツールだよ。例えばWebページのソースを取得したり、ファイルをダウンロードしたり、APIを使ったデータ通信もできるんだ。

wgetと何が違うんですか?

それは後で詳しく説明するけど、一番の違いは、curlは単純なダウンロードツールじゃなくて、データの送受信ができること。APIとやり取りするのにもよく使われるよ。

Linuxでcurlを使用するメリット
Linuxでcurl
を使う最大のメリットは、HTTPリクエストをコマンドラインから簡単に送受信できることです。特に、APIを利用する場面や、サーバー管理、ファイルの取得・送信など、さまざまな用途で役立ちます。
curlを使うメリット
- Linux標準搭載のことが多く、すぐに使える
- Web APIのテストやデバッグが簡単
- スクリプトに組み込んで自動化が可能
- ユーザー認証・プロキシ対応など柔軟なオプションが豊富
- ヘッダー情報の取得やリクエストの詳細な制御ができる

curlって具体的にどんな場面で使われますか?

例えば、APIを使ってデータを取得するときや、サーバーのレスポンスを確認したいときに使うね。Webサービスの開発では欠かせないツールだよ。

wgetじゃダメなんですか?

wgetは基本的にファイルをダウンロードする用途に特化してる。一方、curlはリクエストを送信できるし、API通信に向いてる。用途に応じて使い分けるのがベストだね。

curlとwgetの違いとは?
curl
とwget
はどちらもネットワークからデータを取得するためのコマンドですが、それぞれの目的や特性が異なります。
比較項目 | curl | wget |
---|---|---|
目的 | データの送受信、API通信 | ファイルのダウンロード |
対応プロトコル | HTTP, HTTPS, FTP, SFTP, SCP, LDAP など | HTTP, HTTPS, FTP など |
複数ファイルの一括ダウンロード | ×(スクリプトで対応可) | ○(リカーシブダウンロード対応) |
POSTリクエストの送信 | ○(API通信に最適) | × |
スクリプトとの親和性 | ○(出力を他のコマンドに渡しやすい) | △ |

wgetは一括ダウンロードが得意って聞いたんですが?

そうだね。wgetはリカーシブダウンロード(フォルダごとダウンロードする機能)があって、サイトのミラーリングなんかに向いてる。でも、API通信やデータ送信が必要ならcurlのほうが適してるよ。

なるほど、使い分けが大事なんですね。

そういうこと。基本はcurlを使って、特定の用途でwgetを使い分けるのがベストだね。

まとめ
- curlはデータの送受信ができる強力なコマンドラインツール
- Linuxに標準搭載されていることが多く、すぐに使える
- wgetと異なり、API通信やPOSTリクエストの送信が可能
- curlはスクリプトに組み込みやすく、開発や運用の自動化に適している
今後、curlの基本的な使い方や便利なオプションについて詳しく解説していきます!
Linuxでのcurlコマンドの基本的な使い方
curl
コマンドは、Linuxのターミナルから簡単にインストールでき、シンプルな構文で使える便利なツールです。本章では、インストール方法から基本的な構文、実用的な使い方まで解説します。
curlのインストール方法(各Linuxディストリビューション別)
ほとんどのLinuxディストリビューションでは、curl
は標準でインストールされていますが、万が一インストールされていない場合は、以下のコマンドで簡単に導入できます。
各ディストリビューションごとのインストールコマンド
ディストリビューションごとのcurlコマンドのインストール方法は以下です。
ディストリビューション | インストールコマンド |
---|---|
Ubuntu / Debian | sudo apt update && sudo apt install -y curl |
CentOS / RHEL | sudo yum install -y curl |
Fedora | sudo dnf install -y curl |
Arch Linux | sudo pacman -S curl |

curlを使おうとしたら ‘command not found’ って出ました!

それは未インストールかもね。自分のLinuxの種類を確認して、上のコマンドでインストールしてみて。

どのLinuxかわからないんですが…

cat /etc/os-release を実行するとディストリビューションがわかるよ。

基本的な構文とオプションの解説
curl
の基本的な構文はシンプルで、以下のように使用します。
curl [オプション] [URL]
よく使うオプション
オプション | 説明 |
---|---|
-o [ファイル名] | 指定したファイル名で保存 |
-O | URLのファイル名で保存 |
-L | リダイレクトを追跡 |
-I | ヘッダー情報のみ取得 |
-X [HTTPメソッド] | GET, POST, PUT, DELETE などのリクエスト指定 |

基本の構文を教えてください!

めちゃくちゃシンプルだよ。curl URL で実行すれば、そのページのデータが取得できる。

リダイレクトされるURLにアクセスできません…

-L オプションをつけるとリダイレクトを追跡してくれるよ。
![curlの基本的な構文とオプション
基本構文
curl [オプション] [URL]
-o [ファイル名]
指定したファイル名で保存します。
-L
リダイレクトを追跡します。
-X [HTTPメソッド]
GET、POST、PUTなどのリクエストを指定します。](https://www.goritarou.com/wp-content/uploads/2025/02/image-174-1024x470.png)
Webページを取得する(GETリクエスト)
curl
を使えば、WebページのHTMLソースを取得できます。例えば、Googleのトップページを取得するには以下のようにします。
curl https://www.google.com
ただし、上記のコマンドはWebページの内容をターミナルに直接表示します。内容を確認しやすくするために、ファイルに保存するには -o
オプションを使います。
curl -o google.html https://www.google.com

Webページを取得したいんですが、ブラウザなしでできますか?

curl URL を実行すればHTMLを取得できるよ。表示が崩れる場合は、ファイルに保存するといいね。

画像やCSSは取得できますか?

HTMLのリンク先をたどる機能はないから、画像やCSSは個別にダウンロードする必要があるね。

ファイルをダウンロードする方法
ファイルをダウンロードする場合は、以下のように実行します。
curl -O https://example.com/sample.txt
上記の -O
オプションは、URLのファイル名で保存します。特定の名前で保存したい場合は -o
を使います。
curl -o myfile.txt https://example.com/sample.txt
大容量ファイルのダウンロード
大きなファイルをダウンロードする場合、進捗状況を表示するには --progress-bar
を使用します。
curl -O --progress-bar https://example.com/largefile.zip

ダウンロードしたファイル名を変えたいんですが?

-o オプションを使えば好きな名前で保存できるよ。

ダウンロードの進行状況が見えないんですが…

–progress-bar をつけると進捗が表示されるよ。

まとめ
curl
は主要なLinuxディストリビューションで簡単にインストール可能- シンプルな構文でWebページの取得やファイルのダウンロードが可能
-o
や-O
オプションを活用すると、保存ファイル名を制御できる-L
オプションでリダイレクトを追跡、--progress-bar
でダウンロードの進捗を表示可能
次章では、curl
を使ったより高度な活用方法を紹介します!
curlコマンドの便利な活用方法
curl
は単にファイルをダウンロードするだけでなく、データの送信やAPIとの連携、認証付きサイトへのアクセスなど、多くの用途で活用できます。ここでは、実践的な利用方法を解説します。
ファイルをアップロードする(POSTリクエスト)
curl
を使えば、サーバーに対してファイルをアップロードできます。ファイルをアップロードする際は、-F
オプションを使用し、POST
リクエストとして送信します。
ファイルアップロードの基本構文
curl -F "file=@sample.txt" https://example.com/upload

ファイルをサーバーにアップロードしたいんですが、curlでできますか?

できるよ! -F “file=@ファイル名” を使って POST リクエストを送ればOK。

複数のファイルをアップロードできますか?

複数の -F を指定すれば送れるよ。ただし、サーバー側の仕様も確認してね。

JSON形式でデータを送信する場合
curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://example.com/api
このように、-H
で Content-Type
を指定し、-d
でJSONデータを送ることも可能です。
APIとの連携(JSONデータの送受信)
curl
はWeb APIと連携する際に非常に便利です。例えば、GET
リクエストでAPIからデータを取得するには、以下のように実行します。
APIからデータを取得(GETリクエスト)
curl -X GET https://api.example.com/data

APIのデータを取得したいんですが、どうすればいいですか?

curl -X GET URL でリクエストを送ればいいよ。

レスポンスを見やすくする方法はありますか?

jq コマンドを使うとJSONを整形できるよ。
curl -X GET https://api.example.com/data | jq
APIにデータを送信(POSTリクエスト)
データを送る場合は、-d
オプションを使います。
curl -X POST -H "Content-Type: application/json" -d '{"name": "John"}' https://api.example.com/users

APIにデータを送る方法を教えてください!

-X POST を使って、-H で Content-Type を指定し、-d でJSONデータを送信するよ。

ヘッダー情報を取得する(-I オプション)
Webサーバーのレスポンスヘッダーを取得したい場合は、-I
オプションを使用します。これは、HTTPリクエストを送信し、HTMLの内容を取得せずにヘッダー情報のみ表示するのに便利です。
ヘッダー情報を取得する
curl -I https://example.com

サーバーの情報を確認したいんですが、どうすればいいですか?

-I オプションをつけると、レスポンスヘッダーだけ取得できるよ。

どんな情報が見れますか?

サーバーの種類(Apache, Nginxなど)、HTTPステータスコード、リダイレクト先のURLなんかが確認できるよ。
具体的な出力例
HTTP/1.1 200 OK
Date: Mon, 01 Jan 2024 12:00:00 GMT
Server: Apache
Content-Type: text/html; charset=UTF-8

認証が必要なサイトにアクセスする方法
認証が必要なWebサイトやAPIにアクセスする場合、curl
には-u
オプションを使用してBasic認証を行う方法があります。
Basic認証の例
curl -u username:password https://example.com/protected

パスワードが必要なAPIにアクセスしたいんですが?

-u ユーザー名:パスワード を使えばBasic認証ができるよ。

パスワードをコマンドに直接書くのは危険では?

確かに、履歴に残るから ~/.netrc に保存する方法もあるよ。
認証情報を .netrc
に保存して使用する
1.~/.netrc
に以下のように記述
machine example.com
login username
password mypassword
2.curl
でアクセス
curl -n https://example.com/protected

まとめ
curl -F
でファイルをアップロードし、-X POST
でAPIにデータ送信が可能- APIとの連携では、
-H "Content-Type: application/json"
を使いJSONデータを送受信 -I
オプションを使えば、Webサーバーのレスポンスヘッダーのみ取得できる-u
オプションでBasic認証に対応し、.netrc
に認証情報を保存すると安全性が向上する
次章では、curl
をさらに便利に使うための応用テクニックを紹介します!
curlの応用テクニック・便利技
curl
コマンドには、単純なデータ取得や送信だけでなく、リダイレクトの追跡、タイムアウトの設定、プロキシ経由のアクセス、ループ処理での連続リクエストなど、さまざまな応用的な使い方があります。ここでは、これらの便利なテクニックを解説します。

リダイレクトの追跡(-L オプション)
リダイレクトを含むURLにアクセスする場合、デフォルトのcurl
はリダイレクトを自動的に追跡しません。そのため、リダイレクト先のURLにアクセスするためには、-L
オプションを使用する必要があります。
リダイレクトを追跡する基本コマンド
curl -L https://example.com

curlでアクセスしたら、HTMLが取得できませんでした…

リダイレクトされてるかもね。-L オプションをつけると、リダイレクト先のURLを自動的にたどれるよ。

リダイレクト先のURLを知りたいんですが?

-I オプションを使うと、レスポンスヘッダーに Location が含まれてるはずだよ。
リダイレクトの確認
curl -I https://example.com
出力結果
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/
この場合、https://www.example.com/
にリダイレクトされるので、-L
を使うと自動でアクセスできます。
タイムアウトを設定して遅延を防ぐ
ネットワークの遅延やサーバーの応答がない場合に、curl
のデフォルト設定では長時間待機してしまうことがあります。これを防ぐために、--connect-timeout
や --max-time
オプションでタイムアウトを設定できます。
タイムアウトの基本設定
curl --connect-timeout 5 --max-time 10 https://example.com
--connect-timeout 5
→ 接続が5秒以内に確立しなければエラー--max-time 10
→ リクエスト全体の最大待機時間を10秒に設定

サーバーの応答が遅くて、ずっと待機状態になるんですが?

–connect-timeout で接続時間を制限できるよ。それでもダメなら –max-time でリクエスト全体の待機時間も設定しよう。

どのくらいの時間が適切ですか?

用途によるけど、connect-timeout 5 くらいが無難かな。APIなら max-time 10 くらいで試してみるといいね。
プロキシサーバーを経由する方法
社内ネットワークや特定の環境では、直接インターネットにアクセスできない場合があります。そのような場合、curl
でプロキシサーバーを経由する設定が可能です。
HTTPプロキシを指定する
curl -x http://proxy.example.com:8080 https://example.com

プロキシ経由でアクセスしたいんですが、どうすればいいですか?

-x オプションでプロキシサーバーのアドレスを指定すればいいよ。

認証が必要なプロキシの場合は?

ユーザー名とパスワードを指定すればOK。
認証付きプロキシの設定
curl -x http://username:password@proxy.example.com:8080 https://example.com

パスワードをコマンドに直接書くのは避けたいです。

.netrc に保存する方法もあるよ。
プロキシ環境下でのアクセスが必要な場合は、環境変数で指定する方法もあります。
環境変数でプロキシを設定
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
curl https://example.com
ループ処理を使って複数のリクエストを送る
複数のURLやデータに対して連続でcurl
を実行したい場合、ループ処理を使うと効率的です。
forループ
for url in https://example.com/page1 https://example.com/page2; do
curl -O $url
done

複数のファイルを一括でダウンロードしたいんですが?

forループを使えば、複数のURLを一括で処理できるよ。

リストを使って大量にリクエストを送りたいです。

ファイルにURLリストを書いて while read で処理する方法があるよ。
ファイルにリストを保存して実行
1.urls.txt
にURLリストを保存
https://example.com/file1.txt

Example Domain
2.curl
で一括処理
while read url; do curl -O "$url"; done < urls.txt

並列でダウンロードする方法は?

xargs や & を使うと並列処理できるよ。
並列ダウンロード(xargs使用)
cat urls.txt | xargs -n 1 -P 4 curl -O
-P 4
で 4つのプロセスを並列実行 するので、高速ダウンロードが可能になります。
まとめ
-L
オプションでリダイレクトを追跡できる--connect-timeout
と--max-time
でタイムアウトを設定し、遅延を防ぐ-x
でプロキシ経由の通信が可能で、認証情報の設定も対応forループ
やwhile read
を使うと、複数のリクエストを自動処理できるxargs -P
を活用すると並列処理で高速ダウンロードが可能
次章では、curl
のトラブルシューティングについて解説します!
curlを使ったトラブルシューティング
curl
コマンドを実行した際に、予期しないエラーが発生することがあります。ここでは、代表的なトラブルとその解決方法について解説します。

curlコマンドが動かないときの対処法
curl
が正常に動作しない場合、いくつかの原因が考えられます。まずは、以下の点を確認しましょう。
チェックリスト
❶curlがインストールされているか確認
curl --version

curlを実行すると ‘command not found’ って出るんですが…

それは未インストールかもね。curl –version で確認して、なければインストールしよう。
❷ネットワーク接続を確認
ping example.com

サイトにアクセスできません。

まずは ping でサーバーと通信できるか試してみて。ネットワークの問題かも。
❸プロキシ設定を確認
1.環境変数をチェック
echo $http_proxy
2.必要ならプロキシを設定
export http_proxy="http://proxy.example.com:8080"

社内ネットワークだと動かないんですが…

プロキシが必要な環境かも。echo $http_proxy で確認して、適切な設定を追加しよう。
SSL証明書エラーの解決方法
HTTPSサイトにアクセスすると、以下のようなエラーが発生することがあります。
SSLエラーの例
curl: (60) SSL certificate problem: unable to get local issuer certificate
このエラーの主な原因は、ローカルの証明書が適切に設定されていないことです。
解決方法(最新のCA証明書をインストール)
sudo apt install -y ca-certificates
sudo update-ca-certificates

SSLエラーが出てサイトにアクセスできません!

ca-certificates が古いかも。最新のものに更新してみよう。
証明書の検証を無効化(テスト用)
curl -k https://example.com

急ぎで動作確認したいんですが…

テスト目的なら -k オプションでSSL検証を無効化できるよ。ただし、本番環境では推奨しない。
HTTPステータスコードからエラーを特定する
curl
はHTTPステータスコードを返すので、エラーの原因を特定するのに役立ちます。
レスポンスコードを確認する方法
curl -o /dev/null -w "%{http_code}\n" -s https://example.com

curlのエラーが何かわからないんですが…

-w “%{http_code}” でHTTPステータスコードを取得すると、原因が特定しやすいよ。
よくあるHTTPステータスコード
ステータスコード | 意味 |
---|---|
200 | 成功 |
301/302 | リダイレクト(-L で対応) |
403 | アクセス拒否(認証が必要) |
404 | URLが存在しない |
500 | サーバー内部エラー |

403が出るんですが?

認証が必要かも。-u オプションでユーザー名とパスワードを指定してみて。
まとめ Linuxのcurlコマンドを使いこなそう!
curl
は、シンプルなデータ取得からAPI連携、認証付きリクエストまで、幅広い用途に対応した便利なコマンドです。最後に、よく使うコマンドと学習用の参考情報をまとめます。

よく使うcurlコマンドのリファレンス
用途 | コマンド |
---|---|
基本的なデータ取得 | curl https://example.com |
ファイルを保存 | curl -o file.txt https://example.com/file.txt |
リダイレクト対応 | curl -L https://example.com |
ヘッダー情報取得 | curl -I https://example.com |
JSONデータ送信 | curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com |
認証付きアクセス | curl -u user:pass https://example.com/protected |
タイムアウト設定 | curl --max-time 10 https://example.com |
プロキシ経由のアクセス | curl -x http://proxy.example.com:8080 https://example.com |
参考リンク・公式ドキュメント
より詳しくcurl
を学ぶには、以下の公式ドキュメントやリファレンスを活用しましょう。
curl公式サイト
https://curl.se/
学習用記事
- cURLの使い方完全ガイド
https://example.com/curl-guide - LinuxでのHTTPリクエストの最適な方法:
https://example.com/linux-http


ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。