本番で音が鳴らない講座を洗い出してR2へ上げ、R2の容量を10GB未満に整理した記録
本番で音が鳴らない講座を洗い出してR2へ上げ、R2の容量を10GB未満に整理した記録
lecture-06 は本番で鳴っているのか
ローカルで /lessons/computer/lecture-06 を開くと、読み上げが流れる。
本番では、たぶん鳴っていない。
そう思って、Claude Code に頼んだ。
ローカルには音声があるのに本番には無いものを全部洗い出し、本番でも聞けるようにしてほしい。
まずは、どこに不一致があるのかを知りたかった。
6,008本の不一致を、ページが使う分に絞る
本番の音声は R2 に置いてある。 Claude Code には、R2 にある音声の一覧を取る方法から探してもらった。 ローカルと突き合わせると、本番に無いファイルは6,008本あった。
そこから、実際にページが参照しているものだけに絞り込んでもらった。
公開済みの動画(財務諸表と CF)の音声285本は、すべて本番にそろっていた。 残ったのは computer 講座である。
洗い出しの結果、本番で見られるページなのに音が出ないのは、コンピュータのしくみ講座の全18講(lecture-01〜18)だけだった。 仮ナレーションの MP3 2,842本(186.4 MiB)が、R2 に1本も上がっていなかった。 ほかの不一致は、どれも本番ではまだ出していないものだった。
lecture-06 だけではなく、講座がまるごと無音だったことになる。 「y」と返して、2,842本を R2 へ上げてもらった。 本番のページで音が鳴るところまで確かめてから報告する、という段取りである。
アップロードの最中に R2 の容量を見直す
上げている最中に、R2 の容量が気になった。 ほかに削れるものは無かったか、と聞いた。 Claude Code に全バケットの中身を一覧させ、何がどれだけ場所を取っているかを集計させた。 前回の計画書にも、削減候補が残っていた。
フックのタイムアウトは PC の重さのせいではなかった
このメッセージを送ったとき、セキュリティ確認用のフック(security_reminder_hook.py)が30秒以内に終わらず、出力が捨てられたという知らせが出た。
メッセージ自体は届いていた。
Claude Code の最初の見立ては、裏で R2 へのアップロードが8本並列で走っているため、PC が重くなって Python の起動が遅れたのだろう、というものだった。 続くようならフックの timeout を延ばせば消える、という提案も添えられていた。
調べ直してもらうと、原因は別にあった。 Microsoft Store 版の Python 3.13 が壊れていて、フックがそれを起動しようとして毎回30秒以上待たされていた。
ストア版の Python 3.13 はアンインストールすることにした。 最初は Claude Code に頼もうとしたが、途中で、これは自分がやればいいのだと気づいた。 示された方法のうち1番で、スクリプトを自分で実行した。
アンインストール後の時間は Claude Code に測ってもらった。 Python を探す時間は次のように変わった。
python3.13:約50秒から0.1秒へpython3:約86秒から0.3秒へpython(3.11):これまでどおり0.2秒
残っている python3 は、Windows に最初から入っている「ストアを開くだけ」の小さなスタブである。
すぐ失敗して次の候補に移るので、問題にならないという。
次からフックはタイムアウトしないはずで、ファイルを編集するたびに待たされていた分もなくなるはずだ。
旧 WordPress のバケットは消せなかった
容量の件で片づけたかったのは、旧 WordPress のバケットである。 Drive と Dropbox の控えと突き合わせてから消す。 これには確か計画書があったはずなので、その計画書の進捗を更新しながら進めてほしいと頼んだ。
返ってきた答えは「消せませんでした」だった。 旧 WordPress のバケットは、いまも本番で使っているバケットだった。 退避と削除は止めてもらった。
代わりに3つを片づける
代わりに挙がった3つで進めてもらうことにした。
- Excel の動画の古い版16本(111.5 MiB)
- 書籍の図のバックアップ51件
- クイズの音声2,123本
古い動画16本と書籍の図のバックアップ51件は、控えを取って中身の一致まで確かめてもらった。 Excel の動画の古い版は、コードからの参照が0件であることと、控え2か所(作業フォルダと Dropbox の退避フォルダ)の中身が一致することを確かめてから削除してもらった。 新しい版は、本番で 200 が返る。
クイズ音声は、控えを取ったうえで変換し、R2 に上書きしてもらった。 上書きのあとに消す CDN キャッシュの準備も、待ち時間のうちに済ませてもらった。
上書きを待つあいだに lecture-06 が鳴った
クイズ音声の上書きを走らせている間に、本番の lecture-06 を確かめてもらった。
読み上げの MP3 が 206 で読み込まれ、intro-01 から intro-02 へ進んだ。
本番の lecture-06 でも、音が出るようになった。
途中で進捗を聞くと、上書きは2,123本中798本まで進んでいて、失敗は0件だった。 残りはあと20分ほどという見込みである。 終わったら教えてほしいと伝えて、待った。
上書きは、2,123本すべてが一致した。 キャッシュを消してから、本番のクイズページで「▶ 開始」を押して確かめてもらった。 問題文、正解音、解説の順に進んだ。
R2 の合計は9.68 GB
最後に、R2 の合計を測り直してもらった。
| 時点 | R2 の合計 |
|---|---|
| 作業前 | 10.11 GB |
| 作業後(computer 講座の音声186 MiB を足した後) | 9.68 GB |
computer 講座の音声を足したうえで、10 GB まで約0.32 GB の余裕が残った。
続きは自分の確認から
進捗は計画書(memo/2026-10-14/r2-tts-audio-slimming-plan.md)に記録してもらった。
冒頭の next: も「明日はご本人の確認から」に書き換わっている。
明日は、まず自分が確認するところから続きをやりたい。
そのための引き継ぎプロンプトは、ダウンロードフォルダのテキストファイル(handoff-r2-slim-2026-10-19.txt)に書き出させた。
学びメモ
- 本番で鳴らないページを1つずつ探す代わりに、R2 の一覧をローカルと突き合わせ、ページが参照する分に絞った。6,008本の不一致は、computer 講座の2,842本に行き着いた。
- フックのタイムアウトは、最初は並列アップロードの負荷と見立てられたが、実際はストア版 Python 3.13 の故障だった。timeout を延ばす前に、何を待たされているのかを調べてもらったので、原因そのものを取り除けた。
- 消すつもりで頼んだ旧 WordPress のバケットは、本番で現役だった。削除の前に止まり、代わりの3つで R2 を10 GB 未満に戻した。