開発記録 #2:ブロックベース JSON
GoldFeather 開発記録 #2:ブロックベース JSON とエッジが支える「疎結合」の美学
前回の「コンセプト編」では、GoldFeather(ゴールドフェザー)が目指す AI Native なビジョンについてお話ししました。第 2 回となる今回は、そのビジョンを実現するための技術的な骨格――アーキテクチャとデータ構造の工夫について深掘りします。
1. 「ページ」を HTML ではなく「データの配列」として捉える
GoldFeather の最大の特徴は、コンテンツを伝統的な HTML 文字列として保存するのではなく、**「コンポーネント・ブロックの配列 (JSON)」**として管理している点です。
例えば、1 つの記事データは以下のような構造(イメージ)を持っています。
{
"theme": "default-style",
"components": [
{ "type": "Header", "props": { "title": "アーキテクチャの解説" } },
{ "type": "MarkdownContent", "props": { "body": "ここに本文..." } },
{ "type": "Affiliate", "props": { "id": "item-001" } }
]
}
この「ブロック・ベース」のアプローチには、大きなメリットが 3 つあります。
- AI への親和性: AI は複雑な HTML タグを解析することなく、必要な情報(本文やメタデータ)だけを JSON から直接、正確に抽出できます。
- デザインの自由度: HTML 構造が固定されていないため、フロントエンド(SPA)側のレンダリング・ロジックを入れ替えるだけで、全く異なる UI/UX を提供可能です。
- 拡張性: 「新しい機能を足したい」ときは、新しい
typeのブロックを定義して配列に足すだけ。既存のシステムを壊すことなく、プラグイン的に機能を追加できます。
2. エッジ・デカップリング・アーキテクチャ
GoldFeather は、システムの各機能を完全に独立(疎結合)させています。
管理・生成層 (Supabase & Cloudflare Workers)
管理画面での執筆や AI による生成は、Supabase (DB) と Cloudflare Workers (API) が担当します。ここでは PostgreSQL の Row Level Security (RLS) をフル活用し、マルチテナントとしての堅牢な隔離を実現しています。
配信・描画層 (Cloudflare R2 & SPA)
ここが GoldFeather の一番の工夫です。配信層は DB に一切アクセスしません。 記事が保存(ビルド)されると、必要なデータは全て静的な JSON ファイルとして Cloudflare R2 に書き出されます。
読み取り専用のエッジ配信に特化することで、「DB 負荷をゼロに抑えつつ、世界中からミリ秒単位でコンテンツを届ける」 ことが可能になりました。これは「静的サイトの爆速さ」と「動的アプリの柔軟さ」をいいとこ取りしたハイブリッド・アプローチです。
3. 「セキュリティ」と「シンプルさ」の両立
マルチテナント(複数のユーザーが利用する仕組み)を支える上で、セキュリティは最優先事項です。
詳細な実装は伏せますが、GoldFeather では「ユーザーの認証情報」と「テナントのデータアクセス」を PostgreSQL のコアレベルで直結させています。これにより、バックエンド層で複雑な権限チェック・ロジックを書く必要がなくなり、コードのシンプルさと安全性を同時に高めることに成功しました。
4. 結びに代えて
「データの持ち方」ひとつを変えるだけで、システム全体の柔軟性は劇的に変わります。 GoldFeather のアーキテクチャは、今後 AI が自律的にページレイアウトを組み替えたり、読者に合わせて最適なコンポーネントを配置したりするための「実験場」でもあります。
エンジニアリングの粋を集めた、羽のような軽やかさを、ぜひ体感してください。