全サイトが404になった
ある日の午後、TokiRingのURLを開いたら404が返ってきた。他のサービスも確認する。LP、TokiQR、コーポレートサイト。すべて404だった。
GitHub Pagesが丸ごと死んでいた。
最初はアカウント単位の制限を疑った。Stripeを導入したことで商用利用とみなされたか、自動コミットが規約に触れたか。GitHub Supportに再開申請を送りながら、原因を探った。
答えはGitHubのダッシュボードにあった。
「無料プランの利用制限に達しました。制限は2026年4月1日にリセットされます。」
Actions の無料枠、月2,000分の上限を使い切っていた。
想像していなかった壊れ方
GitHub Actions が止まることは想定していた。CI/CDが動かなくなること、自動デプロイが止まること。そういう形の「壊れ方」は頭にあった。
しかし「Actions の枠が切れると Pages が 404 になる」という連鎖は、想像していなかった。
GitHub Pages は静的ファイルを配信するだけのサービスに見える。しかし実際には、Pages のビルドと配信は Actions のパイプラインに乗っている。Actions が止まれば、Pages も止まる。ファイルは存在しているのに、サイトは見えなくなる。
知識として「GitHub Pages は Actions を使う」ことは知っていた。でも「Actions の枠が尽きたら Pages が死ぬ」という問いを、使い込む前に立てていなかった。
壊れた後に初めて、その連鎖が見えた。
倉庫から機材を出した
その日、倉庫からRaspberry Pi 5とM5Stack Core S3を取り出した。マイクロSDとUSBメモリも用意した。手元にあった機材だったが、ずっと使い時を待っていた。
GitHub Pages が死んだことで、「民間サービスに依存しない配信層」の必要性がリアルになった。理屈として理解していたことが、404という現実を通して身体的な確信に変わった。
ラズパイをセットアップしながら、構想が具体化していった。自治会の集会所にラズパイを置いてもらう。そこがTokiRingのpush通知サーバーになる。ネットワークが生きていれば通知が届く。停電や大規模障害のときは、PWAがオフラインでローカルに動く。
分散マイクロサーバーという構想は以前からあった。しかしラズパイに電源を入れ、SSHで接続し、nginxを立ち上げてサービスが動くのを確認したとき、それは構想から実証に変わった。
Cloudflare Pages へ移行した
静的サイトの配信先をCloudflare Pagesに切り替えた。コーポレートサイト、LP、TokiQR、TokiRing、Hello Briefing。順番にWranglerでデプロイしていった。
Cloudflare Pages の静的配信はリクエスト数が無制限だ。Actions の枠とは完全に切り離されている。月末になるたびに 404 になるリスクは、この構造には存在しない。
移行しながら気づいたことがある。GitHub Pages は「個人の静的サイトを無料で公開する」用途には十分なサービスだ。最初のスタートとしては正解だった。問題はその限界を、使い込む前に正確に想像できなかったことにある。
限界は使い込んで初めて見える。それを責めても仕方がない。壊れたとき、素早く移行できればそれでいい。
静的配信とActionsは切り離すべきだった。
壊れた日に、それが言語化できた。
壊れた後に見えたもの
この日を境に、3層のアーキテクチャの輪郭がクリアになった。
物理層は、QRコードと印刷物だ。ネットワークがなくても読める。電源がなくても存在する。ラズパイやM5Stack Core S3は、この層の実装を担う分散マイクロサーバーだ。
民間層は、Cloudflare Pagesだ。世界最大級のCDNインフラが静的ファイルを無制限に配信する。GitHub Pagesとは信頼性の桁が違う。この層は「ネットワークが生きていれば必ず届く」ことを保証する。
国家層は、国立国会図書館だ。オンライン資料収集に申し出し、受理されている。100年後の誰かが、デジタルアーカイブとしてアクセスできる可能性がある。
この3層構造は、以前から言語化していた概念だった。しかし「GitHub Pagesが404になった日」という具体的な経験を経ることで、それは単なる概念から、実感を持った設計思想に変わった。
今起きてよかった
404が発生したのは、セミナーの2日前だった。90分間のオンラインセミナー、100人規模の参加者を前にプロダクトを紹介する予定だった。
もしセミナー当日に壊れていたら、と思う。しかし2日前だったから、移行が間に合った。Cloudflare Pagesへのデプロイは数時間で完了した。
壊れるタイミングを選べるなら、誰も使っていない静かな時間に壊れてほしい。しかし実際には選べない。選べないからこそ、壊れたときに素早く動ける準備が大切になる。
今起きてよかった。その言葉が、素直に出てきた。