Warcworkerでwarcファイルを保存する。

はじめに

ウェブサイトは無常であるとつくづく思います。

今日は当たり前にあるものが、明日は無くなっているのです。

今日は容易に手にすることができる先人の知見が、明日になると突如インターネットから削除されていたりすることが当たり前の世界です。

私たちは今日、たまたまその知見を手にすることができましたが、未来ある若者がその分野を研究したいと思ったとき、以前は存在したであろう(リンク切れの)ウェブサイトの幻影に泣かされるのはとても悲しいことです。

インターネット上のコンテンツは無数にあり、そのすべてを補足しアーカイブするのは現代では不可能でしょう。

そうなると情報の取捨選択をすることとなりますが、一見して無用と思える情報でもアーカイブすべきです。

「この情報は無用だからアーカイブする必要はない」と判断するのは現代を生きる私たちではありません。

その情報は歴史という舞台に立たされ、時間的に俯瞰して意味・解釈を与えられ、正当性の判断を仰ぐべきです。

また、学術的にある分野の研究をするにあたり、その取捨選択で捨てられた1つのウェブサイトの有無によって、研究の結果が大きく左右される場合もあるでしょう。

そういう意味では無用な情報などありません。

要するに全部保存したいので、その一助となるべく、ここではwarcファイル形式でウェブサイトを保存する(イメージ的には「魚拓をとる」)方法をご紹介します。

知識として、Linux、Docker等に精通している読者を対象とします(筆者もそこまで詳しくありません)。

同様のツールとして、wgetやheritrixが挙げられます。

ここで敢えてWarcworkerをご紹介する理由としては、wgetやheritrixと比べて

  • Squidwarc(headless Chrome)でウェブサイトのデータを取得しているので再現性が高い(ように感じた)

ことが理由です。(Heritrixは遅いしbeansとかよくわからんし、wgetは--page-requisitesつけてもなんか再現性が低い気がしたし)

warcファイル形式とは

warcファイル形式とは、DNSに対する名前解決の情報、HTTPヘッダ及びボディの情報など、私たちがウェブサイトを閲覧するにあたって取得している情報のすべてをアーカイブして、完璧に再現することを可能にすることを目的としたデータフォーマットです。

有名なところではInternet Archiveがこの形式でデータを収集・保存しています。 archive.org

詳しくは後日記事にしたいと思います。

準備

Warcworker

作者さんのgithubです。

素晴らしいものをオープンソースで公開されています。

基本的にここに書いてあること(なんとたったの一行のコマンド)を行えば使えるようになります。 github.com

環境

$ cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

CentOS8.2で試しました。

手順

$ sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo dnf install docker-ce docker-ce-cli
$ sudo systemctl start docker
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ git clone https://github.com/peterk/warcworker.git
$ cd warcworker/
$ nano .env_example #開いただけで何も弄ってない
$ cp .env_example .env
$ sudo docker-compose up -d --scale worker=3

ここでDockerのAlpine Linuxがベースイメージ的な何かから、APKでダウンロードできない的なエラーが出たのですが、 qiita.com を参考にして

$ sudo firewall-cmd --add-masquerade --permanent
$ sudo firewall-cmd --reload

と、firewalldを弄った後に

$ sudo docker-compose up -d --scale worker=3

を実行すると無事にDNSで名前解決してくれて終了しました。

ここまで来れば、作業中のCentOSIPアドレス(またはホスト名)の5555番ポート
(例)http://192.168.0.1:5555/
へアクセスすれば以下のような画面が表示されるはずです。

f:id:turuun:20201110233219p:plain
warcworker

おめでとうございます。

URLs to archiveのボックスへURLを入力し、下のStart archivingを押せばアーカイブされます。

ちなみに

Warcworkerはクローラーではなく、単一のウェブサイトについてwarcファイルで保存する(最初も述べたようにいわゆる魚拓をとる)ソフトウェアとなります。

自動で巡回させて全体のアーカイブを取るには、クローラーを別途作成する必要があります。

その場合も、HTTP(POST)で対象URLを送信することができます。

おわりに

この記事は、技術的なWarcworkerの導入手順の説明が全くできていませんね。。。

なんなら個人的な思いが占めすぎていて気持ち悪い記事になっています。

もやもやした思いをWarcworkerの使い方を紹介するという口実に乗じて吐き出しました。

warcファイル形式はISOで標準化されており、現在発行されているものとほぼ同等の草稿はググればでてきますので興味のある方はぜひご覧ください。

warcファイルを保存したとなれば、今度はwarcファイルを再生(閲覧)しなければなりません。

再生の方法についてはまた日を改めてご紹介したいと思います。

warcファイルに関する日本語の情報は、国会図書館、qiita、2ch程度にしか無いように思えますが、この類の情報を集めるには英語が必須となっているので日本語の情報が少ないのでしょうか。

アーカイブに関する日本語のリソースが増える一助になれればと思い、暇が有れば私の知るところの情報を掲載できればなと思っています。