2026年7月16日の開発日記 - Notion内部APIクロール3,000ページ超と語源アプリ本番公開、R2移行計画
2026年7月16日の開発日記
Fable 5のrate limitエラーが9件、連続で並んだ。コンテンツ生成8バッチは全滅に見えた。DBを確認すると、全部書き込み済みだった。エラーの数は、失敗の数ではなかったわけだ。朝イチの積み残し確認とGoogleタスクの断捨離で足場を作り、日中はNotionアーカイブの内部API再帰クロールをChromeタブで回し続けた。その裏で語源英単語アプリのミニテスト4択化と本番公開、書籍図版62,331件のR2移行のCodex委任と完走。夕方には今度はマークダウンの数式化バグを見つけて、115ファイルぶんの宿題を明日に残した。並列度の高い一日だった。
今日のタイムライン

今日やったこと
1. Notion自動アーカイブを内部API再帰クロールに切り替え
初期方針は「公式ZIP+内部API補完」の二本立てだった。これを捨てた。ZIPエクスポートではデータベースの中身が全部は取れないことを、過去に自分で経験していたからだ。内部API単体で完結させる路線に切り替えて入れ子DBの再帰取得と画像回収を実装させ、Chromeタブに常駐させたJavaScriptの自己監督ループで429を自動回避しながら、当日中に3,000ページ超・10万ブロック超を取得。クローラーは明日へ引き継ぐ形で安全停止した。
主な成果:
- 861ページの初回完走+常駐ループで+2,316ページ(残キュー4,757)
- 画像222/224枚を署名付きURLから回収
- path-traversal / SSRF のセキュリティレビューも実施
詳細: NotionアーカイブをZIP依存から内部API再帰クロールに切り替えた話
2. 語源英単語アプリ Phase 4 — D1本番適用とミニテスト4択化、本番公開
D1マイグレーション0007を本番適用し、Phase 4A(アトラス3859号)の英語コンテンツを359語まで進めた。rate limitの9連発はこの途中で起きた。並んだエラーと、書き込み済みのDB。信じるべきは後者だった。章末コーナーのレイアウト崩れを直し、ミニテストは自己申告の○×から4択即時判定(18章×5問=90問)に置き換えて、本番環境へのオープン化まで済ませた。
主な成果:
- D1マイグレーション0007の本番適用
- ミニテスト90問の4択化と履歴保持
- gogen-eitango の本番公開(デプロイ6.4分)
詳細: gogen-eitango Phase 4: D1本番適用と章末ミニテストの4択化
3. 書籍図版62,331件のCloudflare R2移行計画とCodex実装委任
book-knowledge-base の図版PNG 62,331件・2.96GBは、ローカルディスクが飛べばそれきりの単一障害点だった。R2移行の計画書で答えを出した。設計の分かれ目は、93,505件のDBレコードに焼き込まれたURLをどう扱うか。採ったのはサーバープロキシ方式である。Codexレビューで致命的指摘3件(検証フェーズ新設・rclone check強化・削除前の二次バックアップ)を反映し、実装本体はCodexに委任して同日中に完走させた。
主な成果:
- 計画書
figures-r2-migration-plan.mdの完成(レビュー済み) - 全62,331件のR2アップロード・rclone check全件照合(差分0)・Dropbox二次バックアップ・ローカル図版削除まで同日中に完了
- 残処理は Dropbox オンライン専用化の確認と移行用トークンの失効のみ
詳細: 62,331件の書籍図版をCloudflare R2へ移行する計画づくりとCodexへの実装委任
4. 積み残し確認とGoogleタスク7件の断捨離
朝イチで昨日分の積み残しを洗い出し、5分割コミットで完済。続けて開いたGoogleタスクは、7件中5件が3ヶ月前の起票だった。もうタスクリストではない。罪悪感の陳列棚である。復帰用の情報だけmemoに退避してから削除する方針で整理した。Notionの自動アカデミー計画にはGitHubプライベートリポジトリを作成。
主な成果:
- 昨日分の5コミット(学習ゲート合格込み)で積み残しゼロ
- Googleタスク: 完了扱い2件・削除5件で「アクティブなリスト」を回復
5. AIユーザー数記事の追記とデプロイスクリプトの改善
昨日のAIユーザー数記事に追加調査を載せた。コーディングエージェントの利用者は、チャット型AIの約100分の1(2桁小さい)。この差は1枚のチャートに収まるだろうか。9億の隣に置いた700万の棒は、もう読めない。比較チャートは見送り、Codex単体の成長だけをSVG折れ線にして埋め込んだ。デプロイは1回目が失敗。原因切り分けから measure-deploy.ps1 にpre-deploy validationを組み込んで、最終的に本番反映まで完了した。
主な成果:
- Codex成長の折れ線チャート追加(lint機械検証済み)
- pre-deploy validation の組み込みと
/deploy側の横展開確認 - 本番デプロイ成功
詳細: AIユーザー数記事にCodex折れ線グラフを追記し、デプロイスクリプトにpre-deploy検証を組み込んだ話
6. マークダウンの$数式化バグを発見、115ファイルを明日へ
AX記事を確認していて、表示の崩れが目に留まった。$ に挟まれた区間が、数式として飲み込まれている。横展開調査で括弧隣接の太字崩れを114記事直したが、それでも直らない記事が5件残った。真因はそこにいた。remark-math の1ドル記法である。対象115ファイルのリストと修正スクリプトをmemoに退避し、Googleタスクに登録して明日再開する形にした。
詳細: マークダウン記事の$隣接**が数式化されて崩れる問題を発見
7. そのほか
- Windowsストレージ掃除ラウンド2: Cドライブの空きを45.4GB→129.8GB(+84GB。翌朝の実測では155.3GBまで回復)まで掃除した。OCRデバッグ画像13.76GB・Hugging Faceキャッシュ・Docker・WSL・休止状態オフなどを、アプリのアンインストールは自分の手で、残骸フォルダやデバッグ画像の削除はClaude Codeに任せる分担で進めた(記録は非公開記事に整理)
- マネーフォワード会計への不満ログ: 自分のXアカウントの過去投稿から会計ソフトへの不満・要望を洗い出し、発生日と解決状況をモニタリングする公開記事にまとめた
- SVG図解スキルの改善: note記事を題材にデロイト資料の「7つの型」を検証し、スキルに足りない要素を洗い出した。強調は「背景塗り」から「文字色」基本へ方針転換
- 決算ビートスキャン: ASMLのQ3ガイダンス+13.9%ビート&レイズなどを朝のチェーンで記事化
- 「誰がAXをできるのか」: 業務をコードに落とし込める人の条件を記事化
今日の試行錯誤
| # | テーマ | 試したこと | 結果 | 気づき |
|---|---|---|---|---|
| 1 | Notionアーカイブ | 公式ZIP+内部API補完の二本立て | ZIP路線を放棄→内部API単体へ | ZIPはDBの中身が完全に取れない。自分の実体験が方針を決めた |
| 2 | Notionクロール | queryCollection APIの再現リクエスト | 50件で頭打ち→allBlockIds発見で突破 | APIレスポンスの別フィールドに全量が入っていることがある |
| 3 | Notion 429対策 | 素朴な連続リクエスト | 429を44件浴びた→400msスロットル+3分自動待機で完走 | 常駐ループに「自己監督」を持たせるとタブ任せで回る |
| 4 | Notion画像 | 直接fetchで画像取得 | 403→ネットワークログの302先から署名付きURLで回収 | CSP/CORSに阻まれたらネットワークログが正解を持っている |
| 5 | gogen Phase 4A | Fable 5で8バッチ生成 | rate limit 9連発→実は全部書き込み済みだった | エラーの連発と書き込み失敗は別物。先にDB状態を見る |
| 6 | ミニテスト | 自己申告の○×ボタン | 4択即時判定に置き換え | 「正解できた/間違えた」を押させる摩擦は選択式で消せる |
| 7 | デプロイ | measure-deploy.ps1 の1回目 | prerender後に失敗→pre-deploy validation組み込み | 10分ビルドの失敗は事前検証で防ぐのが一番安い |
| 8 | デプロイ再試行 | 2回目も別エラー | 一過性と判断して再実行→成功 | 検証スクリプトの失敗は原因の階層を分けて読む |
| 9 | $数式化 | 括弧隣接の太字崩れを横展開修正 | 114記事修正→残り5記事の真因は$数式化 | 一括修正後の「残り」にこそ真因が隠れている |
| 10 | Googleタスク | 7件を保持したまま眺める | memo退避→完了2件・削除5件 | 3ヶ月放置のタスクリストは「罪悪感の陳列棚」 |
| 11 | R2移行の委任 | Codexへの実装委任 | 一度分類器にブロック→経路を立て直して同日完走 | 委任プロンプトも分類器に引っかかることがあるが、正規の再試行で通る |
今日の学び
- rate limitエラーが連発しても、書き込み自体は成功していることがある。エラー表示を数える前にDBの実際の状態を確認する
- ZIPエクスポートの「公式だから完全」という思い込みは危険。過去に自分が経験した欠落が、方針転換の一番の根拠になった
- 10分かかるビルドの失敗は、失敗してから調べるのではなく、事前検証(pre-deploy validation)で入口で止める
- タスクリストは放置すると「罪悪感の陳列棚」になる。興味が薄れたタスクは復帰情報だけ退避して消すと、リスト全体の信頼性が戻る
- 一括修正で直りきらなかった「残り」には別の真因がある。114件直して残った5件が remark-math の仕様に辿り着かせた
明日やること
- $数式化問題の修正方針を決めて115ファイルに適用(案A: singleDollarTextMath無効化 / 案B: エスケープ横展開)
- Notionアーカイブの残キュー4,757ページの消化とR2複製
- book-knowledge-base R2移行の残処理(Dropboxオンライン専用化の確認・移行用トークンの失効)
関連記事
- NotionアーカイブをZIP依存から内部API再帰クロールに切り替えた話
- gogen-eitango Phase 4: D1本番適用と章末ミニテストの4択化
- 62,331件の書籍図版をCloudflare R2へ移行する計画づくりとCodexへの実装委任
- 積み残し確認とGoogleタスク7件の断捨離
- AIユーザー数記事にCodex折れ線グラフを追記し、デプロイスクリプトにpre-deploy検証を組み込んだ話
- マークダウン記事の$隣接**が数式化されて崩れる問題を発見
- マネーフォワード会計への不満・改善要望ログ
- デロイトの351ページ資料は「7つの型」だけでできていた
- 誰がAXをできるのか。業務をコードに落とし込める人の条件
- 24時間決算ビートスキャン(2026-07-15〜07-16)