気に入ったウェブサイトがあるならバックアップを取ろう:Webコンテンツをアーカイブするための実践ガイド

気に入ったウェブサイトがあるならバックアップを取ろう:Webコンテンツをアーカイブするための実践ガイド

さまざまなツールを使って、お気に入りのWebページを効果的に保存する方法を学びましょう。

Webコンテンツをバックアップすることの重要性は、かつてないほど高まっています。数え切れないほどのウェブサイトが消滅したりポリシーを変更したりしている現在、お気に入りのページをアーカイブする方法を知っておくことで、貴重な情報の損失を防ぐことができます。

なぜWebコンテンツをアーカイブするのか?

かつて素晴らしいコンテンツに繋がっていたリンクが、今や404エラーを返すのを見て悔しい思いをした経験は、多くの人にあるはずです。これはドメインの期限切れ、プラットフォームの閉鎖、あるいはウェブサイトのポリシー変更などによって発生します。単にページをブックマークするだけでは不十分です。リンク切れが起きたり、コンテンツ自体が消滅したりする可能性があるからです。アーカイブを作成しておけば、お気に入りのWebコンテンツを将来の参照用に確実に保存できます。

Webコンテンツをアーカイブするためのツール

Webコンテンツのアーカイブにはいくつかのツールが利用可能です。ここでは人気の3つの選択肢を紹介します:

  1. monolith: このコマンドラインツールは、必要なすべてのCSS、画像、JavaScriptを含めて、Webページを単一のHTMLファイルとして保存します。これにより、インターネット接続がなくてもアーカイブされたページをオフラインで簡単に閲覧できます。

  2. wget: Webからファイルをダウンロードできる強力なコマンドラインユーティリティです。ウェブサイト全体をミラーリングできるため、静的サイトのバックアップに適しています。

  3. ArchiveBox: さまざまな形式でWebコンテンツをアーカイブする、オープンソースのセルフホスト型ツールです。ウェブサイト全体、個々のページ、またはリンクのコレクションを保存でき、アーカイブ内を検索するための使いやすいインターフェースを提供します。

適切なツールの選択

アーカイブを始める前に、何を保存したいかを決めることが不可欠です。以下に簡単なガイドを示します:

  • 単一ページ: 次を使用: monolith またはSingleFileブラウザ拡張機能。Webページ全体をスタンドアロンのHTMLファイルとして保存できます。
  • 静的サイト全体: 次を使用: wget --mirror 。サイト全体をダウンロードできます。長期保存にはWARC(Web ARChive)形式を含めることが推奨されます。
  • 検索機能を備えた長期コレクション: セルフホストのArchiveBoxインスタンスをセットアップして、Webコンテンツの検索可能なアーカイブを作成します。

wgetを使用してウェブサイトをミラーリングする方法

ウェブサイトをミラーリングするために wgetを使用する場合は、次の手順に従います:

ステップ 1: wgetのインストール

もし wget がインストールされていない場合は、簡単に追加できます。macOSでは、パッケージマネージャーを使用してインストールできます。

ステップ 2: バックアップスクリプトの作成

シンプルなスクリプトを作成してバックアッププロセスを自動化できます。以下はそのサンプルスクリプトです:

#!/usr/bin/env bash
# mirror-site.sh - backup một site tĩnh, kèm file WARC
set -euo pipefail
URL="$1"
NAME=$(echo "$URL" | sed -E 's#https?://##; s#/.*##')
DATE=$(date +%Y%m%d)
OUT="$HOME/web-archive/$NAME/$DATE"
mkdir -p "$OUT"
cd "$OUT"
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent --wait=1 --random-wait --limit-rate=500k --user-agent='Mozilla/5.0 (personal-archive)' --warc-file="$NAME-$DATE" --warc-cdx "$URL"
echo "Xong: $OUT"
du -sh "$OUT"

ステップ 3: スクリプトの実行

アーカイブしたいウェブサイトのURLを渡してスクリプトを実行します:

bash mirror-site.sh https://example.com

monolithによる個別ページのアーカイブ

個別ページ(特にサイトマップを持つブログなど)をアーカイブしたい場合は、 monolithを使用できます。手順は以下の通りです:

ステップ 1: monolithのインストール

必ず monolith がインストールされていることを確認してください。インストール手順は公式ウェブサイトに掲載されています。

ステップ 2: アーカイブ用スクリプトの作成

以下は、サイトマップに記載されたページをアーカイブするためのPythonスクリプトです:

#!/usr/bin/env python3
# archive_sitemap.py - Python 3.10+, cần: pip install requests
import hashlib
import subprocess
import sys
import time
import xml.etree.ElementTree as ET
from pathlib import Path
import requests

NS = {"sm": "http://www.sitemaps.org/schemas/sitemap/0.9"}
OUT_DIR = Path.home() / "web-archive" / "pages"

def get_urls(sitemap_url: str) -> list[str]:
    resp = requests.get(sitemap_url, timeout=30)
    resp.raise_for_status()
    root = ET.fromstring(resp.content)
    if root.tag.endswith("sitemapindex"):
        urls = []
        for loc in root.findall("sm:sitemap/sm:loc", NS):
            urls.extend(get_urls(loc.text.strip()))
        return urls
    return [loc.text.strip() for loc in root.findall("sm:url/sm:loc", NS)]

