版数: 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 EdgeHTTPS 終端・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 / PNGhorse_20260605_001.jpg含まない
推論結果JSON{"label":"A","score":0.92}含まない
モデル(①).tflitemodel_v202606.tflite
モデル(②).mlmodel / .mlpackagemodel_v202606.mlpackage