版数: 1.1 | 更新日: 2026-06-15 | 層: ① 計画
計画・管理資料
この文書について(標準プロジェクト計画の構成)
目的 何をいつまでに 行うか、本番・運用の方針を関係者で共有する
想定読者 PM、役場・山梨大の責任者、インフラ担当
いつ読むか キックオフ、マイルストーン判定、本番移行の判断時
スケジュールの実体は 記録 §1 WBS 、実施の経緯は §2 開発ログ を参照。
§1 本番導入計画
スマート農業向け iPhone アプリ + サーバー基盤 の本番導入に向け、
各コンポーネントの役割・処理フロー・導入ステップ・ブロッカーを整理した計画書です。
本リポジトリ(github-actions-test)でのインフラ検証結果(MS-3 達成)を反映し、
ドラフト資料との差分を明示しています。
本資料と検証リポジトリの関係:
① 完了レビュー で Android 向けパイプライン(FB 受信 → Worker → GHA → APK 配布)は検証済み。
本番 iOS(Swift / CoreML / TestFlight)はこれから。サーバー・Tunnel・GHA 連携の知見は本番へ横展開可能。
0. ドラフトからの主な修正点(2026-06-12)
項目 ドラフト記載 現状(修正後)
Cloudflare / Tunnel
未対応
稼働中(PoC poc-api-tunnel 再利用、api.dammy-otoko.com)
PostgreSQL
未対応・要確認
稼働中(feedbacks テーブル)。拡張 DDL は DB スキーマ
FB 受信 API
/ping・/upload
/api/v1/health・/api/v1/feedback(実装済み)
Android クライアント
(記載なし)
Flutter スタブで E2E 検証済み(本番は別アプリでも経路は同型)
GHA Android ビルド
検討中
検証完了(artifact → adb install、dispatch 連携)
AI Worker → GHA
仕様未確定
スタブ + GitHubActionsClient 提供(山梨大連携 )
iOS / TestFlight
未対応
未着手(Apple Developer 判断待ち)
フロー 02-1 疎通テスト
Expo Go 推奨
Android 実機で代替検証済みのためスキップ可 。iOS 専用確認は Developer アカウント後
1. 各端末・コンポーネントに必要な処理
4 層(クライアント / ネットワーク・SaaS / サーバー PC / CI/CD)で整理します。
1-1. クライアント層
コンポーネント 担う処理 ステータス 備考
iOS アプリ (Swift / SwiftUI)
カメラ撮影・FB 送信・CoreML 端末内推論・判定表示・TestFlight 更新受信
開発中(山梨大)
MacBook 実機ビルド。GHA 自動デプロイ検証は Developer アカウント後
CoreML モデル
物体検出・品質判定(端末内完結)
開発中
月次再学習後に Worker が生成 → アプリ同梱 → 配信
Android アプリ (本番 / 検証用)
FB 送信・端末内推論(TFLite)・更新受信
経路検証済み
検証は Flutter スタブ(app/)。本番アプリは別リポジトリ想定
1-2. ネットワーク・SaaS 層
コンポーネント 担う処理 ステータス 備考
モバイル Wi-Fi (CGNAT)
サーバー PC をインターネット接続
配置済み
引き渡し対象
Cloudflare
HTTPS 終端・Tunnel 中継
稼働中
Named Tunnel + 固定ドメイン(PoC 再利用)。手順: サーバー手順
GitHub Actions(Android)
モデル同梱 APK ビルド・artifact 出力
検証完了
android-build.yml。配布は adb(本番も社内限定想定)
GitHub Actions + Fastlane(iOS)
CoreML 同梱ビルド・App Store Connect アップロード
未着手
macOS ランナー・署名・ios-build.yml(WBS 2)
TestFlight
テスターへ更新通知・配信
未対応
Apple Developer 必須 。Expo Go は自動デプロイ検証には不可
1-3. サーバー PC(Docker)層
コンポーネント 担う処理 ステータス 備考
cloudflared
Tunnel 確立・維持
稼働中
Docker profile tunnel(Windows PC)
Web API (FastAPI)
FB 受信・保存・疎通
稼働中
server/api/。エンドポイントは /api/v1/*
PostgreSQL
FB 履歴保持
稼働中
本番拡張テーブルは DB スキーマ 参照
ファイルストレージ
FB 画像・モデルファイル
稼働中(検証)
data/storage/。容量設計・圧縮方針は山梨大シミュレーション後に確定
AI Worker
月次再学習・モデル生成・GHA 通知
山梨大構築予定
連携 API: integrations/GitHubActionsClient。検証用スタブ: worker/
2. 本番環境の処理フロー
フロー A:ユーザー通信(クライアント → サーバー)
スマホ(FB 撮影・送信)
└─ モバイル回線(CGNAT)
└─ Cloudflare(HTTPS)
└─ Cloudflare Tunnel
└─ cloudflared(サーバー PC)
└─ FastAPI
├─ data/storage(画像)
└─ PostgreSQL(feedbacks)
検証状況: Tunnel 経由 FB 受信・DB/Storage 保存まで確認済み(MS-1)。
フロー B:アプリ更新・配布(Worker → 端末)
Android(検証済みパターン)
AI Worker(学習完了)
└─ repository_dispatch(model-updated)
└─ GitHub Actions(android-build.yml)
└─ APK artifact
└─ adb install(管理端末)
検証状況: 手動ビルド + dispatch 通し + v2 実機確認(MS-2 / 1.5.2)。ロールバック: rollback-apk.ps1。
iOS(本番目標)
AI Worker(学習完了)
└─ repository_dispatch
└─ GitHub Actions(ios-build.yml・未作成)
└─ Fastlane
└─ App Store Connect
└─ TestFlight
└─ iPhone
未着手。 Apple Developer Program(または借用アカウント)が前提。
フロー C:月次 AI 再学習(内部)
DB・ストレージ(蓄積 FB)
└─ AI Worker(GPU・山梨大)
└─ 新モデル(CoreML / TFLite)
└─ フロー B をトリガー
3. 導入ステップ(推奨順序・現状反映)
ドラフトの Step 1(Expo Go 疎通)は、Android で同等検証済みのため省略 しています。
Step 内容 状態 参照
Step 0
インフラ検証(github-actions-test)
完了(MS-3)
完了レビュー
Step 1
本番サーバー Docker 構成の引き継ぎ(Named Tunnel・FastAPI・DB)
検証済み構成あり
サーバー手順
Step 2
山梨大 AI Worker 連携(学習完了 → GHA)
連携モジュール提供済み・本番 Worker 待ち
山梨大 GHA 連携
Step 3
Android 本番アプリへのパイプライン適用(必要な場合)
テンプレートは android-build.yml
GHA・APK 手順
Step 4
iOS GHA + Fastlane + TestFlight 先行検証
Developer アカウント判断後
山梨大アカウント借用可(ドラフト方針)
Step 5
役場 Apple Developer へ移行・外部テスター拡大
Step 4 成功後
—
Step 6
月次自動化(cron・通知・運用 runbook 定着)
仕様合意後
運用・監視計画 3.6
Step 7
本番ゴーライブ(カットオーバー・受入)
WBS 3.3〜3.4
MS-6
Step 8
導入後監視・運用体制の確立
WBS 3.5〜3.9
運用・監視計画 ・振り返り
Step 1〜6 はコンポーネント構築、Step 7〜8 は導入後の運用 です。
後者の詳細タスクは WBS 3 に分解しています。
4. フロー別・最低構成と本番構成
4-1. フロー A(通信)
コンポーネント 本番構成 検証済み構成
クライアント iOS 本番アプリ Flutter スタブ or 将来 iOS 実機
Tunnel Named Tunnel + 固定ドメイン api.dammy-otoko.com(稼働中)
API / DB Docker compose server/docker-compose.yml
4-2. フロー B(配布)
コンポーネント 本番(iOS) 検証済み(Android) 代替の可否
Worker トリガー
学習完了 Webhook
repository_dispatch
手動 workflow_dispatch も可
CI
macOS + Fastlane
ubuntu + Flutter APK
—
配布
TestFlight
artifact + adb
Expo Go は自動デプロイ検証に不可
署名
Apple Developer 証明書
debug 署名(検証用)
iOS は証明書が必須
4-3. フロー C(再学習)
コンポーネント 本番 現状
AI Worker GPU Docker(山梨大) スタブ(モデルコピー)+ 連携モジュール
学習データ 本番 FB 蓄積 ダミー / 実 FB 混在可
通知 開発者アラート DeveloperNotifier(Webhook 任意)
5. 優先度とブロッカー
5-1. 優先度
優先度 項目 状態
— インフラ経路検証(Android) 完了
高 セキュリティ設計・API 認証(WBS 3.1.4) 設計ドラフト あり・実装未
高 本番移行・監視・月次運用(WBS 3) 運用計画 ドラフトあり
高 山梨大 Worker ↔ GHA 連携の本番組み込み モジュール共有済み
高 iOS GHA + TestFlight 検証 Developer 判断待ち
中 DB 拡張・ストレージ容量設計 DDL 草案あり
中 運用(PAT ローテーション・APK 世代・通知) 手順・スクリプトあり
低 月次 cron 完全自動化 手動トリガーで可
5-2. ブロッカー・待ち事項
ブロッカー 影響 対応方針
Apple Developer Program(役場)
iOS TestFlight 本番
山梨大アカウントで先行検証 → 後日移行
AI Worker 本番仕様(山梨大)
再学習・終了条件
GitHubActionsClient で GHA 連携は先行可能
ストレージ容量・圧縮方針
長期 FB 蓄積
山梨大シミュレーション後に決定
本番 Cloudflare アカウント引き渡し
役場ドメイン移行
検証環境は PoC 資産で代替済み。本番移行時にアカウント移管
山梨大リモートアクセス
Worker 構築支援
Tunnel SSH / Tailscale 等を検討(ドラフト方針)
6. 関連資料
§2 運用・監視計画
本番ゴーライブ(MS-6)以降に必要な監視・定常運用・障害対応 の設計ドラフトです。
本番導入計画 が「何を構築するか」を扱うのに対し、
本資料は「構築後にどう維持するか」を扱います。
WBS 3 の各タスクの詳細は WBS・ガント を参照してください。
スコープ: サーバー(役場 PC)、Cloudflare Tunnel、PostgreSQL、Storage、GHA、山梨大 Worker 連携。
アプリの推論精度・学習アルゴリズムは対象外。
1. 検証済み vs 本番で新たに必要なこと
項目 検証環境(MS-3) 本番で追加が必要
死活確認
手動 GET /api/v1/health
定期チェック・異常時通知(3.5)
Tunnel
cloudflared 手動起動・確認
サービス常駐化・プロセス監視(3.5)
ディスク
目視
Storage / DB / artifact の容量閾値(3.5・3.6)
GHA 失敗
GitHub UI で確認
失敗時 DeveloperNotifier 連携(3.5)
月次再学習
手動 dispatch(K-23)
定例 runbook・担当・記録様式(3.6)
バックアップ
なし
pg_dump・Storage コピー・リストア試験(3.7)
ロールバック
rollback-apk.ps1 のみ
APK / DB / モデル世代の判断基準(3.8)
2. 監視対象と確認方法(WBS 3.5)
ID 監視対象 確認方法(案) 異常の目安 通知先(案)
MON-01
API 死活
GET /api/v1/health(ローカル + Tunnel 経由)
5xx / タイムアウト
開発者 Webhook
MON-02
cloudflared
Windows サービス状態・ログ
プロセス停止・再接続ループ
開発者 Webhook
MON-03
Docker コンテナ
docker compose ps
api / db が Exited
開発者 Webhook
MON-04
PostgreSQL
接続数・ディスク・feedbacks 件数推移
接続不可・ディスク 80% 超
開発者 + 役場担当
MON-05
Storage(FB 画像)
マウント先の空き容量
空き < 20%
開発者 + 役場担当
MON-06
GHA ビルド
Workflow 結果(成功/失敗)
失敗・30 分超過
DeveloperNotifier
MON-07
山梨大 Worker
学習ジョブ完了ログ・training_jobs
24h 以上未完了
山梨大 + 開発者
実装方針(案): 初期は Windows タスクスケジューラ + PowerShell ヘルスチェック +
send-notification.ps1。Datadog 等の SaaS は必要になった段階で検討(TBD)。
3. 通知設計
イベント 重要度 通知チャネル(案) 既存資産
API / Tunnel 停止 高 Slack / メール Webhook DeveloperNotifier
GHA ビルド失敗 高 同上 Worker 終了時フック
学習完了・配布開始 中 同上 Worker 終了時フック
ディスク閾値 中 週次サマリ + 閾値超過時即時 新規 script(3.5)
月次運用リマインド 低 カレンダー + 手動チェックリスト 3.6 runbook
4. 月次運用(WBS 3.6)
検証で確立した「方法 B」フローを本番 runbook として固定化します(K-23 参照)。
FB 蓄積量・Storage 容量の確認(MON-05)
山梨大 Worker で再学習実行(終了条件は山梨大と合意)
学習完了 → repository_dispatch → GHA ビルド
artifact 取得 → archive-apk.ps1 → 端末配布(Android)または TestFlight(iOS)
配布後スモークテスト(health + 1 件 FB)
実施記録を開発ログまたは運用台帳に残す
定例作業 頻度 担当(案)
ヘルスチェック自動実行 日次 役場 PC(自動)
ディスク・DB 件数確認 週次 開発
月次再学習・配布 月次 山梨大 + 開発
GitHub PAT 有効期限確認 四半期 開発
APK / artifact 古い世代の整理 四半期 開発
5. バックアップ・DR(WBS 3.7)
対象 方式(案) 頻度 RPO / RTO(案)
PostgreSQL
pg_dump → 役場 NAS / 外付け
日次
RPO 24h / RTO 4h
Storage(FB 画像)
増分コピー or ミラーリング
週次
RPO 7d / RTO 8h
APK 世代
data/apk-archive/ + GHA artifact
配布のたび
直近 3 世代保持
設定ファイル
.env テンプレ・docker-compose の版管理
変更時
Git 履歴
必須成果物: リストア手順書(3.7)と年 1 回のリストア試験(MS-7 前)。
6. インシデント対応(WBS 3.8)
flowchart TD
A[障害検知] --> B{分類}
B -->|通信不可| C[Tunnel/API 再起動]
B -->|ビルド失敗| D[GHA ログ確認・再実行]
B -->|配布不良| E[rollback-apk.ps1]
B -->|データ破損| F[バックアップからリストア]
C --> G[スモークテスト]
D --> G
E --> G
F --> G
G --> H{復旧?}
H -->|Yes| I[インシデント記録]
H -->|No| J[エスカレーション]
深刻度 例 初動 エスカレーション
S1 本番 API 完全停止 15 分以内に再起動試行 開発 + 役場
S2 GHA 連続失敗 ログ確認・PAT 期限 開発
S3 単端末のみ配布不具合 APK ロールバック 開発
7. 役割分担(案)
役割 担当 主な責務
インフラ・サーバー 役場 PC 常時稼働、Docker、Tunnel、バックアップ媒体
AI Worker・学習 山梨大 再学習実行、終了条件、モデル品質
CI/CD・連携 開発 GHA、PAT、通知、runbook 整備
アプリ配布 開発 + 役場 TestFlight / adb、テスター管理
8. 未決定事項(TBD)
ID 項目 影響する WBS 決定時期(案)
TBD-01 本番 Cloudflare アカウント所有者 3.1.1 ゴーライブ 2 週間前
TBD-02 通知先(Slack ワークスペース等) 3.5 MS-6 前
TBD-03 山梨大 Worker 本番終了条件 3.2 結合試験前
TBD-04 Storage 容量上限・圧縮方針 3.6 本番稼働 1 ヶ月後
TBD-05 監視 SaaS の要否 3.5 運用 3 ヶ月後レビュー
TBD-06 API 認証方式 3.1.4 MS-6 前(セキュリティ設計 )
9. 関連資料
§3 プロジェクト振り返り
MS-3(① インフラ検証)達成後の振り返りです。
できたこと とこれからの WBS を整理し、
本番導入以降の空白を WBS 3 として具体化します。
1. フェーズ別の到達点
フェーズ マイルストーン 状態 意味
検証(① Android)
MS-1〜MS-3
達成
「技術的に繋がる」ことを実証(Tunnel・FB・Worker→GHA→配布)
本番準備(1.6)
連携モジュール・DDL・導入計画
達成
山梨大連携の部品 は用意。本番 Worker 接続は未
② iPhone 検証
MS-4〜MS-5
未着手
TestFlight パイプライン(検証リポジトリ内の WBS 2)
本番導入・運用
MS-6〜MS-7
未着手
今回のギャップ。 役場本番環境の構築〜定常運用
2. うまくいったこと
PoC Tunnel 再利用で MS-1 を早期達成(新規 DNS / Tunnel 不要)
スタブに徹し、インフラ検証に集中できた(アプリ精度はスコープ外)
runbook + ナレッジ(K-19〜K-23)で再現性を確保
月次フロー(方法 B)を Pixel 7a で通し確認
山梨大向け GitHubActionsClient を先行提供
3. ギャップ分析(残課題)
ご指摘のとおり、本番導入計画 は「何を作るか・大まかな Step」までで、導入後の監視・運用 が WBS 化されていませんでした。
領域 現状 不足しているもの 新 WBS
本番環境
検証 PC で PoC Tunnel 稼働
役場アカウントへの移管、本番 .env、シークレット管理
3.1.x
山梨大 Worker
連携モジュールのみ
本番 Worker 結合試験、終了条件・通知仕様の合意
3.2
ゴーライブ
なし
受入テスト基準、導入 runbook、ロールバック判断
3.3〜3.4
監視
/health の手動確認のみ
死活・Tunnel・ディスク・GHA 失敗の定期確認設計
3.5
通知
DeveloperNotifier(任意 Webhook)
誰に・いつ・何を通知するかの運用設計
3.5〜3.6
定常運用
K-23 の要点のみ
月次 runbook、PAT ローテーション、artifact/APK 保管の定例化
3.6
バックアップ・DR
未設計
PostgreSQL / Storage のバックアップ・リストア手順
3.7
インシデント
APK ロールバック script のみ
障害分類、エスカレーション、統合手順書
3.8
DB
feedbacks のみ稼働
拡張テーブル適用、運用ログ(training_jobs 等)
3.1.3
セキュリティ
HTTPS のみ(基本設計 1 行)
API 認証なし・サイズ制限なし・脅威分析未実施
3.1.4
iOS 本番配布
未検証
TestFlight 本番運用(WBS 2 と並行)
WBS 2
4. 位置づけの整理
flowchart LR
subgraph done [完了]
V[① インフラ検証 MS-3]
P[1.6 本番準備部品]
end
subgraph parallel [並行して進める]
I[WBS 2 iPhone検証]
PR[WBS 3 本番導入・運用]
end
subgraph future [ゴール]
G[MS-6 本番稼働]
O[MS-7 運用体制確立]
end
V --> PR
P --> PR
PR --> G --> O
V -.-> I
WBS 2(iPhone 検証)と WBS 3(本番導入・運用)は並行可能 です。
サーバー・Tunnel 系は検証済みのため、WBS 3 は「本番移行」と「運用設計」に集中できます。
5. 推奨する進め方(優先度)
優先 WBS 理由
高 3.1.4 セキュリティ設計・API 対策 無認証 API が最大リスク。セキュリティ設計 で SEC-01〜02 を MS-6 前に
高 3.1 本番移行設計 運用・監視の土台。運用・監視計画 を確定
高 3.2 山梨大 Worker 結合 本番パイプラインの要。モジュールは提供済み
高 3.5〜3.6 監視・月次 runbook ゴーライブ後すぐ必要
中 3.3〜3.4 導入 runbook・受入 MS-6 の判定材料
中 3.7〜3.8 バックアップ・インシデント 本番前に最低限の手順を
中 WBS 2 iOS 配布経路。Developer 判断後
低 3.9 引き継ぎレビュー MS-7。上記が揃ってから
6. 関連資料
§4 検証計画
1. プロジェクトの位置づけ
対象 本プロジェクトでの扱い
画像認識・馬体診断ロジック
第三者機関で検証済み。本プロジェクトではスタブで代替可能
インフラ・運用フロー
検証の主戦場 (CI/CD、配布、FB 受信、再学習トリガー、再ビルド)
2. 検証の段階
① Android 向け検証(先行)
プラットフォーム非依存の運用インフラを固める。iPhone 固有の項目は意図的に後回しにする。
# 検証項目 内容 成功基準
1-1
FB 受信経路
クライアント → Cloudflare Tunnel → PC(FastAPI)
POST が届き、画像・履歴が DB / Storage に保存される
1-2
再学習トリガー
手動または Webhook で AI Worker 起動
学習ジョブ完了後、新モデル(スタブ可)が出力される
1-3
モデル更新 → ビルド連携
新 TFLite をリポジトリに反映 → GitHub Actions 起動
repository_dispatch 等で自動ビルドが実行される
1-4
Android ビルド
GitHub Actions(Ubuntu ランナー)
APK が artifact として取得できる
1-5
端末配布
管理下 1 台へのインストール
adb install 等で更新できる
1-6
継続運用
月次更新を想定した運用手順
手順書どおりに第三者が再実行できる
② iPhone 向け検証(①完了後)
①の知見を活かして iPhone 固有項目を検証する。着手前に Apple Developer Program(年間 14,900 円)の加入を検討する。
# 検証項目 ①との差分
2-1 macOS ランナーでのビルド Ubuntu → macOS。コスト・時間の把握
2-2 署名・証明書管理 Fastlane Match 等、Secrets の運用
2-3 CoreML 同梱ビルド TFLite → CoreML
2-4 TestFlight 配布 APK 直配布 → App Store Connect 経由
2-5 実機 / Simulator 確認 配布後のインストール・更新確認
3. スタブ方針
インフラ検証に集中するため、アプリ・AI Worker は最小限のスタブで代替する。
スタブ Android アプリ: 固定画像またはギャラリー選択、ダミー推論結果表示、FB を FastAPI に POST
スタブ AI Worker: 既存モデルをコピーして「新版本」として出力し、完了時に repository_dispatch を送信
4. 実施順序
順序 作業 備考
Step 0 検証計画・チェックリストの整備 本資料
Step 1 FB 受信(FastAPI + Tunnel)の手動確認 curl で可
Step 2 GHA Android ビルド(手動トリガー) パイプラインの芯
Step 3 Webhook 連携(スタブ Worker → GHA) 本番フローに最も近い
Step 4 APK 取得・1 台インストール手順の確立 運用の閉じ
— ① 完了判定 下記チェックリストを満たす
Step 5 Developer Program 加入判断 ② の前提
Step 6 iOS ワークフロー・TestFlight 手順の移植 ① の runbook をベースに
5. 完了基準チェックリスト
① 完了条件
2026-06-11 すべて達成(MS-3)。 証跡: 完了レビュー §2
FB が Tunnel 経由で PC に届く — 達成
再学習(スタブ可)完了後に Webhook で GHA が起動する — 達成
APK がビルドされ artifact から取得できる — 達成
手順書のみで第三者が同じ操作を再現できる — 達成
② 着手前の判断
① のチェックリストがすべて完了している
Apple Developer Program 加入の Go / No-Go を決定している
macOS ランナーの想定コスト(月次 1 回更新)を把握している
6. 前提条件(合意事項)
項目 内容
Apple Developer Program 未加入。②着手前に検討
ビルド環境 GitHub Actions を優先(ローカル Mac は使用しない)
配布先 管理下 1 台
推論 基本は端末内推論(オンデバイス)
モデル更新 アプリ再ビルドによる配布を優先(本番に近い検証)
再学習トリガー 検証段階では手動発火でも可
検証スコープ Webhook 連携まで(スコープ C)
FB データ 個人情報・位置情報を含まない
配布範囲 社内限定