def archive(url: str) -> None:
    key = hashlib.sha1(url.encode()).hexdigest()[:12]
    target = OUT_DIR / f"{key}.html"
    if target.exists():
        print(f"[skip] {url}")
        return
    result = subprocess.run(["monolith", url, "-j", "-I", "-o", str(target)], capture_output=True, text=True, timeout=120)
    status = "ok" if result.returncode == 0 else "FAIL"
    print(f"[{status}] {url} - {target.name}")
    with open(OUT_DIR / "index.tsv", "a") as f:
        f.write(f"{key}\t{status}\t{url}\n")

if __name__ == "__main__":
    OUT_DIR.mkdir(parents=True, exist_ok=True)
    for u in get_urls(sys.argv[1]):
        archive(u)
        time.sleep(2)

ステップ 3: スクリプトの実行

スクリプトを実行するには、次のコマンドを使用します:

python3 archive_sitemap.py https://example.com/sitemap.xml

ArchiveBoxによる自動化

より大量のリンクコレクションには、ArchiveBoxが非常に役立ちます。セットアップ手順は以下の通りです:

ステップ 1: ArchiveBoxのインストール

Dockerを使用してArchiveBoxをセットアップできます。専用のディレクトリを作成し、以下を実行します:

mkdir -p ~/archivebox/data
cd ~/archivebox
curl -fsSL 'https://docker-compose.archivebox.io' -o docker-compose.yml
docker compose run archivebox init --setup
docker compose up -d

個別のリンク、またはリンクをまとめたファイルを追加できます:

docker compose run archivebox add 'https://example.com/article'
docker compose run archivebox add ~/links.txt

ステップ 3: バックアップの定期実行設定

cronジョブを使用してアーカイブプロセスを自動化できます。たとえば、毎週日曜日の午前3時にバックアップを実行するには次のようにします:

0 3 * * 0 /home/user/bin/mirror-site.sh https://example.com/blog/ /var/log/mirror.log 2>&1

まとめ

貴重な情報が消滅するのを防ぐために、Webコンテンツのアーカイブは不可欠です。wget、monolith、ArchiveBoxなどのツールを使用することで、お気に入りのウェブサイトを効果的にバックアップし、将来にわたってアクセス可能な状態を維持できます。

メリット

  • リンク切れやドメインの期限切れによるデータ損失を防ぎます。
  • アーカイブされたコンテンツにオフラインでアクセスできます。
  • 情報を簡単に検索・取得できるアーカイブを提供します。

デメリット

  • セットアップおよび使用には一定の技術的知識が必要です。
  • アーカイブするコンテンツの量によっては、多大なストレージ容量を消費する可能性があります。
  • バックアップが使用可能であることを確認するために、定期的な保守と点検が必要です。

注意

この記事は教育目的のものです。これらのコマンドを実行する際は、プレースホルダーの値を実際のデータに必ず置き換えてください。また、情報に依拠する前に、必ず元のソースと照らし合わせて検証してください。

よくある質問

  • Webアーカイブとは何ですか? — Webアーカイブとは、将来のアクセスのためにWebコンテンツを収集・保存し、保持するプロセスのことです。
  • なぜウェブサイトのバックアップを取る必要があるのですか? — ウェブサイトのバックアップを取ることで、リンク切れ(リンクの腐朽)、ドメインの期限切れ、プラットフォームの変更による貴重な情報の損失を防ぐことができます。
  • Webコンテンツのアーカイブにはどのようなツールが使えますか? — 代表的なツールにはwget、monolith、ArchiveBoxなどがあります。
  • wgetを使用してウェブサイトをミラーリングするにはどうすればよいですか? — wget --mirror と各種オプションを使用して、ウェブサイト全体をダウンロードできます。
  • WARC形式とは何ですか? — WARC(Web ARChive)は、長期保存のためにWebページとそれに関連するメタデータを格納するために使用されるファイル形式です。
  • JavaScriptでレンダリングされるウェブサイトもアーカイブできますか? — はい、ただしJavaScriptを処理できるSingleFileやArchiveBoxのようなツールが必要になる場合があります。
  • アーカイブプロセスを自動化するにはどうすればよいですか? — cronジョブを使用してお気に入りのウェブサイトの定期的なバックアップをスケジュールできます。
  • 3-2-1バックアップルールとは何ですか? — 3-2-1ルールとは、データのコピーを3つ保持し、2種類の異なるストレージを使用し、そのうち1つをオフサイト(別の場所)に保存することを推奨するルールです。

タグ

#webdev #archiving #selfhosted #devops #backup #wget #monolith #ArchiveBox #datarecovery #webpreservation

Free field guide

Prompt-Injection Defense Checklist

The controls that actually reduce the blast radius when your app feeds untrusted text to an LLM. Enter your email — you'll get the PDF instantly, plus new posts on AI, security & Linux.