世界最大級のコミュニティSNSであるRedditは2005年に始まり、2024年12月時点で23.8億件もの膨大な投稿が蓄積されています。これらの過去の全ての投稿をローカルに保存してオフラインで閲覧・全文検索可能にするツール「Redd-Archiver」が公開されています。

19-84/redd-archiver: A PostgreSQL-backed archive generator that creates browsable HTML archives from link aggregator platforms including Reddit, Voat, and Ruqqus.

https://github.com/19-84/redd-archiver

◆デモサイト

Redd Archive - Browse 9,592 Posts Across 3 Communities

https://online-archives.github.io/redd-archiver-example/



◆Redd-Archiverの特徴

・JavaScriptを使用せずHTMLとCSSのみで構成

・ライトモード、ダークモード対応

・レスポンシブデザインによりPCでもスマホでも閲覧可能

・キーボードナビゲーションおよびスクリーンリーダーに対応

・保守・拡張用に18個の専用モジュールを用意

・REST APIやMCPによる投稿やコメント取得など、プログラムからアクセスできる30以上のエンドポイント

・Torでの利用を想定した設計

・PostgreSQLを用意することで全文検索が可能

・すでに閉鎖されているVoatやRuqqusのアーカイブにも対応

◆インストール方法

今回はWindowsにDocker DesktopとGit for WindowsのGit Bashを用意した環境で構築します。作業フォルダでRedd-Archiverのリポジトリをクローンします。


git clone https://github.com/19-84/redd-archiver.git


redd-archiverフォルダに移動し、空のデータフォルダを作成。


cd redd-archiver
mkdir -p data output/.postgres-data logs tor-public


環境設定ファイル「.env」を「.env.example」からコピーします。


cp .env.example .env


.envファイルをテキストエディタで開き「POSTGRES_PASSWORD」を指定し、その他の設定値も必要に応じて変更します。


POSTGRES_PASSWORD="任意の文字列"


コンテナを起動します。


docker compose up -d


コンテナが起動したらブラウザで「http://localhost」にアクセスします。初期ページが表示されればツールの用意は完了です。



元になるRedditの2005年6月から2024年12月までの全ての投稿データはAcademic Torrentsに公開されています。「サブレディット」と呼ばれるテーマやコミュニティごとに分けられたZSTファイルが約8万ほどあるためqBittorrentなどTorrentが利用できるダウンローダーでマグネットリンクからファイルを取得しました。


magnet:?xt=urn:btih:1614740ac8c94505e4ecb9d88be8bed7b6afddd4


qBittorrentを起動し「リンク追加」ボタンからマグネットリンクを入力し「ダウンロード」をクリック。



ファイルの一覧が表示されるので、1つのサブレディットの元の投稿とコメントのセットのデータを選択、保存先をredd-archiverフォルダ下のdataフォルダに設定して「OK」をクリック。



ダウンロードが完了したら「YOUR_SUBREDDIT」部分をダウンロードしたサブレディット名に置き換え以下の生成用コマンドを実行します。


docker compose exec reddarchiver-builder sh -lc \
'uv run python reddarc.py /data/reddit/subreddits24 \
--subreddit YOUR_SUBREDDIT \
--comments-file /data/reddit/subreddits24/YOUR_SUBREDDIT_comments.zst \
--submissions-file /data/reddit/subreddits24/YOUR_SUBREDDIT_submissions.zst \
--output /output'


エラーが発生する場合は、以下のコマンドを実行してから再度生成用コマンドを実行してください。


docker compose exec reddarchiver-builder sh -lc 'uv remove playwright && \
touch /app/README.md'


今回は1つのサブレディットについて、116MBのファイル容量で約63万件の投稿を含むアーカイブを処理します。



作業が完了し、それぞれの作業の内訳が出力されています。今回は約33分程かかりました。



ブラウザで「http://localhost/」を更新すると、今回作成したアーカイブの統計情報が表示されます。サブレディット名をクリックすると…



投稿のリストが表示されるので、見たい投稿名をクリック。



投稿内容やコメントが確認できます。



検索を行うためページ上部の「search」をクリック。



検索ページが表示されるので検索したいキーワードを入力して「search」をクリックすると、キーワードを含む投稿のリストが表示されます。



データベースの仕様として日本語での検索は正しく行えず、「富士山」に対して「富士山」で検索すれば抽出されますが「富士」で検索しても抽出されませんでした。



なお、見積もりとして100GB分の投稿データのZSTファイルはHTML化すると1.5TBになり、データベース用には160GBの容量が必要とのことです。Redd‑Archiverでは適度に分散させたインスタンスを用意することを推奨しています。