2026 年 10 月時点。
概要
richbay.org は、各国政府の公式情報をもとに、国・都市・ビザ・大学・生活費を比較できるリファレンスサイトです。2026 年 5 月 3 日の空のリポジトリから、約 5 か月半で次の規模になりました。
- 国別ハブ
- 51 か国を公開(ディレクトリは 100 か国・地域)
- 都市ページ
- 405(うち詳細な生活ガイド 41)
- ビザルート
- 64
- 大学
- 詳細ページ 160、掲載 3,385 校
- 監視している公式ソース
- 55 か国・地域の 109 件
- 言語
- 英語・中国語・日本語
- サイトマップ内の URL
- 約 2,800
- コミット
- 約 2,400(リリース約 290)
コードとコンテンツのほぼすべては AI コーディングエージェントが書き、小さなチームがその作業を指揮しています。こうした開発は vibe coding と呼ばれることがあります。しかし実際に機能させたのは「ノリ」ではありません。文書化されたルール、既知のミスの公開を自動で止めるチェック、そして変更を信じるのではなく公開中のページを確認する習慣です。
役割分担
チーム は、何を作り何を作らないかを決め、ルールを定め、コンテンツと判断を抜き取りで確認します。
AI コーディングエージェント は、コードとコンテンツを書き、テストとチェックを実行し、デプロイし、公開中のサイトを確認し、学んだことを次のセッションのために書き残します。
AI エージェントは以前のセッションを覚えていません。学んだことはすべてファイルに残し、次のセッションが最初に読むようにしています。
技術スタック
| レイヤー | 採用技術 | 理由 |
|---|---|---|
| フレームワーク | Astro 5(ほとんどのページを事前レンダリング) | 静的ページ中心で、サーバーエンドポイントは一部のみ |
| 言語 | すべて TypeScript | 型チェックが AI の書いたコードの最初のレビュアー |
| スタイル | Tailwind CSS 4 | エージェントが一貫性を保ちやすい |
| ホスティング | Cloudflare Workers + Static Assets | 静的ページとサーバールートを一度にデプロイ |
| データベース | Cloudflare D1 (SQLite) | ユーザーの保存データ、ウェイトリスト、メンテナンス予定 |
| CI/CD | GitHub Actions | 本番ブランチへの push ごとに自動デプロイ、毎日のメンテナンス |
| テスト | Vitest |
アーキテクチャ
- 各国政府の公式ソース
- リポジトリ内の型付きデータファイル
- ビルド + チェック
- 事前レンダリングされたページ · en / zh / ja
- Cloudflare Worker
- 毎日のメンテナンスジョブ → データ更新・リンク確認
- データファイル → 一方向の同期 → Cloudflare D1 → Worker
データは CMS ではなくコードの中に。公開しているすべての事実(国、都市、ビザルート、税率、祝日、大学)は、リポジトリ内の型付き TypeScript ファイルにあります。これが唯一の情報源で、データベースには一方向でコピーするだけです。事実の変更はすべてレビュー可能な diff になり、AI エージェントとの相性が良い方式です。各データには記録された出典があり、ページは自らを公式と称するのではなく、公式ソースへリンクします。
国が中心。各国のハブには「生活・仕事・移住・教育・ビジネス」の 5 本柱があります。国やトピックの追加はデータを足すだけで、ルーティング、ナビゲーション、サイトマップはレイアウトのコードに触れずに追従します。
多言語。英語はルート、中国語と日本語は /zh/ と /ja/ の下にあります。翻訳文はすべて言語キーごとに保存しているので、言語を増やすときはキーを足すだけで、コード構造は変えずに済みます。
ワークフロー
- 開発ブランチで作業
- テストとチェックに合格
- 本番ブランチへマージ
- 自動デプロイ
- 公開中のページを確認
- デプロイのたびに、型チェック、翻訳監査、データ検証、そして限定的な品質チェック群が実行されます。品質チェックはどれも、実際にミスが起きた後で追加したものです。ひとつでも失敗すれば、何も公開されません。
- デプロイ後、エージェントは公開中のバージョンが自分の push したものかを確認します。push が成功しても、デプロイが成功したとは限りません。
- 毎日のメンテナンスは人手を介しません。定期ジョブが為替レートと祝日を更新し、外部リンクを確認し、ディレクトリを再生成します。生成ファイルが急に小さくなる、妥当性チェックに通らない、型チェックが壊れる、のいずれかに当たった変更はコミットせずに元へ戻します。
うまくいかなかったこと、そして変えたこと
ここがいちばん役に立つ部分です。どれもルールかチェックになりました。
- ホスティングの上限を超えた。 最初のプラットフォームには 1 回のデプロイあたりのファイル数上限があり、3 言語と数百のエンティティですぐに超えたため、Workers に移行しました。
- 動いていなかったリダイレクト。 フレームワークのミドルウェアに書いたリダイレクトが、事前レンダリングされたページでは黙って無効になっていました。現在は CDN 層に置いています。
- オンデマンドで描画されず 404 になるページ。 事前レンダリングのルートは、ビルド時に列挙したパスしか返しません。「サーバーがなんとかしてくれる」は誤った思い込みでした。
- 型チェックを通った翻訳漏れ。 型の緩いデータ定義が言語の欠落を許してしまい、一部のページで他言語なのに英語が表示されていました。より厳密な型と検出スクリプトで解決しました。
- 翻訳されてしまったキー。 機械翻訳が本文と一緒にデータの識別子まで翻訳し、コンテンツが黙って消えたことがあります。現在は言語間で構造を比較するチェックがあります。
- チェックは緑、ページは壊れている。 チェックに通っても、ページの見た目が正しいとは限りません。変更のたびに描画されたページを見る、というのが今のルールです。
- 出典リンクがあることは、出典があることではない。 無作為に選んだ 30 の値を、隣にある出典リンクと照らし合わせた。開けた 22 のリンクのうち、値と矛盾するものは一つもなかったが、9 つは機関のトップページを指しており、そこでは値が見つからない。「出典」をクリックして数字が見当たらなければ、読者の期待を裏切ったことになる。手法のページには、リンクがどこまでを示すのかを正確に書いた。
- ページを増やしても流量は増えなかった。 若いサイトのボトルネックはページ数ではなく権威性です。数のためにページを足すのはやめました。
これから始める人へ
- 初日からルールを書き残すこと。 エージェントは忘れますが、ファイルは忘れません。
- 繰り返すミスは、注意書きではなく自動チェックにすること。
- データはバージョン管理された型付きファイルに置くこと。 diff ほど安いレビューはありません。
- push ではなく、公開中のサイトを確認すること。 静かな失敗こそが普通です。
- 何を作らないかは人が決めること。 エージェントは何でも喜んで作ります。