版数: 1.1 | 更新日: 2026-06-05
データフロー
内向き通信(クライアント → 自宅 PC): CGNAT 環境のため、
スタブアプリから FastAPI への FB 送信は必ず Cloudflare Edge → Tunnel(cloudflared)経由とする。
自宅 PC へ直接到達する経路は存在しない。
1. 全体データフロー
flowchart TB
subgraph Client["クライアント(スタブアプリ)"]
FB["FB データ(画像 + 推論結果 JSON)"]
end
subgraph CFNet["インターネット / Cloudflare"]
CF["Edge Server(HTTPS 終端)"]
end
subgraph Server["自宅 PC(Docker)"]
TUN["cloudflared(Tunnel クライアント)"]
API[FastAPI]
DB[(Database)]
STG[(File Storage)]
WK[AI Worker]
end
subgraph CICD["GitHub(インターネット)"]
GHA[GitHub Actions]
ART[APK / IPA artifact]
end
subgraph Deploy["配布"]
DEV[管理下端末]
end
FB -->|"①内向き HTTPS"| CF
CF -->|"Tunnel 中継"| TUN
TUN --> API
API --> STG
API --> DB
DB --> WK
STG --> WK
WK -->|新モデル| STG
WK -->|"②外向き Webhook"| GHA
GHA --> ART
ART -->|"③配布(Tunnel 外)"| DEV
通信方向の整理
| 番号 | 方向 | 経路 | 備考 |
| ① |
内向き |
スタブアプリ → Cloudflare Edge → cloudflared → FastAPI |
FB 受信。CGNAT 回避のため Tunnel 必須 |
| ② |
外向き |
AI Worker → GitHub API(repository_dispatch) |
再学習完了後のビルド起動。Tunnel は不使用 |
| ③ |
配布 |
GHA artifact → 管理下端末(adb / TestFlight) |
アプリ更新。FB 経路とは別 |
2. FB 受信フロー(02-1 相当)
| 段階 | データ | 保存先 |
| 1. アプリ送信 | 画像 + 推論結果 + タイムスタンプ | — |
| 2. Cloudflare Edge | HTTPS 終端・CDN | — |
| 3. Tunnel 中継 | Edge → cloudflared(自宅 PC)へ転送 | — |
| 4. API 受信 | multipart データ | — |
| 5. 永続化 | 画像ファイル | File Storage |
| 6. 永続化 | メタデータ(ID, 結果, パス, 日時) | Database |
3. モデル更新・配布フロー(02-2 / 02-3 相当)
flowchart LR
A[FB データ蓄積] --> B[AI Worker 再学習]
B --> C[新モデルファイル]
C --> D[Git 反映 or 配置]
D --> E[repository_dispatch]
E --> F[GHA ビルド]
F --> G[モデル同梱 APK/IPA]
G --> H[端末へ配布]
4. データ要素定義
| データ | 形式 | 例 | 個人情報 |
| FB 画像 | JPEG / PNG | horse_20260605_001.jpg | 含まない |
| 推論結果 | JSON | {"label":"A","score":0.92} | 含まない |
| モデル(①) | .tflite | model_v202606.tflite | — |
| モデル(②) | .mlmodel / .mlpackage | model_v202606.mlpackage | — |