wgetとcurlの違い
wgetとcurlは、コマンドラインからWebサーバーなどにアクセスし、データを取得できるツールです。この2つのツールは、どちらもURLを指定してデータを取得するため一見似ていますが、用途や得意分野が異なります。
wget:ファイルのダウンロードcurl:データの送受信やHTTP通信の制御
本記事では「wgetとcurlの違い」について、共通点と相違点に分けて解説し、それぞれが向いているケースまで具体的に紹介します。
wgetとcurlの違いを理解しておけば、ファイルのダウンロードやHTTPリクエストの送信、Webサーバーの応答確認など、目的に応じたツールを選びやすくなります。
はじめに(wgetとcurlの基礎知識)
wgetの概要・特徴
wget(GNU Wget)は、Webサーバーなどからファイルをダウンロードするためのコマンドラインツールです。GNUプロジェクトによって開発されており、HTTP、HTTPS、FTP、FTPSに対応しています。
- ダウンロードに特化:オプションなしで実行しても、取得したデータをカレントディレクトリに保存。
- 再帰的ダウンロード:Webページ内のリンクをたどり、配下のファイルをまとめて取得する。
- ダウンロードの再開:ダウンロードが途中で中断した場合でも、ダウンロードを再開できる。
- バックグラウンドでの実行:コマンド起動直後にバックグラウンドへ移動し、ダウンロード処理を続行できる。
最大の特徴は、URLを指定するだけで、取得したデータをファイルとして保存できる点です。例えば、以下のコマンドを実行すると、指定したWebページのHTMLファイルをダウンロードできます。
$ wget http://example.com/wgetはファイルの取得や保存に関する機能が充実しています。特に、複数のファイルを効率的に取得したい場合や、Webサイトのコンテンツをローカル環境に保存したい場合に便利なツールです。HTTP/2やマルチスレッドに対応した後継バージョン「GNU Wget2」も公開されています。
公式サイト:https://www.gnu.org/software/wget/
curlの概要・特徴
curlは、さまざまなプロトコルを使用して、サーバーとの間でデータを送受信するためのコマンドラインツールです。スウェーデンの開発者Daniel Stenberg氏を中心に開発され、1997年に最初のバージョンが公開されました。
- 豊富な対応プロトコル:HTTP/HTTPSやFTPに加え、SFTP、SCP、SMTP、IMAP、LDAP、MQTT、WebSocketなど20種類以上をサポート。
- 各HTTPメソッドに対応:GET、POST、PUT、DELETEなど、用途に応じたHTTPメソッドを使用できる。
- リクエストヘッダーの設定:リクエストヘッダーを追加・変更し、さまざまな通信条件を再現できる。
- HTTPレスポンスの確認:ステータスコードやレスポンスヘッダー、レスポンスボディなどを確認できる。
最大の特徴は、多様なプロトコルへの対応とHTTPリクエストを細かく制御できる点です。例えば、以下のコマンドを実行すると、指定したWebサーバーにHEADリクエストを送信し、レスポンスヘッダーを簡単に確認できます。
$ curl -I http://example.com/curlは単なるファイルのダウンロードにとどまらず、HTTP通信の動作確認やAPIのテストなどにも活用できます。HTTPメソッドやヘッダーなどを変更しながら通信結果を確認できるため、WebアプリケーションやAPIの動作を詳しく調べたい場合に適しています。
公式サイト:https://curl.se/
wgetとcurlの共通点
wgetとcurlは、どちらもコマンドラインからHTTPリクエストを送信し、Webサーバーからデータを取得できるツールです。主な共通点は、以下のとおりです。
- コマンドラインインターフェース:ターミナル上で動作するCLIツール。GUIのないサーバーやSSH接続した環境でも使用できる。
- HTTP・HTTPS・FTPに対応:HTTP/HTTPSによるファイル取得といった基本的なダウンロード用途であれば、どちらのツールでも実行可能。
- ファイルのダウンロード:URLを指定して、Webサーバー上のファイルを取得する。
- HTTPリクエストのカスタマイズ:HTTPリクエストヘッダーの追加・変更や、Basic認証などを利用したアクセスが可能。
- HTTPレスポンスの確認:HTTPステータスコードやレスポンスヘッダーを確認できるため、Webサーバーの応答を調査する際にも役立つ。
- プロキシに対応:OWASP ZAPやBurp Suiteなどのローカルプロキシを設定することで、wgetやcurlによる通信をプロキシ経由で中継できる。
- 処理の自動化:シェルスクリプトやcron、CI/CDパイプラインに組み込むことで、ファイルの取得やWebサーバーへのアクセスを自動化できる。
- 主要なOSに対応:Linux・macOS・Windowsのいずれでも利用可能。ただし、標準でインストールされているかどうかはOSによって異なる。
- オープンソース:適用されるライセンスは異なるが、いずれもオープンソースとして公開されている。
例えば、http://example.com/のHTMLをダウンロードする場合、以下のように実行します。
wgetでファイルを取得すると、オプションなしでもURL末尾のファイル名で保存されます。なお、URLがスラッシュで終わる場合はindex.htmlという名前で保存されます。
$ wget http://example.com/curlでは、-oオプションを指定することで、取得したデータを任意のファイル名で保存できます。
$ curl -o index.html http://example.com/wgetとcurlには多くの共通点があり、「URLを指定したファイルのダウンロード」や「レスポンスの確認」といった基本的な操作はどちらでも対応可能です。
wgetとcurlの相違点
wgetとcurlは、どちらもコマンドラインからネットワーク通信を行い、サーバーとやり取りするツールです。しかし、wgetはファイルのダウンロードに特化しているのに対し、curlは多様なプロトコルを利用したデータの送受信が可能です。
wgetとcurlの比較表
| wget | curl | |
|---|---|---|
| 開発元 | GNUプロジェクト | スウェーデン Daniel Stenberg氏 |
| 初期リリース | 1996年 | 1997年 |
| 主な用途 | ファイルのダウンロード、Webサイト全体のミラーリング | 各種プロトコルでのデータ送受信 |
| 利用シーン | ソフトウェアの取得、Webサイトの複製 | HTTPリクエストの検証、システム連携・データ転送、APIの動作確認 |
| 特徴 | ダウンロードに特化 | 多様なプロトコルによる通信が可能 |
| 対応プロトコル | HTTP、HTTPS、FTP、FTPS | HTTP、HTTPS、FTP、FTPS、SFTP、SCP、SMTP、SMTPS、IMAP、IMAPS、POP3、POP3S、LDAP、LDAPS、SMB、SMBS、TELNETなど20種類以上 |
| デフォルトの出力先 | ファイルに保存 | 標準出力に表示 |
| Webサイトの再帰的ダウンロード | 可能 | 不可 |
| ライブラリの提供有無 | なし(コマンドラインのみ使用可能) | libcurlとして提供され、PHP、Python、C++など多様な言語から利用可能 ・コマンドライン:curl ・ライブラリ:libcurl |
| ライセンス | GNU General Public License バージョン3以降 | MIT/X派生ライセンス |
wgetの強みを活かした使用例
wgetは「Webサイトを丸ごと保存する」「ダウンロードが途中で切れても、続きから再開する」といった用途に強みを発揮します。
例)Webサイトを丸ごとミラーリング(再帰的ダウンロード)
$ wget -r -np -k http://example.com/-r:再帰的ダウンロード(リンクをたどる)-np:親ディレクトリはたどらない-k:ダウンロード後にリンクをローカル用に書き換える
-r(または-m)を指定すると、HTML内のリンクをたどりながら再帰的にファイルをダウンロードできます。
curlの強みを活かした使用例
curlは、様々なプロトコルをサポートし、サーバーとのデータのやり取りに特化しています。
例)HEADリクエストを送信し、レスポンスヘッダーを確認する
$ curl -I http://example.com/
HTTP/1.1 200 OK
Date: Sat, 17 Oct 2026 11:44:35 GMT
Server: Apache/2.2.14 (Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.30 with Suhosin-Patch proxy_html/3.0.1 mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL/0.9.8k Phusion_Passenger/4.0.38 mod_perl/2.0.4 Perl/v5.10.1
Last-Modified: Fri, 31 Jul 2015 02:55:52 GMT
ETag: "45f13-6da3-51c22f5365e00"
Accept-Ranges: bytes
Content-Length: 28067
Vary: Accept-Encoding
Content-Type: text/html-Iオプションを指定すると、HTTPのHEADリクエストを送信し、レスポンスヘッダーを確認できます。デフォルトでは実行結果はファイルに保存されず、画面(標準出力)に表示されるため、HTTPリクエストの検証やAPIの動作確認に適しています。
wgetでもオプションを組み合わせることにより、同様の処理は可能ですが、HTTP通信を柔軟に操作する用途ではcurlの方が使いやすい場面が多いでしょう。
# wgetでレスポンスヘッダーを表示する
$ wget -S --spider http://example.com/まとめ:結局どっちを使うべき?
wgetとcurlは、どちらもWebサーバーと通信できるコマンドですが、用途によって使い分けるのがおすすめです。
| 目的 | 推奨 | 理由 |
|---|---|---|
| ファイルを保存したい | wget | オプションなしで保存でき、リダイレクトにも追従する |
| サイトを丸ごと取得したい | wget | 再帰取得・ミラーリングに対応している |
| HTTPメソッドやリクエストヘッダーを変えて送りたい | curl | リクエストを細かく制御できる |
| レスポンスヘッダーを確認したい | curl | 1コマンドで即座に確認できる |
ファイルのダウンロードを目的とする場合はwget、HTTPリクエストの制御やレスポンスの確認を重視する場合はcurlが適しています。
wgetが向いているケース
- ファイルのダウンロード:ソフトウェアやファイルなどをローカル環境に保存したい場合
- ダウンロードの再開:ダウンロードが途中で中断しても、中断した時点からダウンロードを再開したい場合
- 定期的なファイル取得:シェルスクリプトなどを使い、ファイルの取得処理を自動化したい場合
- 再帰的に取得:指定したWebページからリンクをたどり、Webサイト全体を取得したい場合
wgetは、Webサーバーからファイルを効率的にダウンロードしたい場合に適しています。特に再帰的ダウンロードはcurlにない機能で、wget最大の強みです。
curlが向いているケース
- HTTPリクエストの制御:HTTPメソッド、リクエストヘッダー、リクエストボディを指定したい場合
- HTTPレスポンスの確認:ステータスコードやレスポンスヘッダー、レスポンスボディを確認したい場合
- APIの動作確認:HTTPリクエストを送信して、APIの動作を確認したい場合
- Webアプリケーションの検証:HTTP通信の内容やリダイレクトの挙動などを確認したい場合
curlは、HTTPリクエストを細かく制御したり、Webサーバーからのレスポンスを確認する場合に適しています。

