GNU Wget

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
GNU Wget
Wget-screenshot.png
Linux上で動くwget
開発元 GNU
最新版 1.15 / 2014年01月19日(8か月前) (2014-01-19 [1]
プログラミング言語 C言語
対応OS AmigaOS
BSDOS
Linux
Mac OS X
Windows
OpenVMS
Unix系OS
プラットフォーム クロスプラットフォーム
対応言語 アイルランド語、イギリスの英語、イタリア語、インドネシア語、ウクライナ語、英語、エストニア語、エスペラント後、オランダ語、カタルーニャ語、ガリシア語、ギリシア語、クロアチア語、スウェーデン語、スペイン語、スロバキア語、スロベニア語、セルビア語、チェコ語、中国語(台湾、中国)、デンマーク語、ドイツ語、トルコ語、日本語、ノルウェー語(ブークモール)、バスク語、ハンガリー語、フィンランド語、フランス語、ブルガリア語、ベトナム語、ヘブライ語、ベラルーシ語、ポーランド語、ポルトガル語(ブラジル、ポルトガル)、リトアニア語、ルーマニア語、ロシア語
サポート状況 開発中
種別 ダウンロードマネージャ
ライセンス GNU General Public Licensev3+[2]
公式サイト www.gnu.org/software/wget/
テンプレートを表示

GNU Wget(あるいは単に Wget)はウェブサーバからコンテンツを取得するコンピュータープログラムであり、GNU Projectの一部である。その名称はWorld Wide Webと(プログラムの主要な機能である)getから派生したものである。現在Wgetはウェブ閲覧のために用いられるTCP/IPに基づいたもっともポピュラーなプロトコルである、HTTPHTTPS及びFTP によるダウンロードが利用可能である。

Wgetの特徴としては、再帰的ダウンロード、ローカルに取得したHTMLをオフラインで閲覧するためのリンクの変換、プロキシのサポートその他数多くの機能を挙げることができる。Wgetは1996年に、ウェブの人気の急拡大と軌を一にして登場した。その結果多くのUNIXユーザーに用いられるようになり、ほとんどの主要なLinuxディストリビューションとともに配布されるようになった。移植性の高いC言語によって書かれているため、WgetはいずれのUnix系システムにも容易にインストールできる。またMac OS XWindowsOpenVMS及びAmigaOSを含む多くの環境に移植されている。

WgetはGNOMEデスクトップにおけるGWgetKDEデスクトップにおけるKGetのようなGUIプログラムの基礎として用いられている。Wgetはフリーソフトウェアである。

特徴[編集]

確実性[編集]

Wgetは低速あるいは不安定なネットワーク接続でも確実に動作するように設計されている。もしダウンロードネットワークの問題によって完了しなかった場合、Wgetは自動的にダウンロードが停止した箇所からダウンロードを継続するように試み、ファイル全体が取得されるまでこれを繰り返す。Wgetは、この機能を利用するため、当時としては新しかったRangeHTTPヘッダをもっとも早期に採用したクライアントの一つとなった。

再帰的ダウンロード[編集]

Wgetをクローラとして動作させることも可能である。クローラとして動作するとき、Wgetは、リソースのハイパーリンクをHTMLウェブページから抽出し、それらを連続してダウンロードし、ユーザーによって指定された最大繰り返しの回数に達するまで再帰的に繰り返す。ダウンロードされたページは、リモートのサーバのディレクトリ構成に類似したディレクトリ構成に保存される。この「再帰的ダウンロード」はHTTPによるウェブサイトの部分的もしくは完全なミラーリングを可能にする。Wgetは、ダウンロードされたHTMLページ内のリンクを、オフラインでの閲覧のため、ローカルにダウンロードされた素材に向けられるよう調整することもできる。この種のウェブサイトの自動的ミラーリングを行うときには、(ユーザーがオプションとして-e robots=offを指定しない限り)Wgetは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系環境やシステムに移植されている。それはWindows及びMac OS Xなどを含んでいる。

その他の特徴[編集]

  • Wgetはプロキシ経由でダウンロードを行える。プロキシは会社のファイアーウォール内部からのウェブアクセスを可能にするためや頻繁にアクセスされるコンテンツをキャッシュし速く提供するために広く用いられている。
  • Wgetは持続的HTTP接続が利用可能な場合にはそれを利用する。
  • 適切なインタフェースが含まれているシステムにおいてはIPv6が利用できる。
  • OpenSSLライブラリを利用し、暗号化されたダウンロードを行うためにSSL/TLSが利用できる。
  • 適切なインタフェースが含まれている32ビットシステムでは2GiBより大きいファイルもサポートされている。
  • 利用可能な帯域幅すべてを使い尽くすことを避けるため、ダウンロードの速度を調整することができる。

Wgetの使い方[編集]

基本的な使い方[編集]

URLを(1つ以上)引数にして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_page
wget --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はGiuseppe Scrivanoによってメンテナンスされている。

Wgetの著作権はフリーソフトウェア財団に所属する。GNUソフトウェアに対する重要な寄稿全てに対して著作権譲渡を要求するというのがフリーソフトウェア財団のポリシーである。 [1]

歴史[編集]

初期[編集]

Wgetは同じ作者による以前のプログラムGeturlの後継である。Geturlの開発は1995年後半に始まった。ところが作者は、以前James BurtonがAmiga用にAREXXで書いたGetURLというプログラムがあることに気づいた。その後、名称はWgetに改められた。

Wgetは1990年代半ばに利用可能であったウェブダウンロードソフトウェアの間隙を埋めるものだった。 HTTPFTPの両方のプロトコルで確実にファイルをダウンロードできるプログラムは一つもなかった。当時存在したプログラムは(NcFTPdlのように)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 1.13 (2011年8月リリース)HTTP/1.1がサポートされた。またいくつかの移植性に関する問題が修正された。セキュアな接続のためのライブラリとしてOpenSSLに代え、デフォルトでGnuTLSを利用するように変更された[3]

開発とリリースのサイクル[編集]

Wgetの開発はオープンな流儀で行われている。ほとんどの設計上の決定は、通常はユーザーと開発者が参加する公開のメーリングリスト[3]で行われている。バグリポートとパッチも同じメーリングリストに流される。

ソースの投稿[編集]

Wgetのコードやドキュメンテーションを投稿する際に好まれる方法はdiffユーティリティによって生成されるテキストのパッチの形でソースを更新することである。パッチをWgetに含めようとする場合は、メーリングリスト[4]に投稿されメンテナによってレビューされる。メンテナの検査を通過したパッチはソースに加えられる。パッチの作り方とスタイルのガイドラインはプロジェクトのwiki[5]に概略が示されている。

ソースコードは、リリース1.5.3に始まる改訂の歴史を保存するリモートバージョンコントロールリポジトリで追跡することができる。リポジトリはMercurialで管理されている。以前はSubversion、さらにその前はCVSで管理されていた。

リリース[編集]

開発中に十分な数の機能あるいはバグフィックスが集積したときに、WgetはGNUのFTPサイト及びそのミラーサイトを通じて一般に公開される。プロジェクトは完全にボランティアによって運営されているので、リリースを発表することについて外部からの圧力はなく、強制力のあるリリースの締め切りもない。

リリースにはメジャー.マイナー.リビジョンという形式でバージョンナンバーが振られている。(例)Wget 1.11Wget 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以上の言語に対応している。

関連項目[編集]

外部リンク[編集]

脚注[編集]

  1. ^ 配布物件のPGP署名”. 2014年1月19日閲覧。
  2. ^ a b README file”. 2010年6月19日閲覧。
  3. ^ コンパイル時のオプション指定でOpenSSLを使用するように指定することはこのバージョン以降でもまだ可能である。