「Google Drive 配信からCloudflare R2 配信 へ完全移行」という記事を書いたのだが、各試験の問題文と解答(PDF)をGoogle Drive 上に置き、BloggerからPDF へリンクを貼っていたことを忘れていた。
・このデータについても今回Cloudflare R2 に移行した。
・記事のリンクも Drive URL から R2 URL へ差し替えた。
以前のデータと合わせて全部で2Gbyte程度をCloudflare R2 に移行することができた。
背景・方針
- PDF は大量(1 アプリあたり 4〜139 本、合計 1000 本超)。
- R2 は既存バケットを流用。試験画像と混ざらないよう各アプリ配下に
pdf/サブフォルダを切る - 今後 Drive は使わない。追加 PDF は最初から R2 へ直接アップする運用に切り替え。
- R2 上のファイル名は Drive のファイル ID をそのまま採用
つまずきポイント
- 公開ページから本文が取れるか:固定ページの本文は
<div class='entry-content' id='in-target'>に入っており、curlで取得・抽出できた。これにより記事 HTML を手でコピーする手間が消えた(入力側の自動化)。 - 小さい PDF の誤検知:数 KB〜十数 KB のファイルを警告 HTML と疑ったが、
fileで確認すると 2 ページの解答 PDF など正規のものだった。サイズだけで判断しない。 - Drive に実体がないリンク:9 本が 404(元から切れていたリンク)。
set -eで停止していたため、404 をスキップして続行するようパッチ。
手順の全体像
- 目次ページから「フォルダ名 ↔ 記事 URL」の対応表(
apps.tsv)を用意。 - 各記事を
curlで取得 → 本文in-targetを抽出 → Drive ID を列挙。 rclone backend copyidで Drive から実体 PDF をダウンロード(ID 名で保存)。rclone copyでr2:zehtaapps-images/<APP>/pdf/へアップロード。- 本文中の Drive URL を R2 URL に置換し、本文だけの HTML を
html_out/<APP>.htmlに出力。 pbcopyでコピーして各記事の HTML ビューに貼り戻し(手作業)。
今後の運用
追加 PDF(1 回あたり 2 本程度)は Drive を経由せず R2 へ直接アップ。記事には R2 URL を直接書く。
結果
- 53 アプリ全ての PDF を R2 へ移行完了。
- 全記事の Drive リンクを R2 URL へ差し替え、リンク切れゼロを確認。
- 元から実体のなかった Drive リンク 9 本は記事修正で解消。