本開発の目標アーキテクチャ(補足)
提案書 §3〜§6 の図と設定値をまとめたものです。Phase-1 の構成(Workers 1本+D1)を土台に、Access、R2、Cron Triggers、実 API 版のアダプタを足します。
§1〜§3 と §5 の図は、draw.io 形式の PHASE2_ARCHITECTURE.drawio にも同じ内容で入っています。draw.io(diagrams.net)で開くと、全体構成・認証の流れ・定期同期の流れ・追加する表の4ページを編集できます。
1. 全体構成
2. 認証の流れ
Phase-1 の HMAC Cookie(src/auth.ts L19–L38)とログイン API(src/app.ts L29)は使いません。
3. 定期同期の流れ
入口は executeSync(src/adapters.ts L204)のまま残し、scheduled ハンドラからも呼べるようにします。
4. 同期スケジュール(案)
Cron Triggers は UTC で指定するので、JST から9時間引いて設定します。
| 連携 | 実行時刻(JST) | Cron(UTC) | 内容 |
|---|---|---|---|
| Dynamics 365 | 毎日 06:00 | 0 21 * * * |
前月分と当月分を差分取得。月初の確定日に前月分を確定し、月次資料を生成 |
| Teams / Graph | 平日 08:00〜20:00 の毎時 | 設計時に確定(UTC では日付をまたぐため2本に分ける) | eTag が変わったときだけ解析して取り込む |
| Knowledge Suite(API の場合) | 毎日 02:00 | 0 17 * * * |
案件を差分取得し、品質を判定。補完済みはスキップ |
| 月次資料 | 毎月1日と15日 07:00 | 0 22 * * * |
毎日起動し、JST の日付が1日か15日のときだけまとめ資料を生成して R2 に保存 |
| ログの書き出し | 毎月1日 03:00 | 0 18 * * * |
毎日起動し、JST の1日だけ、13か月を過ぎた access_logs と audit_logs を R2 に書き出す |
JST の日付は UTC とずれるので、月初・月中の判定は Cron 式ではなくコード側で行います。
5. 追加する表(マイグレーション 0002)
既存の表(migrations/0001_init.sql)との関係だけを示します。
6. R2 のキー設計
| 接頭辞 | 中身 | 削除 |
|---|---|---|
imports/{年月}/{import_job_id}/{元ファイル名} |
取込した Excel / CSV の原本 | アプリからは不可 |
reports/{年月}/{種別}.xlsx |
定期生成した月次資料 | 保持期間を過ぎたらライフサイクルで削除 |
archive/{年度}/{種別}/{元ファイル名} |
過去15年分の原本(目録は archive_files) |
アプリからは不可 |
logs/{年}/{月}/access.jsonl、audit.jsonl |
13か月を過ぎたログ | 社内規程の保存年数に従う |
backups/d1/{日付}.sql |
週次の D1 エクスポート | 12週を残して削除 |
7. 設定値とシークレット
| 名前 | 種別 | 用途 |
|---|---|---|
ACCESS_TEAM_DOMAIN |
変数 | Access の公開鍵の取得先 |
ACCESS_AUD |
変数 | JWT の aud 検証 |
ENTRA_TENANT_ID |
変数 | トークン取得 |
D365_BASE_URL |
変数 | Dataverse / BC の環境 URL |
D365_CLIENT_ID、D365_CLIENT_SECRET |
シークレット | Dynamics 365 用のアプリ |
GRAPH_CLIENT_ID、GRAPH_CLIENT_SECRET |
シークレット | Graph 用のアプリ(Sites.Selected) |
TEAMS_SITE_ID、TEAMS_ITEM_ID(または TEAMS_LIST_ID) |
変数 | 見通しファイルの場所 |
KS_API_KEY |
シークレット | Knowledge Suite(API を使う場合) |
ADAPTER_MODE |
変数 | live / mock。テストと開発は mock |
DEMO_SECRET(Phase-1 の wrangler.toml L9)は廃止します。