Formosa ESG 2026 — プロジェクト開発記録
開発記録

Formosa ESG 2026
白沙屯媽祖巡礼 GPS トラッキングシステム — プロジェクト開発記録

概念実証から本番運用まで:26日間の開発・運用全記録

バージョン 1.2 対象期間:2026/03/23 — 2026/04/17 更新日:2026/04/17 Formosa ESGプロジェクトチーム
26
開発・運用日数
6
開発フェーズ
5
Pre-Launch 監査ラウンド
179+
Issues 対応数
4
対応言語数

1. プロジェクト概要

「Formosa ESG 2026 白沙屯媽祖巡礼 GPS トラッキングシステム」は、GPS 定位、カーボンフットプリント推定、ソーシャルインタラクションを統合した巡礼トラッキングサービスです。巡礼者は LINE で LOGIN し、スマートフォンでリアルタイムチェックイン、走行距離の蓄積、ランクアップの進捗確認、パーソナライズされたアチーブメントカードの共有が可能です。システムはまた管理者ダッシュボードを提供し、リアルタイムマップ、プッシュ通知、ユーザー管理などのバックエンド機能を含みます。

技術アーキテクチャは Astro(フロントエンド SSG)+ Cloudflare Pages + Workers + D1(SQLite)+ KV(キャッシュとバッファ)を採用し、LINE LIFF SDK と統合してログインと共有機能を実現しています。システムは 1 万人同時利用を想定して設計されています。

イベント日
2026/04/12 出発
イベント期間
約8〜9日間(媽祖の御意思による)
想定同時接続
10,000人同時利用
対応言語
zh-Hant / en / ja / zh-Hans
フロントエンド
Astro + Cloudflare Pages
バックエンド
Workers + D1 + KV

2. 開発フェーズ一覧

フェーズ期間主な目標ステータス
Phase 0 03/23 概念実証:EXIF GPS 読取り、D1 書き込みの実現性検証 完了
Phase 0.5 03/24 MVP:16問アンケート + GPS チェックイン + カーボンフットプリント + アチーブメントカード + LINE Webhook 完了
Phase 1 03/25 UX 再構築:ワンクエッション・ワンカード + 9段階ランク + LIFF + 共有カード + ダッシュボード 完了
Phase 1.5 03/25–26 セキュリティ強化 + ダッシュボード + LIFF Published + Workers Paid アップグレード 完了
Phase 2 03/25–26 負荷テスト 4 ラウンド + D1 ボトルネック分析 + KV Buffer アーキテクチャ設計 完了
Phase 3 03/27–04/05 ローンチ準備:KV Buffer 実装 + GPS パイプライン修正 + 権限システム + プッシュ通知 + ドキュメント デプロイ済
Phase 4 04/01–07 機能改善:アチーブメントカードルール + アンケート最適化 + Issue 修正 + コスト最適化 デプロイ済
Phase 5 04/08–11 本番前監査 R3–R5 + ガバナンスフレームワーク整備(v4.3→v4.7)+ Issue #161/#163 修正 デプロイ済
運用期 04/12– 本番稼働:Issue #168/#170/#171/#172 修正 + ポストイベントブランチ分離 + v4.12 ガバナンス 稼働中

3. 日次作業ログ

