GNU Wget
GNU Wget (あるいは単に Wget) はウェブサーバからコンテンツを取得するコンピュータープログラムであり、GNU Projectの一部である。その名称はWorld Wide Webと(プログラムの主要な機能である)getから派生したものである。現在Wgetはウェブ閲覧のために用いられるTCP/IPに基づいたもっともポピュラーなプロトコルである、HTTP、HTTPS及びFTP によるダウンロードが利用可能である。
Wgetの特徴には、再帰的ダウンロード、ローカルに取得したHTMLをオフラインで閲覧するためのリンクの変換、プロキシのサポートその他多くが含まれる。Wgetは1996年に、ウェブの人気の急拡大と軌を一にして登場した。その結果多くのUnixユーザーに用いられるようになり、ほとんどの主要なLinuxディストリビューションとともに配布されるようになった。移植性の高いC言語によって書かれているため、WgetはいずれのUnix系システムにも容易にインストールできる。またMac OS X、Microsoft Windows、OpenVMS及びAmigaOSを含む多くの環境に移植されている。
WgetはGNOMEデスクトップにおけるGWgetやKDEデスクトップにおけるKGetのようなGUIプログラムの基礎として用いられている。Wgetはフリーソフトウェアである。
目次 |
特徴
確実性
Wgetは低速あるいは不安定なネットワーク接続でも確実に動作するように設計されている。もしダウンロードがネットワークの問題によって完了しなかった場合、Wgetは自動的にダウンロードが停止した箇所からダウンロードを継続するように試み、ファイル全体が取得されるまでこれを繰り返す。Wgetは、この機能を利用するため、当時としては新しかったRangeHTTPヘッダをもっとも早期に採用したクライアントの一つとなった。
再帰的ダウンロード
Wgetをクローラとして動作させることも可能である。クローラとして動作するとき、Wgetは、リソースのハイパーリンクをHTMLのウェブページから抽出し、それらを連続してダウンロードし、ユーザーによって指定された最大繰り返しの回数に達するまで再帰的に繰り返す。ダウンロードされたページは、リモートのサーバのディレクトリ構成に類似したディレクトリ構成に保存される。この「再帰的ダウンロード」はHTTPによるウェブサイトの部分的もしくは完全なミラーリングを可能にする。Wgetは、ダウンロードされたHTMLページ内のリンクを、オフラインでの閲覧のため、ローカルにダウンロードされた素材に向けられるよう調整することもできる。この種のウェブサイトの自動的ミラーリングを行うときには、(ユーザーがオプションとして-e robots=offを指定しない限り)Wgetはen:Robots Exclusion Standardを遵守する。
再帰的ダウンロードはFTPでも同様に動作する。その際、Wgetはダウンロード対象となるファイルを発見するためにLISTコマンドを発行する。そしてトップの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系環境やシステムに移植されている。それはMicrosoft Windows上のCygwin及びMac OS Xなどを含んでいる。
その他の特徴
- Wgetはプロキシ経由でダウンロードを行える。プロキシは会社のファイアーウォール内部からのウェブアクセスを可能にするためや頻繁にアクセスされるコンテンツをキャッシュし速く提供するために広く用いられている。
- Wgetは持続的HTTP接続が利用可能な場合にはそれを利用する。
- 適切なインタフェースが含まれているシステムにおいてはIPv6が利用できる。
- OpenSSLライブラリを利用し、暗号化されたダウンロードを行うためにSSL/TLSが利用できる。
- 適切なインタフェースが含まれている32ビットシステムでは2GiBより大きいファイルもサポートされている。
- 利用可能な帯域幅すべてを使い尽くすことを避けるため、ダウンロードの速度を調整することができる。
Wgetの使い方
基本的な使い方
GNU Wgetの典型的な使い方は、1つ以上のURLを引数として与えてWgetをコマンドラインから起動することである。
# example.com のタイトルページをダウンロードし# "index.html"という名前のファイルに保存する。wget http://www.example.com/
# GNUのftpサイトからWgetのソースコードをダウンロードする。wget ftp://ftp.gnu.org/pub/gnu/wget/wget-latest.tar.gz
より複雑な使い方はディレクトリ階層に複数のURLを自動的にダウンロードすることを含む。
# ウェブサイトから*.gifをダウンロードする# ("wget http://www.server.com/dir/*.gif" のような# ワイルドカードの展開はftpにおいてのみ可能)wget -e robots=off -r -l1 --no-parent -A.gif http://www.server.com/dir/# example.comのタイトルページを、ページを表示するのに必要な画像と# スタイルシートとともにダウンロードし、その中にあるURLが# ローカルで利用可能なコンテンツを参照するように変換する。wget -p -k http://www.example.com/
# example.comの全てのコンテンツをダウンロードするwget -r -l 0 http://www.example.com/
進んだ使い方
# 購入したばかりの本の正誤表をダウンロードする。# 全てのローカルのリンクを再帰的にダウンロードし# ファイルをオフラインでの閲覧に適したものにする。# ファイル取得の間に5*0.5から5*1.5秒のランダムな待ち時間を設ける。# ファイル取得に失敗したときには7回まで取得を試みる。# その際には14秒ずつ間を空ける。# アクセス結果をローカルのファイル"myLog.log"に記録する。wget -t 7 -w 5 --waitretry=14 --random-wait -m -k -K -e robots=off http://www.oreilly.com/catalog/upt3/errata/ -o ./myLog.log
# ローカルのファイル"my_movies.txt"に一行ごとに記述されたリンクのみを取得する。 # ファイル取得の間に15秒から45秒のランダムな間隔をあける。# ファイル取得に失敗した場合には48秒の間隔をあけて22回まで再試行する。# user-agentは全く送信しない。ロボット排除は無視する。# 取得した全てのファイルを"/movies"ディレクトリに保存し、# 全てのアクセス結果を"my_movies.log"という名のローカルファイルに保存する。# 名前のわかった特定の画像もしくはその他のファイルだけをダウンロードする場合に適する。wget -t 22 --waitretry=48 --wait=30 --random-wait -e robots=off -o ./my_movies.log -P/movies -i ./my_movies.txt
# Wgetをレファラーとクッキーで保護されたコンテンツをダウンロードするのに用いる。# 1. ベースとなるURLを取得しそのクッキーをファイルに保存する。# 2. 保存されたクッキーを利用して保護されたコンテンツを取得する。wget --cookies=on --keep-session-cookies --save-cookies=cookie.txt http://first_pagewget --referer=http://first_page --cookies=on --load-cookies=cookie.txt --keep-session-cookies --save-cookies=cookie.txt http://second_page
# ウェブサイトをミラーしローカルでの閲覧のための静的なコピーを作る。# つまり、全てのリンクはローカルのファイルを示すように変換される。# 注:--html-extension はCGI、ASPあるいはPHPにより生成されたファイルをHTMLに変換する。wget --mirror -w 2 -p --html-extension --convert-links -P <dir> http://www.yourdomain.com
主要なコマンドラインオプション
- -r, --recursive
- 再帰的なダウンロード
- -A, --accept=LIST
- ダウンロードするファイル名の指定
- -D, --domain=LIST
- ドメイン名の絞り込み
- -O FILE
- 出力先のファイル名指定、"-O - "で標準出力への出力
- -V, --version
- バージョン情報を表示
- -h, --help
- ヘルプを表示
- -b, --background
- バックグラウンド モード
- --header=STRING
- HTTPヘッダの指定
- -e, --execute=COMMAND
- コマンドを実行(.wgetrcファイルと同じ形式)
著者と著作権
GNU WgetはHrvoje Nikšićによって書かれた。彼のほかDan Harkless、Ian Abbott、Mauro Tortonesiなど多くの人々がWgetに寄稿している。主要な寄稿者達は配布物に含まれるAUTHORSファイルにクレジットされている。その他多くの人々は配布物に含まれるChangelogに記載されている。現在、WgetはMicah Cowanによってメンテナンスされている。
Wgetの著作権はフリーソフトウェア財団に所属する。GNUソフトウェアに対する重要な寄稿全てに対して著作権譲渡を要求するというのがフリーソフトウェア財団のポリシーである。 [1]
歴史
初期
Wgetは同じ作者による以前のプログラムGeturlの後継である。Geturlの開発は1995年後半に始まった。James Burtonが以前Amiga用にAREXXで書いたGetURLというプログラムがあることに作者が気づいた後、名称はWgetに改められた。
Wgetは1990年代半ばに利用可能であったウェブダウンロードソフトウェアの間隙を埋めるものだった。 HTTPとFTPの両方のプロトコルで確実にファイルをダウンロードできるプログラムは一つもなかった。当時存在したプログラムは(NcFTPやdlのように)FTPのみ利用可能だったか(当時はまだ、どこででも利用できるようなものではなかった)Perlで書かれたものであった。Wgetは当時すでにあったプログラムの機能に刺激を受けてはいたが、それはHTTPとFTPの両方を利用可能にすることと、ユーザーがどのUnixシステムにもある標準的な開発ツールのみを用いてWgetをビルドできるようにすることを目標にしていた。
当時多くのUnixユーザーは、極端に遅い大学とダイヤルアップ接続のインターネット接続に苦しんでおり、これが、操作する人間からの補助なしに一過性のネットワーク障害に対処できるダウンロードエージェントに対するニーズを増大させていた。
主なリリース
以下に挙げるリリースはWgetの開発において重要な節目となるものである。それぞれのリリースに隣接して掲載している機能は簡潔さを旨として編集されており、当該リリースに関する網羅的情報ではない。そのような情報はWgetとともに配布されているNEWSファイルに掲載されている。 [2].
- Geturl 1.0 (1996年1月リリース) 最初の一般公開である。英語での最初の告知は このネットニュースへの投稿までたどることができる。これは恐らくは6月にリリースされたGeturl 1.3.4に関するものである。
- Wget 1.4.0 (1996年11月リリース)Wgetの名を冠した最初のリリースである。これは同時にGPLの下で配布された最初のリリースでもある。Geturlはアドホックな無保証のライセンスの下で配布されていた。
- Wget 1.4.3 (1997年2月リリース)著作権をフリーソフトウェア財団に譲渡してGNU projectの一部としてリリースされた最初の版である。
- Wget 1.5.3 (1998年9月リリース)このプログラムの人気において節目となった。この版は多くのLinuxディストリビューションに同梱され、より多くの人々の目に触れるようになった。
- Wget 1.6 (1999年12月リリース)当時新鮮でなくなっていたリリース1.5.3に多くのバグフィックスを加えた。Dan Harklessの尽力に多くを負っている。
- Wget 1.7 (2001年6月リリース)SSLサポート、クッキー及び持続的接続を導入した。.
- Wget 1.8 (2001年12月リリース)帯域幅調整、新しい進行状況表示及びハイパーリンクグラフの幅優先探索を追加した。
- Wget 1.9 (2003年10月リリース)実験的なIPv6のサポート及びHTTPサーバへのデータPOST機能を導入。
- Wget 1.10 (2005年6月リリース)2GiBを超えるファイルのサポート、dual-familyシステムでのIPv6サポート、NTLM認証、及び SSL関連の改良が行われた。Mauro Tortonesiがメンテナを引き継いだ。
- Wget 1.11 (2008年1月リリース)GPLバージョン3へ移行した。CGIスクリプトでダウンロードするファイルの名称を示すためにしばしば用いられる
Content-Dispositionヘッダへの予備的なサポートを追加した。HTTP認証に関するコードにセキュリティ関連の改良が加えられた。Micah Cowanがプロジェクトのメンテナを引き継いだ。 - Wget 1.12 (2009年9月リリース)ウェブ上のCSSからのURL解析機能と国際化資源識別子(IRI)の取り扱いが追加された。
開発とリリースのサイクル
Wgetの開発はオープンな流儀で行われている。ほとんどの設計上の決定は、通常はユーザーと開発者が参加する公開のメーリングリスト[3]で行われている。バグリポートとパッチも同じメーリングリストに流される。
ソースの投稿
Wgetのコードやドキュメンテーションを投稿する際に好まれる方法はdiffユーティリティによって生成されるテキストのパッチの形でソースを更新することである。パッチをWgetに含めようとする場合は、メーリングリスト[4]に投稿されメンテナによってレビューされる。メンテナの検査を通過したパッチはソースに加えられる。パッチの作り方とスタイルのガイドラインはプロジェクトのwiki[5]に概略が示されている。
ソースコードは、リリース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ライブラリにリンクされたバイナリの配布を許可するという特別な例外をつけて配布されている。例外規定は以下の通りである:[2]
Additional permission under GNU GPL version 3 section 7
If you modify this program, or any covered work, by linking or combining it with the OpenSSL project's OpenSSL library (or a modified version of that library), containing parts covered by the terms of the OpenSSL or SSLeay licenses, the Free Software Foundation grants you additional permission to convey the resulting work. Corresponding Source for a non-source form of such a combination shall include the source code for the parts of OpenSSL used as well as that of the covered work.
WgetがGnuTLSライブラリにリンクできるように改良された際にはこの例外規定が削除されることが期待されている。
Wgetの ドキュメンテーションは Texinfoリファレンスマニュアルの形態で、GNU Free Documentation Licenseバージョン1.2以降の条件で配布されている。通常Unixライクなシステムで配布されているman pageはTexinfoマニュアルのサブセットから自動的に生成され、同じライセンスが適用される。
国際化
WgetはGNU gettextによる国際化に対応している。Unixライクなシステムでは環境変数を適切に設定することで母語を表示させることができる。Wget-1.12では日本語を含め30以上の言語に対応している。
関連項目
外部リンク
脚注
| GNUプロジェクト | ||
|---|---|---|
| 歴史 | GNU宣言 · GNUプロジェクト · フリーソフトウェア財団 · フリーソフトウェアの定義 · フリーソフトウェアの歴史 | |
| GNUライセンス | GNU General Public License · GNU Lesser General Public License · Affero General Public License · GNU Free Documentation License · GPLリンク例外 | |
| ソフトウェア | GNU(GNU派生) · Hurd · GNOME · Gnuzilla · Gnash · Bash · GCC · GNU Emacs · glibc · Gnulib · Coreutils · GNUstep · Autotools · Bazaar · LilyPond · GNUパッケージの一覧 | |
| 代表者 | Robert J. Chassell · Loïc Dachary · Ricardo Galli · Georg C. F. Greve · Federico Heinz · Benjamin Mako Hill · Bradley M. Kuhn · エベン・モグレン · リチャード・ストールマン · John Sullivan · Leonard H. Tower Jr. | |
カテゴリ: ウィキポータルFLOSSの関連記事 | GNUプロジェクト | オープンソース | クロスプラットフォームのソフトウェア | ネットワークソフト
