制作サンプル「海栄丸」(釣り船サイト)の技術解説です。
🎣 実物はこちら → 釣り船サイト「海栄丸」デモ(釣果チャートとブログが自動更新されています)
「サイトの更新、続かない問題」
店舗サイトが古びる最大の原因は、デザインではなく更新が止まることです。釣り船なら釣果、飲食なら本日のメニュー——毎日変わる情報を毎日手入力できる店主はほとんどいません。
そこでこのデモでは、店側の作業をゼロにしたまま、サイトだけが毎日更新されていく構成を組みました。
仕組み: 書く人と読む人を完全に分ける
釣果ブログ(既存の情報源) ↓ スクレイパーが毎日自動収集(Admin SDKで書き込み) Cloud Firestore(posts / catches / daily_summaries) ↓ サイトは読み取り専用で購読 静的サイト(ビルドなし・1ファイルHTML)
ポイントは、サイト側に書き込み機能を一切持たせないことです。セキュリティルールで全コレクションを read-only にしているため、管理画面も認証も不要になり、作るものが劇的に減ります。
// firestore.rules — クライアントは読むだけ match /daily_summaries/{id} { allow read: if true; allow write: if false; // 書けるのは収集バッチだけ }
フロントは素のHTML1枚
ページはフレームワークなしの1ファイル。CDNのFirebase SDKで直近7日分を引いて、CSSだけの棒グラフに流し込んでいます。
const snap = await db.collection('daily_summaries')
.orderBy('date', 'desc').limit(7).get();
// → 「日別のタチウオ最大本数」チャートに描画
ビルドもサーバーもないので、ホスティング費用はほぼゼロ。それでも訪問者から見れば「毎日更新される元気な店」です。
この構成が効く業種
- 釣果・入荷・混雑・空席など「毎日変わる情報」を持つ店
- すでにブログやSNSで情報発信している(=収集元がある)店
- 管理画面を渡しても使われない予感がする現場
「情報はどこかにあるのに、サイトに反映されない」——それは人が運ぶ設計になっているからです。運ぶのは機械に任せましょう。