nia Reminderと同じチームパスワードを入力してください。
Source Structure
現行本番(cloudflare-app/)のディレクトリツリーと、各ファイルの役割の解説です。GAS版(gas/)からの移行時、ロジックはできる限り1:1で対応づけてあります。詳細は仕様書も参照してください。
全リクエストの入口。{fn, args}を受けて対応するlib関数を呼び、{ok, result}形式で返す。全関数の先頭で_assertTeamAccessを通す。
scheduled()がcronの種類(1分毎/6時間毎)で処理を振り分け、fetch()がLINE Webhookを受信する。3つの役割を1つのWorkerに統合。
SELECT/INSERT/UPDATE文を組み立てる汎用ヘルパー。全Repositoryの土台。
4つのRepositoryクラス(Reminder/Destination/DeliveryLog/WebhookEvent)。GASの汎用findWhere(predicate)を、実際に使うクエリパターンごとの専用メソッドに書き直してある。
CRUDと業務ルール(二重登録防止・接続切れカスケードなど)。UIやDBの詳細を知らない層。
1分毎の送信処理本体。GASのLockServiceはD1の行単位CASに置き換えてある。
6時間毎、ACTIVEな送信先の生死確認。不健全ならdestinationServiceの切断処理を呼ぶ。
LINEのjoin/leaveイベント処理。sheetsClient依存を排除し、Repositoryを直接呼ぶ形にD1移行時に書き換えた。
日付・時刻・繰り返し・送信先をルールベースで抽出し、信頼度スコアを計算する。移植時に最も慎重を期した部分(既存テストケースで全数検証済み)。
信頼度が閾値未満ならAIParserへ委譲する設計だが、AIParser自体は骨組みのみで未実装。
実際のPush送信・ヘルスチェックAPI呼び出し。エラーコード(AUTH_ERROR/TARGET_ERROR/RATE_LIMIT等)への変換もここで行う。lineService.jsは月間メッセージ枠取得(getMessageQuota)も担う。
Destination.channelを見てLine/ChatworkServiceへ振り分けるだけの薄い層。
Webhook署名検証と、新規グループ検知時の補助通知。どちらも外部npm依存無しのWeb標準APIのみで実装。
Cloudflare管理API(/accounts/{id}/d1/database/{id})からD1のfile_sizeを取得する。専用トークン(Account>D1>Read)をnotify-workerにのみ持たせる。
毎朝6:00(JST)、D1ストレージとLINE月間メッセージ枠の両方をチェックし、settingsRepository経由でSettingsテーブルへ保存する。取得失敗しても本体機能は止めない。
Settingsテーブル(key/value/updated_at)への汎用get/set。現行仕様で初めて実際に使われるようになった。
チームパスワードゲート。GASのGoogle Workspaceドメイン制限の代替。
全定数の一元管理。GAS版のConfig.gsと1:1対応。
token/secret/passwordを自動マスキングしてログ出力する。
構造化エラーとID生成(reminder_id等の採番フォーマットもGAS版と同一)。
GAS版一式(gas/)・GASフロントエンド(frontend/)・旧Cloud Run検討版(line-webhook/)・旧Webhook単体Worker版(cloudflare-worker/)は、このCloudflareリポジトリには含まれていません(移行元プロジェクト側に参考として保持)。現行の更新対象はcloudflare-app/のみです。