GNU Wget

(あるいは単に )はウェブサーバからコンテンツを取得するダウンローダであり、GNUプロジェクトの一部である。その名称はワールド・ワイド・ウェブ(WWW)とプログラムの主要な機能であるデータ取得を意味する英語の「<ruby lang="en">get<rp>(</rp><rt lang="en-Kana">ゲット</rt><rp>)</rp></ruby>」から派生したものである。現在Wgetはウェブ閲覧のために用いられるTCP/IPに基づいたもっともポピュラーなプロトコルである、HTTP、HTTPS及びFTP によるダウンロードが利用可能である。
Wgetの特徴としては、再帰的ダウンロード、ローカルに取得したHTMLをオフラインで閲覧するためのリンクの変換、プロキシのサポートその他数多くの機能を挙げることができる。Wgetは1996年に、ウェブの人気の急拡大と軌を一にして登場した。その結果多くのUNIXユーザーに用いられるようになり、ほとんどの主要なLinuxディストリビューションとともに配布されるようになった。移植性の高いC言語によって書かれているため、WgetはいずれのUnix系システムにも容易にインストールできる。またmacOS、Windows、OpenVMS及びAmigaOSを含む多くの環境に移植されている。
WgetはGNOMEデスクトップにおけるGWgetやKDEデスクトップにおけるKGetのようなGUIプログラムの基礎として用いられている。Wgetはフリーソフトウェアである。
特徴.
確実性.
Wgetは低速あるいは不安定なネットワーク接続でも確実に動作するように設計されている。もしダウンロードがネットワークの問題によって完了しなかった場合、Wgetは自動的にダウンロードが停止した箇所からダウンロードを継続するように試み、ファイル全体が取得されるまでこれを繰り返す。Wgetは、この機能を利用するため、当時としては新しかったcodice_1HTTPヘッダをもっとも早期に採用したクライアントの一つとなった。
再帰的ダウンロード.
Wgetをクローラとして動作させることも可能である。クローラとして動作するとき、Wgetは、リソースのハイパーリンクをHTMLのウェブページから抽出し、それらを連続してダウンロードし、ユーザーによって指定された最大繰り返しの回数に達するまで再帰的に繰り返す。ダウンロードされたページは、リモートのサーバのディレクトリ構成に類似したディレクトリ構成に保存される。この「再帰的ダウンロード」はHTTPによるウェブサイトの部分的もしくは完全なミラーリングを可能にする。Wgetは、ダウンロードされたHTMLページ内のリンクを、オフラインでの閲覧のため、ローカルにダウンロードされた素材に向けられるよう調整することもできる。この種のウェブサイトの自動的ミラーリングを行うときには、(ユーザーがオプションとしてcodice_2を指定しない限り)WgetはRobots Exclusion Standardを遵守する。
再帰的ダウンロードはFTPでも同様に動作する。その際、Wgetはダウンロード対象となるファイルを発見するためにcodice_3コマンドを発行する。そしてトップのURLで指定されたものより下位のファイルとディレクトリに関してこのプロセスを繰り返す。FTPのURLのダウンロードが要求された場合には、シェル類似のワイルドカードが利用できる。
HTTPを用いる場合でもFTPを用いる場合でも、再帰的ダウンロードを行う際には、Wgetにローカル及びリモートのファイルのタイムスタンプを調べ、リモートファイルが相当するローカルファイルより新しい場合にのみダウンロードを行うように命令することができる。これによりHTTP及びFTPサイトの容易なミラーリングが可能になるが、これはrsyncのように、最初からミラーリングを行うために設計されたプログラムに比べ非効率でよりエラーを生じやすいと考えられている。一方で、Wgetはこの作業のために特別なサーバ側のソフトウェアを必要としないという利点もある。
非対話性.
Wgetは非対話的なプログラムである。つまり、一度起動すれば、Wgetはユーザーとの対話を必要とせずTTYをコントロールする必要もなく、進捗状況は(後の調査のため)別のファイルに記録しておくこともできるということである。そういった非対話的な形でユーザーはWgetを起動し、プログラムを監視することもせずログアウトすることができる。対照的に、ほとんどのグラフィカルユーザインタフェースあるいはテキストユーザインタフェースのウェブブラウザは、ユーザーがログインし続けることと、失敗したダウンロードを手動で再度スタートすることを求める。これは大量のデータを転送する際には大きな障害となりうる。
移植性.
Wgetは、サードパーティーのライブラリに対する依存性を最小限にした、C言語の移植性の高いスタイルで記述されている。Wgetには、C言語コンパイラとTCP/IPネットワーキングに対するBSDライクなインタフェースの他にはほとんど必要なものはない。WgetはUnixシェルから呼び出されるUNIXプログラムとして設計されたため、多くのUnix系環境やシステムに移植されている。それはWindows及びmacOSなどを含んでいる。
Wgetの使い方.
基本的な使い方.
URLを(1個以上)引数にして をコマンドラインから呼ぶのが、典型的な使い方である。(下表ではコマンドは読み易すくするために複数行で記述してあるが、実際には改行のない一行である。)
より複雑な使い方として、複数のURLを階層を保ったままディレクトリに自動的にダウンロードする、というのもある。
著者と著作権.
GNU WgetはHrvoje Nikšićによって書かれた。彼のほかDan Harkless、Ian Abbott、Mauro Tortonesiなど多くの人々がWgetに寄稿している。主要な寄稿者達は配布物に含まれる"AUTHORS"ファイルにクレジットされている。その他多くの人々は配布物に含まれるchangelogに記載されている。現在、WgetはGiuseppe Scrivanoによってメンテナンスされている。
Wgetの著作権はフリーソフトウェア財団に所属する。GNUソフトウェアに対する重要な寄稿全てに対して著作権譲渡を要求するというのがフリーソフトウェア財団のポリシーである。
歴史.
初期.
Wgetは同じ作者による以前のプログラムGeturlの後継である。Geturlの開発は1995年後半に始まった。ところが作者は、以前ジェイムズ・バートンがAmiga用にAREXXで書いたGetURLというプログラムがあることに気づいた。その後、名称は"Wget"に改められた。
Wgetは1990年代半ばに利用可能であったウェブダウンロードソフトウェアの間隙を埋めるものだった。HTTPとFTPの両方のプロトコルで確実にファイルをダウンロードできるプログラムは一つもなかった。当時存在したプログラムは(NcFTPやdlのように)FTPのみ利用可能だったか(当時はまだ、どこでも利用できるようなものではなかった)Perlで書かれたものだった。Wgetは当時すでにあったプログラムの機能に刺激を受けてはいたものの、このプロジェクトの目標はHTTPとFTPの両方を利用可能にすることと、ユーザーがどのUnixシステムにもある標準的な開発ツールのみを用いてWgetをビルドできるようにすることだった。
当時多くのUnixユーザーは、極端に遅い大学とダイヤルアップ接続のインターネット接続に苦しんでいた。このため、操作する人間が補助しなくとも一過性のネットワーク障害に対処できるダウンロードエージェントに対するニーズが増大していた。
主なリリース.
以下に挙げるリリースはWgetの開発において重要な節目となるものである。それぞれのリリースに隣接して掲載している機能は簡潔さを旨として編集されており、当該リリースに関する網羅的情報ではない。そのような情報はWgetとともに配布されている"NEWS"ファイルに掲載されている。.
開発とリリースのサイクル.
Wgetの開発はオープンな流儀で行われている。ほとんどの設計上の決定は、通常はユーザーと開発者が参加する公開のメーリングリストで行われている。バグリポートとパッチも同じメーリングリストに流される。
ソースの投稿.
Wgetのコードやドキュメンテーションを投稿する際に好まれる方法はdiffユーティリティによって生成されるテキストのパッチの形でソースを更新することである。パッチをWgetに含めようとする場合は、メーリングリストに投稿されメンテナによってレビューされる。メンテナの検査を通過したパッチはソースに加えられる。パッチの作り方とスタイルのガイドラインはプロジェクトのwikiに概略が示されている。
ソースコードは、リリース1.5.3に始まる改訂の歴史を保存するリモートバージョンコントロールリポジトリで追跡することができる。リポジトリはMercurialで管理されている。以前はSubversion、さらにその前はCVSで管理されていた。
リリース.
開発中に十分な数の機能あるいはバグフィックスが集積したときに、WgetはGNUのFTPサイト及びそのミラーサイトを通じて一般に公開される。プロジェクトは完全にボランティアによって運営されているので、リリースを発表することについて外部からの圧力はなく、強制力のあるリリースの締め切りもない。
リリースには"メジャー.マイナー.リビジョン"という形式でバージョンナンバーが振られている。(例)"Wget 1.11"、"Wget 1.8.2"。メジャーバージョンナンバーが増加されるのは、大きなそして場合によっては非互換となるようなWgetの動作の変更あるいはコードベースの根本的な再設計がある場合である。マイナーバージョンナンバーが増加されるのは新しい機能の追加とバグフィックスを示す場合である。新しいリビジョンは、その前のリビジョンに比較して、バグフィックスのみが含まれていることを示している。リビジョン ゼロは省略される。つまりWget 1.11は1.11.0と同じことである。
ライセンス.
GNU WgetはGNU General Public Licenseバージョン3以降のもとで、OpenSSLライブラリにリンクされたバイナリの配布を許可するという特別な例外をつけて配布されている。例外規定は以下の通りである:
WgetがGnuTLSライブラリにリンクできるように改良された際にはこの例外規定が削除されることが期待されている。
Wgetの ドキュメンテーションは Texinfoリファレンスマニュアルの形態で、GNU Free Documentation Licenseバージョン1.2以降の条件で配布されている。通常Unixライクなシステムで配布されているman pageはTexinfoマニュアルのサブセットから自動的に生成され、同じライセンスが適用される。
国際化.
WgetはGNU gettextによる国際化に対応している。Unixライクなシステムでは環境変数を適切に設定することで母語を表示させることができる。Wget-1.12では日本語を含め30以上の言語に対応している。
Wget2.
GNU Wget2のバージョン2.0.0は、2021年9月26日にリリースされた。Wget2はGNU General Public Licenseバージョン3以降のもとで配布されており、これをラッピングするLibwgetはGNU Lesser General Public Licenseバージョン3以降のもとで配布されている。Wget2はWgetと比較して多くの改善点があり、特に、以下のプロトコルと技術に対応したことで、多くの場合、Wget2はWget1.xより遥かに高速にダウンロードすることができる。