日付フェーズ作業項目ステータス
03/23
Day 1
Phase 0 EXIF GPS 座標読取り PoC(ブラウザ側 EXIF.js) 完了
Phase 0 Cloudflare D1 データベース作成 + Workers API エンドポイント 完了
Phase 0 プロジェクトページフレームワーク(Astro SSG + Cloudflare Pages) 完了
03/24
Day 2
Phase 0.5 16問の ESG アンケート(ワンクエッション・ワンカード流程) 完了
Phase 0.5 GPS チェックイン機能 + カーボンフットプリント計算エンジン 完了
Phase 0.5 アチーブメントカードシステム(チェックイン集点の可視化) 完了
Phase 0.5 LINE Bot Webhook 統合(Messaging API) 完了
Phase 0.5 Cloudflare Workers CORS 修正 + デプロイ検証 完了
03/25
Day 3
Phase 1 UX 再構築:ワンクエッション・ワンカード + リニア進捗バー + スライドアニメーション 完了
Phase 1 9段階巡礼者ランクシステム(初心者→飛升),2つの条件:km + チェックイン回数 完了
Phase 1 9枚の AI 生成キャラクター画像(絵文字ランクアイコン代替) 完了
Phase 1 LINE LIFF SDK 統合(Login channel + init) 完了
Phase 1 共有カード(縦レイアウト + 地図 + QR + キャラクター + 統計) 完了
Phase 2 負荷テスト R1:HTTP 層 C-10K ~ C-100K 全 PASS 完了
03/26
Day 4
Phase 1.5 ダッシュボード:ヒートマップ + クラスタリングマーカー + フロント/テール + 3モード切替 完了
Phase 1.5 セキュリティ強化:AuthGate + Admin Token API 検証 完了
Phase 2 負荷テスト R2:800 VU スイートスポット確認(99.99% 成功) 完了
Phase 2 負荷テスト R3:D1 書き込みボトルネック検証(SQLite single-writer lock) 完了
Phase 2 壓力測試 R4:真實場景模擬(CF-800 PASS / RW-500 Data API 瓶頸) 完了
03/27–28
Day 5–6
Phase 3 善足跡每日回報前端 + OG Image 動態生成 完了
Phase 3 公仔圖 4x 解析度升級 + Dashboard AuthGate 修復 完了
Phase 3 7項の UX 修正(写真サムネイル / Facebook 共有 / GPS 永続化など) 完了
Phase 3 功能盤點:23 項完了清單彙整 完了
03/29
Day 7
Phase 3 隱私同意機制(P0)+ 暫停/完了ステータス 完了
Phase 3 碳足跡簡化為 2 級架構(ゼロエミッション vs 乗車) 完了
Phase 3 QR Code 替換為 NET-ZERO logo + FB OG Image 修復 完了
Phase 3 使用說明書網頁化(香客版 + 管理者版) 完了
Phase 3 LINE Bot 說明連結整合 完了
Phase 3 活動照存檔功能 + FB 分享 fbclid 修復 完了
03/30
Day 8
Phase 3 活動照存檔按鈕 UX 改進(明確的儲存按鈕) 完了
Phase 3 Facebook パーソナライズ OG Image 実装 完了
Phase 3 測試模式橫幅 + 照片儲存 Bug 修復 完了
03/31
Day 9
Phase 3 GPS データパイプライン全面修正 GP-1 ~ GP-9(commit 8f08e5d) デプロイ済
Phase 3 KV Buffer アーキテクチャ実装:Checkin → KV → Cron バッチ INSERT D1 デプロイ済
Phase 3 碳排住宿係數更新:12.5 → 8.85 kgCO₂e/晚 完了
04/01–02
Day 10–11
Phase 4 問卷優化 Q16 → Q10(精簡 6 題 + 重新編號) デプロイ済
Phase 3 三層権限システムローンチ:Owner / Manager / Volunteer デプロイ済
Phase 3 ダッシュボード アクセスログ(fire-and-forget KV ログ) 完了
Phase 4 成就卡門檻定義:打卡 ≥3 次 + 完了問卷 + 留電話 完了
04/03–04
Day 12–13
Phase 3 mazu.today Custom Domain 上線(Worker 路由 + DNS) デプロイ済
Ops RFC #100:HealthAlert + Service Worker + Offline Fallback 驗證 デプロイ済
Ops Issue #99:8項の復元力改善(Promise.allSettled、localStorage fallback など) デプロイ済
Ops Issue #102:デュアル Auth システム対齢(KV invite code + Worker secret 統一) デプロイ済
Phase 3 LIFF Channel → Published(所有用戶可使用) デプロイ済
04/05
Day 14
Ops Issue #103:碳排乗車係數修正 0.47515 → 0.12013 kg CO₂e/person·km デプロイ済
Ops Issue #105:プッシュ通知が image + image+text 形式対応(commit 35945cd) デプロイ済
Ops Issue #106:ボランティア可視範囲修正(プッシュ通知 + ユーザーリストのみ非表示) デプロイ済
Ops Worker フルデプロイ確認(Version 342af8b0) デプロイ済
Phase 4 Cloudflare コスト分析:$44.63/月、KV ops 84% 占有 完了
04/06–07
Day 15–16
Phase 4 KV 費用優化 Plan A:移除 TICKER_KV.delete()(commit a4b6fd2) デプロイ済
Phase 4 ローンチ前レビュー清單產出(7 大類 34 項檢核) 完了
Phase 4 技術文件全盤點 + 公開部署規劃(/docs/ + /verification/) 完了
Phase 4 mazu.today Redirect Rules 偵察完了(Cloudflare Dashboard 方案確認) 完了
04/08–09
Day 17–18
Phase 4 Issue #141:セグメント別プッシュ通知 + LIFF OA ガイド + Secrets 棚卸 デプロイ済
Phase 4 Issue #120:プッシュ画像アップロード(R2 ストレージ)+ Wiki Phase 3–4A デプロイ済
Ops ダッシュボードを GitHub Issue #155 に移行 + sync-dashboard Action 自動同期 完了
04/10
Day 19
Ops ローンチ前監査 R3:データ品質 + 防御レジリエンス(computeFilteredKm + VALID_SOURCES 修正、Worker deploy 174bace0) デプロイ済
Ops Issue #162:今日の善き足跡 API 検証通過 完了
Ops CI/CD 棚卸 + ガバナンスフレームワーク Phase 1–2.5 完了(Dashboard + API + KV seed) デプロイ済
04/11
Day 20
Ops ローンチ前監査 R4:ユーザージャーニー + エッジペルソナ + 運用レジリエンス(P0=0, P1=4 全修正、Worker deploy 876dddbd) デプロイ済
Ops Issue #163:GPS ドリフト + 直線軌跡修正(speed outlier filter + accuracy フィルタリング) デプロイ済
Ops Issue #161:シェアリンク修正(race condition — lineUserId が LIFF async 前に null キャプチャ) デプロイ済
Ops ローンチ前監査 R5:コードベース全面ヘルスチェック + 修正完了(P0×2 + P1×6 全修正、commit 9fa6c9d) 完了
Ops 全5ラウンドのローンチ前監査完了 ✅ — コア打刻パス安定、オフライン機構完備、デッドルートなし 完了
04/12
Day 21 — 出発日
Ops 🎉 白沙屯拱天宮出発、システム本番稼働開始(Worker バージョン 8148bac5) 本番稼働
Ops 出発日クリーンアップ:D1 テストデータ消去(users 143→0、gps 1140→0、surveys 20→0)+ KV gps:buffer 9,255 キー一括削除 完了
Ops LIFF Callback URL 空値→400 修正(Dashboard 設定補完) デプロイ済
Ops Phase A フィードバックガバナンス:exit gate + batch-update.yml(file-based trigger)デプロイ(commit 57024b2) デプロイ済
04/13
Day 22
Ops Issue #168:ファントムマイレージ修正(静止ユーザーが偽 km 蓄積 → v1 GPS パイプラインの速度フィルター欠落、commit 9160a69)+ ガードレール #13 追加、skill v4.8 に升級 デプロイ済
04/14
Day 23
Ops Issue #170:pushHours ファントムデプロイ事故(cross-repo 真相ドリフト)→ ガードレール #14 追加、skill v4.9 に升級 治理完了
Ops Issue #171:個人フットプリントページの carbon_kg フィールド誤バインド修正(commit 93fb621) デプロイ済
Ops フィードバックパイプライン全面整理:L0-L3 リスクレベル + auto-close メカニズム安定稼働 完了
04/15
Day 24
Ops Issue #172:デュアルランク不一致根本原因解明(localStorage 隔離 + Math.max(len, 1) フォールバック罠)修正(commit a389dd6) デプロイ済
Ops フィードバック全面トリアージ:Issue #173/#174/#175/#177/#178/#179 分類 + リスクレベル付与 完了
04/16
Day 25
Ops Batch 1(バックエンドのみ #175)を main にマージ(0aeb496)— 活動期間デプロイゲート遵守 デプロイ済
Ops Batch 2 + 3(フロントエンド + Worker #173/#174/#177/#178/#179)を fix/formosa-post-event ブランチに隔離 — Impact Fence 確立 イベント後マージ
04/17
Day 26
Ops batch-update.yml 並行レース修正(concurrency group + pull --rebase リトライ、commit 70173b2) デプロイ済
Ops Cowork ガバナンス v4.12 升級:ライブ運用デプロイゲート + サイレント修正原則 + クロスセッション真相リコンシリエーション 完了

4. 負荷テスト結果

使用 Grafana k6 進行 4 輪壓力測試(2026/03/25–26),驗證系統在高併發環境下的表現。測試環境為 MacBook Air 本地端 + Cloudflare Workers 生產環境。

ラウンド日付テスト重点VU 範囲主要結果
R1 03/25 HTTP 層極限 10K–100K S-BURST / S-WAVE / S-EXTREME 全 PASS;5,000 VU 91% 成功率
R2 03/25 容量スイートスポット 200–1,200 800 VU = 99.99% 成功率(スイートスポット);1,200+ 開始下降;回復力測試 54%
R3 03/26 D1 寫入瓶頸 500 DI-500 D1 SQLite シングルライター制限確認;即時成功率 42%;遅延 +51%
R4 03/26 真實場景模擬 500–800 CF-800(D1 直接書き込み)100% PASS;RW-500(混合負荷)60% FAIL = Data API ボトルネック

ルート原因と解決策

R3-R4 測試確認根因為 D1 SQLite 的 single-writer lock,導致高併發寫入時的序列化瓶頸。解法採用 KV Buffer 架構:

解法 1 — KV Buffer
Checkin 寫 KV(非 D1),key = gps:{ts}:{userId}:{randomId}
解法 2 — Cron Flush
每 5 分鐘批次 flush KV → D1,INSERT OR IGNORE 防重複
解法 3 — Data API Cache
Stats 先查 KV cache(TTL 60s),miss 才查 D1

三項解法已於 2026/03/29 全部部署驗證完了。

5. GPS データパイプライン修正

2026/03/31 進行 GPS 資料管線全面修復(commit 8f08e5d),涵蓋 9 項改進:

編號修復項目說明
GP-1Auto-track 永続化localStorage ステータス跨 session 保留
GP-2Batch 批次上傳離線打卡累積後一次上傳
GP-3Sync 同步端點前端 ↔ Worker 資料同步 API
GP-4GPS 精度過濾accuracy > 閥值自動跳過
GP-5速度偵測≤15 km/h ゼロエミッション / >15 km/h 乗車
GP-6距離計算修正ハバーサイン公式 + 累積走行距離
GP-7期間戳標準化UTC → ISO 8601 統一格式
GP-8重複打卡防護期間間隔 + 位置距離雙重檢查
GP-9エラーリカバリー網路中斷自動重試 + 錯誤回報

6. カーボンフットプリント計算モデル

碳足跡採用 GPS 速度自動偵測分級,將進香移動方式分為ゼロエミッション(步行/自行車)與乗車兩類。乗車碳排係數經學術校正,採用 ecoinvent「market for transport, regular bus」dataset。

ゼロエミッション(≤15 km/h)
0 kg CO₂e / person·km
乗車(>15 km/h)
0.12013 kg CO₂e / person·km
宿泊カーボン排出
8.85 kg CO₂e / 晚
データソース
ecoinvent — regular bus (person·km)

碳排數據附帶「估算值」標註與免責聲明,提供用戶參考但不做為正式碳盤查依據。碳排係數已於 Issue #103 完了修正並部署(舊值 0.47515 kg CO₂e/km 為 vehicle-km 單位,語義不正確)。

7. インフラストラクチャと運用

mazu.today 独自ドメイン

2026/04/03–04 完了 mazu.today Custom Domain 上線,透過 Cloudflare Workers 反向代理至 paulkuo.tw/projects/formosa-esg-2026/。涵蓋 DNS 設定、Worker 路由、i18n 路徑對應、webhook URL 遷移等。所有 LINE 推播連結已統一使用 mazu.today。

権限システム

三層角色權限:Owner(完整管理權限)、Manager(推播 + 用戶管理)、Volunteer(僅查看 Dashboard 地圖與統計,無推播與用戶列表)。透過 KV invite code 機制發放邀請碼,與 Worker secret 統一驗證。

Cloudflare 費用分析

月度費用(03/05–04/04)
$44.63 USD
最大項目
KV 操作佔 84%
萬人場景預估
~$46/月(可控範圍)
優化後預估
~$27/月(Plan A 移除 delete ops)

其他基礎建設

Workers Paid 方案已升級($5/月),解除 100K/天請求上限。LIFF Channel 已發佈至 Published ステータス。LINE OA 已升級至 Medium tier(3,000 則推播/月)。Dashboard 推播支援文字、模板、圖片三種格式。

8. 主要 Issue トラッキング

Issueタイトルリスクステータス
#998項のシステム復元力改善(error handling、Promise.allSettled、localStorage fallback) L1デプロイ済
#100RFC — HealthAlert + Service Worker + Offline Fallback L2デプロイ済
#101_redirects 雙域名 redirect loop(緊急 revert) L3已 revert
#102雙 Auth 系統對齊(KV invite code + Worker secret) L2デプロイ済
#103碳排乗車係數修正(ecoinvent person·km 單位) L2デプロイ済
#105推播支援 image + image+text 格式 L1デプロイ済
#106Volunteer 可視範圍修正 L1デプロイ済
#107/verification/ 検収チェックリストページ L1デプロイ済
#108/docs/ ドキュメント中心 + Footer 拡張 L1デプロイ済
#120プッシュ画像アップロード(R2 ストレージ) L1デプロイ済
#141セグメント別プッシュ + LIFF OA ガイド L2デプロイ済
#161シェアリンク race condition 修正 L2デプロイ済
#162今日の善き足跡 API 検証 L1完了
#163GPS ドリフト + 直線軌跡修正 L2デプロイ済
#168ファントムマイレージ(静止ユーザーが偽 km 蓄積) L2デプロイ済
#170pushHours ファントムデプロイ事故(ガバナンス v4.9) L1治理完了
#171個人フットプリントページ carbon_kg 誤バインド修正 L1デプロイ済
#172デュアルランク不一致(localStorage 隔離 + fallback 罠) L2デプロイ済
#173ランク表示の体感改善(post-event) L1イベント後
#174プッシュ通知の視認性向上(post-event) L1イベント後
#175バックエンドのみの改善(Batch 1、main 済) L1デプロイ済
#177UI 調整(post-event ブランチ) L1イベント後
#178サイレント修復方針(post-event) L1イベント後
#179画像アップロード関連(post-event) L1イベント後

9. 納品ドキュメント

ドキュメントバージョン用途ステータス
巡礼者ユーザーガイドv0.4一般用戶操作指南 已上線
管理者ガイドv0.5ダッシュボード操作 + プッシュ通知 + ユーザー管理 已上線
よくある質問(FAQ)v1.0使用者自助排錯 已上線
プライバシーポリシーv1.0資料收集與使用說明 已上線
ローンチ前レビュー清單v1.0合作夥伴 / 贊助商參考 完了
プロジェクト開発記録(本文件)v1.0完整開發歷程記錄 完了
ボランティアガイド志工操作指南 已上線

10. 開発マイルストーン

03/23 — プロジェクト開始
概念驗證完了,EXIF GPS 讀取 + D1 寫入可行性確認
03/24 — MVP ローンチ
問卷 + GPS 打卡 + 碳足跡 + 獎勵卡 + LINE Bot,ゼロから動作可能まで24時間
03/25 — UX 大規模リニューアル
一題一頁卡片流程、9 級等級系統、LIFF 整合、分享卡片、Dashboard 地圖。同日完了壓力測試 R1
03/26 — 壓力測試完了
R2-R4 完了,確認 D1 瓶頸與 KV Buffer 解法方向
03/29 — KV Buffer 検証完了
三項解法全部部署驗證通過:KV Buffer、Cron Flush、Data API Cache
03/31 — GPS パイプライン修正
GP-1 ~ GP-9 共 9 項修復完了部署,資料品質大幅提升
04/03 — mazu.today ローンチ
独自ドメイン正式生效,品牌辨識度提升,所有 LINE 連結遷移完了
04/05 — フルデプロイ
RFC #100 + Issues #99 / #102 / #103 / #105 / #106 一次部署。Open Issues 歸零
04/07 — ローンチ前レビュー
検収チェックリスト完了、技術ドキュメント棚卸、コスト最適化 Plan A デプロイ完了。出発まであと5日
04/08–09 — 機能完善 + ガバナンス
セグメント別プッシュ稼働、プッシュ画像 R2 ストレージ、ダッシュボードを GitHub Issue #155 自動同期に移行
04/10 — R3 監査 + 修正
データ品質 + 防御レジリエンス監査、computeFilteredKm + VALID_SOURCES 修正デプロイ、ガバナンスフレームワーク稼働開始
04/11 — 全5ラウンド監査完了 ✅
R4 + R5 監査 + 修正完了、Issue #161/#163 クローズ。コアパス安定、出発まであと1日
04/12 — 出発日 🎉
白沙屯拱天宮より出発、システム本番稼働開始(Worker 8148bac5)。D1 テストデータ消去(users 143→0、gps 1140→0、surveys 20→0)、KV buffer 9,255 キー一括削除、Phase A ガバナンス(exit gate + batch-update.yml)デプロイ。
04/13 — Issue #168 ファントムマイレージ修正
静止ユーザーが偽 km を蓄積する問題 → 根本原因:v1 GPS パイプラインの速度フィルター欠落。修正(commit 9160a69)。ガードレール #13 追加、skill v4.8 に升級。
04/14 — Issue #170 ファントムデプロイ + #171 Carbon フィールド
pushHours ファントムデプロイ事故(cross-repo 真相ドリフト)。ガードレール #14 追加、skill v4.9 に升級。Issue #171 個人フットプリントページ carbon_kg フィールド誤バインド修正(commit 93fb621)。
04/15 — Issue #172 デュアルランク根本原因
吳心恬ケース:個人ページとリーダーボードで異なるランク表示。根本原因:LIFF/Safari 間の localStorage 隔離 + Math.max(len, 1) フォールバック罠。修正(commit a389dd6)。フィードバック全面トリアージ完了。
04/16 — ポストイベントブランチ戦略
Impact Fence 確立:Batch 1(バックエンドのみ #175)を main にマージ(0aeb496);Batch 2 & 3(フロントエンド + Worker の変更 #173/#174/#177/#178/#179)は fix/formosa-post-event ブランチに隔離してイベント後マージ。ライブ運用ゲート:バックエンドのみ + ユーザー体感副作用ゼロ。
04/17 — CI レース修正 + ガバナンス v4.12
batch-update.yml の concurrency group + pull --rebase リトライ修正(commit 70173b2)。Cowork ガバナンスを v4.12 に升級:ライブ運用デプロイゲート + サイレント修正原則 + クロスセッション真相リコンシリエーション。Phase 5 本番運用安定稼働中 — 巡礼 6 日目。

Formosa ESG 2026 — 白沙屯媽祖巡礼 GPS トラッキングシステム

mazu.today  |  ドキュメント バージョン 1.2  |  更新日 2026/04/17

隱私權聲明問題回報
EN