GNU Wget(または単にWget、旧称Geturl 、パッケージ名wgetとも表記される)は、 Webサーバーからコンテンツを取得するコンピュータプログラムです。GNUプロジェクトの一部です。その名前は「 World Wide Web」とHTTPリクエストメソッド「get」に由来します。HTTP、HTTPS、FTP経由でのダウンロードをサポートしています。
その機能には、再帰的ダウンロード、ローカル HTML のオフライン表示用のリンク変換、プロキシのサポートなどがあります。 1996 年に登場し、Web の人気が爆発的に高まった時期と重なり、Unixユーザーの間で広く使われるようになり、ほとんどの主要なLinux ディストリビューションに同梱されるようになりました。 Wget はC言語で書かれており、Unix ライクなシステムであればどれでも簡単にインストールできます。 Wget は、Microsoft Windows、macOS、OpenVMS、HP-UX、AmigaOS、MorphOS、Solarisに移植されています。バージョン 1.14 以降、Wget は出力を Web アーカイブ標準のWARCフォーマットで保存できるようになりました。[ 3 ]
Wgetは、同じ作者によるGeturlという以前のプログラムから派生したもので、[ 4 ] 1995年後半に開発が開始されました。作者がAREXXでJames Burtonによって書かれたGetURLという以前のAmigaプログラムを知った後、名前がWgetに変更されました。
Wgetは、1990年代半ばに存在した一貫性のないWebダウンロードソフトウェアのギャップを埋める存在でした。HTTPとFTPの両方を使ってファイルをダウンロードできるプログラムは存在しませんでした。既存のプログラムはFTPのみをサポートしているもの( NcFTPやdlなど)か、まだ普及していなかったPerlで書かれているものばかりでした。Wgetは既存のプログラムの機能を参考に開発されましたが、HTTPとFTPの両方をサポートし、すべてのUnixシステムに搭載されている標準的な開発ツールだけで構築できるという特長を備えていました。
当時、多くのUnixユーザーは極めて低速な大学のインターネット接続やダイヤルアップ 接続に苦労しており、人間のオペレーターの介入なしに一時的なネットワーク障害に対処できるダウンロードエージェントの必要性が高まっていた。
Wgetは、低速または不安定なネットワーク接続環境でも安定して動作するように設計されています。ネットワークの問題でダウンロードが完了しなかった場合、Wgetは自動的に中断した箇所からダウンロードを再開し、ファイル全体が取得されるまでこれを繰り返します。この機能をサポートするために、当時新しかったHTTPヘッダーを利用した最初のクライアントの一つでした。Range
Wgetは、 HTMLページからリンクされたリソースを抽出し、それらを順番にダウンロードすることで、Webクローラーのように動作させることができます。このプロセスは、すべてのページがダウンロードされるか、ユーザーが指定した最大再帰深度に達するまで再帰的に繰り返されます。ダウンロードされたページは、リモートサーバー上のディレクトリ構造に似たディレクトリ構造に保存されます。この「再帰的ダウンロード」により、HTTP経由でWebサイトを部分的または完全にミラーリングできます。ダウンロードされたHTMLページ内のリンクは、オフライン表示用にローカルにダウンロードされたコンテンツを指すように調整できます。このようなWebサイトの自動ミラーリングを実行する場合、Wgetは(オプションを使用しない限り) Robots Exclusion Standardをサポートします。-e robots=off
再帰ダウンロードはFTPでも機能し、WgetはLIST追加でダウンロードするファイルを見つけるコマンドを発行し、トップURLで指定されたディレクトリとその配下のディレクトリとファイルに対してこのプロセスを繰り返します。FTP URLのダウンロードを要求する際には、シェルライクなワイルドカードがサポートされます。
HTTPまたはFTP経由で再帰的にダウンロードする場合、Wgetはローカルファイルとリモートファイルのタイムスタンプを調べ、対応するローカルファイルよりも新しいリモートファイルのみをダウンロードするように指示できます。これにより、HTTPおよびFTPサイトのミラーリングが容易になりますが、 rsyncなど、ミラーリング用に最初から設計されたプログラムと比較すると、非効率的でエラーが発生しやすいと考えられます。一方、Wgetはこのタスクのために特別なサーバー側ソフトウェアを必要としません。
Wgetは非対話型プログラムです。一度起動すれば、ユーザーの操作は不要で、TTYを制御する必要もありません。また、処理の進行状況を別のファイルに記録し、後で確認することができます。ユーザーはWgetを起動してログオフし、プログラムを放置することができます。これに対し、ほとんどのグラフィカルユーザーインターフェースやテキストユーザーインターフェースのWebブラウザでは、ユーザーがログイン状態を維持し、失敗したダウンロードを手動で再開する必要があり、大量のデータを転送する際には大きな障害となります。
Wgetは、サードパーティライブラリへの依存を最小限に抑えた、移植性の高いC言語で記述されており、CコンパイラとTCP/IPネットワークへのBSDライクなインターフェースさえあれば動作します。Unixシェルから起動するUnixプログラムとして設計されたこのプログラムは、 Cygwinを介したMicrosoft WindowsやmacOSなど、数多くのUnixライクな環境やシステムに移植されています。また、 GnuWinパッケージの一つとして、ネイティブのMicrosoft Windowsプログラムとしても利用可能です。
GNU Wget は Hrvoje Nikšić によって作成され、Dan Harkless、Ian Abbott、Mauro Tortonesi など、多くの人々が貢献しました。重要な貢献は配布物に含まれるAUTHORSファイルに記載されており、残りの貢献はすべて、プログラムに同梱されている変更履歴に記載されています。Wget は現在、Giuseppe Scrivano と Tim Rühsen によってメンテナンスされています。[ 5 ]
Wgetの著作権はフリーソフトウェア財団に帰属し、同財団の方針としてGNUソフトウェアへの重要な貢献すべてに対して著作権譲渡を要求することになっている。[ 6 ]
GNU Wget は、 GNU General Public Licenseバージョン 3 以降の条項に基づいて配布されますが、 OpenSSLライブラリにリンクされたバイナリの配布を許可する特別な例外があります。例外のテキストは次のとおりです。[ 2 ]
GNU GPLバージョン3第7条に基づく追加許可
このプログラム、または対象となる著作物を、OpenSSL プロジェクトの OpenSSL ライブラリ(またはその改変版)とリンクまたは結合して改変する場合、そのライブラリには OpenSSL または SSLeay ライセンスの条項で保護されている部分が含まれている場合、フリーソフトウェア財団は、結果として生じる著作物を配布する追加の許可をあなたに付与します。このような結合の非ソース形式に対応するソースには、使用された OpenSSL の部分のソースコードと、対象となる著作物のソースコードの両方を含める必要があります。
WgetがGnuTLSライブラリにもリンクするように変更されれば、例外条項は削除されると予想されます。
Wgetのドキュメントは、 Texinfoリファレンスマニュアルの形式で、 GNUフリー文書ライセンス(バージョン1.2以降)の条件に基づいて配布されています。Unix系システムで通常配布されるmanページは、Texinfoマニュアルの一部から自動的に生成され、同じライセンスの条件が適用されます。
Wgetはオープンな方法で開発されており、設計上の決定事項のほとんどは、ユーザーと開発者がフォローする公開メーリングリスト[ 7 ]で議論されます。バグ報告とパッチも同じリストに送られます。
Wget のコードとドキュメントに貢献する推奨方法は、 diffユーティリティによって生成されたテキストパッチの形式でソースを更新することです。Wget に含めることを目的としたパッチはメーリング リスト[ 7 ]に提出され、そこでメンテナーによってレビューされます。メンテナーの精査を通過したパッチはソースにインストールされます。パッチの作成方法とスタイル ガイドラインは、プロジェクトの wiki に記載されています。[ 8 ]
ソースコードは、1.5.3 リリースから始まる改訂履歴をホストするリモートバージョン管理リポジトリを介して追跡することもできます。リポジトリは現在Gitで動作しています。[ 9 ]それ以前は、ソースコードは (逆順で) Bazaar、[ 10 ] Mercurial、Subversion、およびCVSを介してホストされていました。
開発中に十分な数の新機能やバグ修正が蓄積されると、WgetはGNU FTPサイトとそのミラーサイトを通じて一般に公開されます。完全にボランティアによって運営されているため、リリースを迫る外部からの圧力はなく、強制的なリリース期限もありません。
リリースは、 Wget 1.11やWget 1.8.2のように、major.minor[.revision]の形式で番号が付けられます。メジャー バージョン番号の増加は、Wget の動作における大きな、場合によっては互換性のない変更、またはコード ベースの根本的な再設計を表します。マイナー バージョン番号の増加は、新機能の追加とバグ修正を示します。新しいリビジョンは、前のリビジョンと比較してバグ修正のみを含むリリースを示します。リビジョン ゼロは省略されるため、たとえば Wget 1.11 は 1.11.0 と同じです。Wget は、 Linux で普及している奇数/偶数のリリース番号規則を使用しません。
Wgetは、2010年にコロンビア・ピクチャーズが公開した映画『ソーシャル・ネットワーク』に登場する。主人公(Facebookの共同創設者マーク・ザッカーバーグをやや脚色した人物)は、Wgetを使ってハーバード大学の様々な学生寮の名簿から学生の写真を集める。
以下のリリースは、Wget の開発における重要なマイルストーンを表しています。各リリースの横に記載されている機能は簡潔にするために編集されており、リリースに関する包括的な情報ではありません。リリースに関する包括的な情報は、Wget に同梱されているNEWSファイルで入手できます。 [ 4 ]
Content-Dispositionスクリプトでよく使用されるヘッダーの暫定的なサポートを追加しました。また、HTTP認証コードにセキュリティ関連の改善が加えられました。プロジェクトのメンテナーはMicah Cowanが引き継ぎました。--https-onlyのサポートが追加されましたPerfect-Forward。--if-modified-since。--bind-dns-address--dns-servers--retry-on-http-errorWebサーバーが特定のHTTPステータスコードで応答した場合にダウンロードを再試行するオプションが追加されました。--retry-on-host-error信頼性の向上と--accept-regex、--reject-regex再帰的なFTP取得のためのオプションが追加されました。GNU Wget2 2.0.0 は 2021 年 9 月 26 日にリリースされました。GPL-3.0 以降のライセンスでライセンスされており、LGPL-3.0 以降のライセンスの Libwget をラップしています。[ 14 ] Wget と比較して多くの改善点があり、特に、次のプロトコルとテクノロジーのサポートにより、多くの場合 Wget2 は Wget1.x よりもはるかに高速にダウンロードできます。[ 15 ]
GWget は Wget 用のフリーソフトウェアのグラフィカルユーザーインターフェースです。GNOME ソフトウェアスタックをベースに David Sedeño Fernández によって開発されました。GWgetは Wget の主要な機能をすべてサポートしており、並列ダウンロードも可能です。[ 16 ]
Cliget は、 Curl 、Wget、Aria2を使用するオープンソースのFirefoxアドオンダウンローダーです。Zaid Abdulla によって開発されました。[ 17 ] [ 18 ] [ 19 ]
組み込みシステム向けに設計されたGNU Wgetのクローンが存在するが、これらのシステムはメモリやストレージ容量が限られていることが多い。クローン版は、通常ダウンロードのみといった最も基本的な機能しかサポートしていない。
1.4.0 [以前は Geturl として知られていた] は、Geturl の大幅な書き直しです。