サイト全体のブラッシュアップ検討から。読者の反応を受け取り、記事のいいね数として表示する。
前提の整理
サイト全体はWebフォントなし・JSなしの方針だが、この機能に限りJSを許容する。
コメント機能(Giscus / Utterances)は JS 必須かつ外部サービス経由で GitHub API を叩く構成のため見送り。まずは「役に立った」程度の軽いフィードバックに絞る。
要件
- フィードバックをデータとして受け取る
- 記事のいいね数として表示する
- 同一ユーザーの二重投稿をできるだけ防ぐ
構成案: Cloudflare Worker + KV
静的サイト(GitHub Pages)なのでカウントの保存先が必要。Cloudflare の無料枠で足りる見込み。
- Cloudflare アカウント作成(現在未使用のためゼロから)
- Worker を作成(例:
future-techblog-likes)
- KV ネームスペースを作成し Worker にバインド
GET /count?path=... と POST /like を実装。CORS ヘッダを付与
- ブログ側に小さな JS を追加
二重投稿防止
- クライアント:
localStorage で「押した」フラグを保持
- サーバー: 短時間の連続リクエストを軽く制限
別ブラウザ・シークレットウィンドウからは再度押せる。 完全な一意性は認証なしでは不可能で、技術ブログのいいねとしては許容範囲と判断する。
検討事項
- 既存のSNSカウント表示との併存。記事ページには既にはてブ等のシェア数が出ており、そこへ「いいね」が並ぶ見せ方を決める必要がある
- 表示は楽観的更新(クリック即 +1)にするか、保存完了後にするか
- Worker の運用管理(アカウント・シークレット)を誰が持つか
優先度
他の項目と性質が違い(外部サービス依存・JS導入・運用が発生する)、独立性も高いため最後に着手する。
サイト全体のブラッシュアップ検討から。読者の反応を受け取り、記事のいいね数として表示する。
前提の整理
サイト全体はWebフォントなし・JSなしの方針だが、この機能に限りJSを許容する。
コメント機能(Giscus / Utterances)は JS 必須かつ外部サービス経由で GitHub API を叩く構成のため見送り。まずは「役に立った」程度の軽いフィードバックに絞る。
要件
構成案: Cloudflare Worker + KV
静的サイト(GitHub Pages)なのでカウントの保存先が必要。Cloudflare の無料枠で足りる見込み。
future-techblog-likes)GET /count?path=...とPOST /likeを実装。CORS ヘッダを付与二重投稿防止
localStorageで「押した」フラグを保持別ブラウザ・シークレットウィンドウからは再度押せる。 完全な一意性は認証なしでは不可能で、技術ブログのいいねとしては許容範囲と判断する。
検討事項
優先度
他の項目と性質が違い(外部サービス依存・JS導入・運用が発生する)、独立性も高いため最後に着手する。