版数: 1.1  |  更新日: 2026-06-15  |  層: ① 計画

計画・管理資料

この文書について(標準プロジェクト計画の構成)

目的何をいつまでに行うか、本番・運用の方針を関係者で共有する
想定読者PM、役場・山梨大の責任者、インフラ担当
いつ読むかキックオフ、マイルストーン判定、本番移行の判断時
標準の章本資料
導入・移行計画§1 本番導入計画
運用・監視計画§2 運用・監視計画
振り返り・ギャップ分析§3 プロジェクト振り返り
検証計画・完了基準§4 検証計画

スケジュールの実体は 記録 §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 実機
TunnelNamed Tunnel + 固定ドメインapi.dammy-otoko.com(稼働中)
API / DBDocker composeserver/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 WorkerGPU 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-3・チェックリスト証跡
山梨大 GHA 連携Worker 組み込みコード例
DB スキーマPostgreSQL 現行 + 拡張
WBS・ガント日程・マイルストーン(WBS 3 含む)
セキュリティ設計API 認証・脅威・MS-6 前チェックリスト
運用・監視計画導入後の監視・定常運用・DR
プロジェクト振り返りギャップ分析・優先度

§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 / メール WebhookDeveloperNotifier
GHA ビルド失敗同上Worker 終了時フック
学習完了・配布開始同上Worker 終了時フック
ディスク閾値週次サマリ + 閾値超過時即時新規 script(3.5)
月次運用リマインドカレンダー + 手動チェックリスト3.6 runbook

4. 月次運用(WBS 3.6)

検証で確立した「方法 B」フローを本番 runbook として固定化します(K-23 参照)。

  1. FB 蓄積量・Storage 容量の確認(MON-05)
  2. 山梨大 Worker で再学習実行(終了条件は山梨大と合意)
  3. 学習完了 → repository_dispatch → GHA ビルド
  4. artifact 取得 → archive-apk.ps1 → 端末配布(Android)または TestFlight(iOS)
  5. 配布後スモークテスト(health + 1 件 FB)
  6. 実施記録を開発ログまたは運用台帳に残す
定例作業頻度担当(案)
ヘルスチェック自動実行日次役場 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 分以内に再起動試行開発 + 役場
S2GHA 連続失敗ログ確認・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.5MS-6 前
TBD-03山梨大 Worker 本番終了条件3.2結合試験前
TBD-04Storage 容量上限・圧縮方針3.6本番稼働 1 ヶ月後
TBD-05監視 SaaS の要否3.5運用 3 ヶ月後レビュー
TBD-06API 認証方式3.1.4MS-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 2iOS 配布経路。Developer 判断後
3.9 引き継ぎレビューMS-7。上記が揃ってから

6. 関連資料

§4 検証計画

1. プロジェクトの位置づけ

対象本プロジェクトでの扱い
画像認識・馬体診断ロジック 第三者機関で検証済み。本プロジェクトではスタブで代替可能
インフラ・運用フロー 検証の主戦場(CI/CD、配布、FB 受信、再学習トリガー、再ビルド)

2. 検証の段階

① Android 向け検証(先行)

プラットフォーム非依存の運用インフラを固める。iPhone 固有の項目は意図的に後回しにする。

2026-06-11 完了: MS-3 達成。完了レビューは ① Android 向け検証 完了レビュー を参照。
#検証項目内容成功基準
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-1macOS ランナーでのビルドUbuntu → macOS。コスト・時間の把握
2-2署名・証明書管理Fastlane Match 等、Secrets の運用
2-3CoreML 同梱ビルドTFLite → CoreML
2-4TestFlight 配布APK 直配布 → App Store Connect 経由
2-5実機 / Simulator 確認配布後のインストール・更新確認

3. スタブ方針

インフラ検証に集中するため、アプリ・AI Worker は最小限のスタブで代替する。

  • スタブ Android アプリ: 固定画像またはギャラリー選択、ダミー推論結果表示、FB を FastAPI に POST
  • スタブ AI Worker: 既存モデルをコピーして「新版本」として出力し、完了時に repository_dispatch を送信

4. 実施順序

順序作業備考
Step 0検証計画・チェックリストの整備本資料
Step 1FB 受信(FastAPI + Tunnel)の手動確認curl で可
Step 2GHA Android ビルド(手動トリガー)パイプラインの芯
Step 3Webhook 連携(スタブ Worker → GHA)本番フローに最も近い
Step 4APK 取得・1 台インストール手順の確立運用の閉じ
① 完了判定下記チェックリストを満たす
Step 5Developer Program 加入判断② の前提
Step 6iOS ワークフロー・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 データ個人情報・位置情報を含まない
配布範囲社内限定