版数: 1.1  |  更新日: 2026-06-15  |  層: ⑥ 記録

記録・進捗

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

目的いつ・何をしたかを追跡し、マイルストーン判定の根拠とする
想定読者PM、引き継ぎ先、監査・レビュー担当
いつ読むか進捗確認、完了レビュー、意思決定の経緯を調べるとき
標準の章本資料
スケジュール・WBS§1 WBS・ガント
変更・実施ログ§2 開発ログ
フェーズ完了レビュー§3 ① Android 完了レビュー

「なぜそうなったか」は ナレッジ、「これから何をするか」は 計画

§1 WBS・ガントチャート

本 WBS は検証計画に基づく作業分解である。 2026-06-11: ① Android 向け検証は MS-3 達成(予定 6/19 より前倒し)。 2026-06-12: 本番導入準備(山梨大連携・運用基盤)を WBS 1.6 として追加。 同日: 本番導入〜運用のギャップを WBS 3 として追加(振り返り運用・監視計画)。 コンポーネント単位の導入 Step は 本番導入計画 を参照。

1. スケジュール概要

項目日付備考
プロジェクト開始2026-06-05
① Android 向け検証 完了(MS-3)2026-06-11(達成)当初目標 6/19 より前倒し。完了レビュー
本番導入準備(WBS 1.6)2026-06-12山梨大連携・運用基盤・導入計画
② iPhone 向け検証 開始Apple Developer Program 加入次第目標: 2026-06-20(①完了直後)
② iPhone 向け検証 完了2026-07-03②は 2 週間(14 日間)で実施
本番導入・運用(WBS 3)開始2026-06-13MS-3 後。WBS 2 と並行可能
本番ゴーライブ(MS-6)2026-07-15(目標)受入テスト合格・カットオーバー完了
運用体制確立(MS-7)2026-07-31(目標)監視・月次 runbook・バックアップ試験完了

2. マイルストーン

IDマイルストーン目標日完了基準
MS-0 キックオフ・設計資料整備完了 2026-06-05 検証計画・設計 HTML 資料が揃っている
MS-1 FB 受信経路 検証完了 2026-06-14(目標) Tunnel 経由で POST が DB / Storage に保存される — 2026-06-07 達成test-feedback.ps1
MS-2 Android ビルドパイプライン 検証完了 2026-06-15 GHA で APK artifact が取得できる — 2026-06-10 達成(手動ビルド + Pixel 7a install)
MS-3 ① Android 向け検証 完了 2026-06-11 Webhook 連携・端末配布・runbook 完了 — 達成完了レビュー
MS-4 Apple Developer Program 加入・② 着手 2026-06-19 〜 2026-06-20 加入完了次第 ② を開始(TestFlight 利用の前提)
MS-5 ② iPhone 向け検証 完了 2026-07-03 TestFlight 配布・更新確認・runbook 完了(②は 2 週間)
MS-6 本番ゴーライブ 2026-07-15 本番環境で FB 受信・月次パイプライン 1 サイクル・受入合格(運用計画 3.4)
MS-7 運用体制確立 2026-07-31 監視稼働・月次 runbook 確定・バックアップリストア試験・引き継ぎ完了(3.9)

3. WBS(作業分解構造)

WBS 作業名 成果物 担当 開始 終了 依存 状態
0 プロジェクト準備 06/05 06/05 完了
0.1 検証計画・設計資料作成(HTML) docs/*.html 開発 06/03 06/05 完了
0.2 WBS・ガントチャート作成 records.html#wbs 開発 06/05 06/05 0.1 完了
0.3 リポジトリ初期構成・ルール整備 .cursor/rules, README 開発 06/03 06/05 0.1 完了
1 ① Android 向け検証 06/06 06/11 0 完了(MS-3)
1.1 サーバー環境構築 runbook / 開発ログ 開発 06/06 06/07 0 完了
1.1.1 PoC Tunnel 再利用・cloudflared 移行 api.dammy-otoko.com(Pi → Windows PC) 開発 06/07 06/07 1.1.3 完了
1.1.2 FastAPI + DB + Storage(Docker) server/ 構成・docker-compose 開発 06/06 06/07 0.3 完了
1.1.3 FB 受信 API 実装・疎通確認(curl) POST /api/v1/feedback 動作確認 開発 06/07 06/07 1.1.2 完了
1.2 スタブ Android アプリ app/ 開発 06/10 06/14 1.1.3 完了
1.2.1 Flutter プロジェクト作成(スタブ) app/ 最小構成 開発 06/10 06/11 1.1.3 完了
1.2.2 画像選択・ダミー推論・FB 送信実装 F-01〜F-03 実装 開発 06/12 06/13 1.2.1 完了
1.2.3 Tunnel 経由 FB 受信 端末検証 Pixel 7a から HTTP 201・Storage 保存 開発 06/08 06/08 1.2.2 完了
1.3 AI Worker スタブ 開発 06/11 06/16 1.1.3 完了(2026-06-10)
1.3.1 学習スタブ(モデルコピー・版本管理) models/ 出力 開発 06/11 06/12 1.1.3 完了(2026-06-09)
1.3.2 手動トリガー・完了通知 run_training_stub() 開発 06/13 06/13 1.3.1 完了(2026-06-10)
1.3.3 repository_dispatch 送信実装 trigger_github_dispatch() 開発 06/14 06/16 1.3.2 完了(2026-06-10)
1.4 GitHub Actions(Android ビルド) 開発 06/12 06/16 1.2.1 完了(2026-06-10)
1.4.1 android-build.yml(workflow_dispatch) 手動ビルド成功 開発 06/12 06/13 1.2.1 完了(2026-06-10)
1.4.2 TFLite 同梱・APK artifact 出力 MS-2 達成 開発 06/14 06/15 1.4.1 完了(2026-06-10)
1.4.3 repository_dispatch トリガー連携 1.3.3 → GHA 自動起動 開発 06/16 06/17 1.3.3, 1.4.2 完了(2026-06-10)
1.5 端末配布・運用確立 開発 06/16 06/19 1.4.2 完了(2026-06-11)
1.5.1 APK 取得・adb install 手順確立 配布 runbook 開発 06/16 06/16 1.4.2 E2E 確認済み(2026-06-10)
1.5.2 月次更新フロー通し検証(手動トリガー) エンドツーエンド確認 開発 06/17 06/18 1.4.3, 1.5.1 E2E 確認済み(2026-06-11。v2 表示・FB 201)
1.5.3 ① 完了レビュー・チェックリスト確認 MS-3 達成 開発 06/19 06/19 1.5.2 完了(2026-06-11)
1.6 本番導入準備(MS-3 後) 06/12 06/12 1.5.3 完了
1.6.1 山梨大 GHA 連携モジュール integrations/連携ガイド 開発 06/12 06/12 1.3.3 完了
1.6.2 運用基盤(APK ロールバック・通知・DB DDL) archive-apk.ps1 等・DB スキーマ 開発 06/12 06/12 1.5.1 完了
1.6.3 本番導入計画書 plans.html#introduction 開発 06/12 06/12 1.6.1 完了
2 ② iPhone 向け検証(2 週間) 06/19 07/03 1.5.3, MS-4 未着手
2.1 Apple Developer Program 加入 加入完了・TestFlight 利用可能 開発 06/19 06/20 1.5.3 未着手
2.2 macOS ランナー・iOS ビルド基盤 ios-build.yml(ドラフト) 開発 06/20 06/22 2.1 未着手
2.3 署名・証明書管理(Fastlane Match 等) Secrets 構成・手順 開発 06/23 06/24 2.2 未着手
2.4 CoreML 同梱ビルド CoreML 同梱 IPA 開発 06/25 06/26 2.3 未着手
2.5 TestFlight 配布 Fastlane upload 手順 開発 06/27 06/29 2.4 未着手
2.6 実機 / Simulator 更新確認 配布・更新確認記録 開発 06/30 07/01 2.5 未着手
2.7 ② 完了レビュー・runbook 更新 MS-5 達成 開発 07/02 07/03 2.6 未着手
3 本番導入・運用 06/13 07/31 1.6.3 未着手
3.1 本番移行・環境設計 運用・監視計画 v0.1 開発 06/13 06/20 1.6.3 未着手
3.1.1 Cloudflare / ドメイン本番アカウント移管 移管チェックリスト 役場 + 開発 06/13 06/17 3.1 未着手
3.1.2 本番シークレット・.env 管理方針 シークレット一覧・保管場所 開発 06/14 06/18 3.1 未着手
3.1.3 DB 拡張テーブル適用 001_schema.sql 適用記録 開発 06/17 06/20 3.1.2 未着手
3.1.4 セキュリティ設計・API 対策 セキュリティ設計・SEC-01〜04 実装 開発 06/18 06/25 3.1.2 完了(2026-06-14。SEC-01〜04 実装・検証)
3.1.5 セキュリティ実測確認(学習) DB・Storage・ログ・curl 実証(K-28 開発 06/13 06/16 1.5.3 完了(2026-06-13。K-28 実測記録
3.2 山梨大 Worker 本番接続・結合試験 結合試験記録・dispatch 成功 山梨大 + 開発 06/17 06/27 1.6.1, 3.1.3 未着手
3.3 本番導入 runbook(カットオーバー) runbook-phase3-cutover.html(予定) 開発 06/24 07/01 3.1, 3.2 未着手
3.4 受入テスト・ゴーライブ判定 MS-6 達成 開発 + 役場 07/08 07/15 3.3, 3.1.4 未着手
3.5 監視・アラート設計・実装 MON-01〜07・通知設定 開発 06/20 07/05 3.1 未着手
3.6 月次運用 runbook runbook-phase3-monthly.html(予定) 開発 07/06 07/12 3.5, 3.2 未着手
3.7 バックアップ・リストア・DR バックアップ手順・リストア試験記録 役場 + 開発 07/08 07/17 3.1.3 未着手
3.8 インシデント対応・ロールバック統合 障害分類表・エスカレーション 開発 07/10 07/20 3.6, 3.7 未着手
3.9 運用引き継ぎ・レビュー MS-7 達成 全関係者 07/22 07/31 3.4, 3.6, 3.8 未着手

4. ガントチャート

        gantt
            title インフラ検証プロジェクト ガントチャート(06/05 開始)
            dateFormat YYYY-MM-DD
            axisFormat %m/%d
            todayMarker stroke-width:3px,stroke:#2563eb
        
            section 0.準備
            設計資料整備(HTML)          :done, t01, 2026-06-03, 3d
            WBS・ガント作成               :done, t02, 2026-06-05, 1d
            リポジトリ初期構成            :done, t03, 2026-06-03, 3d
        
            section 1.Android検証(MS-3達成 6/11)
            FastAPI+DB+Storage            :done, t12, 2026-06-06, 2d
            FB受信API・curl疎通           :done, t13, 2026-06-07, 1d
            PoC Tunnel移行(cloudflared) :done, t11, 2026-06-07, 1d
            Flutterスタブ作成             :done, t14, 2026-06-08, 2d
            FB送信実装・端末検証          :done, t14b, 2026-06-08, 1d
            MS-1 FB受信経路               :milestone, ms1, 2026-06-07, 0d
            AI Workerスタブ               :done, t15, 2026-06-09, 2d
            GHA Androidビルド             :done, t16, 2026-06-10, 1d
            Webhook連携(dispatch)       :done, t17, 2026-06-10, 1d
            APK配布・adb手順              :done, t18, 2026-06-10, 1d
            E2E通し検証(v2)             :done, t19, 2026-06-11, 1d
            ①完了レビュー(MS-3)         :done, t19b, 2026-06-11, 1d
            ①完了(MS-3)                 :milestone, ms3, 2026-06-11, 0d
        
            section 1.6本番導入準備
            山梨大GHA連携モジュール       :done, t61, 2026-06-12, 1d
            運用基盤・DBスキーマ          :done, t62, 2026-06-12, 1d
            本番導入計画                  :done, t63, 2026-06-12, 1d
        
            section 2.iPhone検証(2週間)
            Developer Program加入         :t21, 2026-06-19, 2d
            macOSランナー・iOS基盤        :t22, 2026-06-20, 3d
            署名・証明書管理              :t23, 2026-06-23, 2d
            CoreML同梱ビルド              :t24, 2026-06-25, 2d
            TestFlight配布                :t25, 2026-06-27, 3d
            実機/Simulator確認            :t26, 2026-06-30, 2d
            ②完了レビュー(MS-5)         :t27, 2026-07-02, 2d
        
            section 3.本番導入・運用
            本番移行・環境設計            :t31, 2026-06-13, 8d
            セキュリティ実測(学習)      :done, t315, 2026-06-13, 1d
            Cloudflare本番移管            :t311, 2026-06-13, 5d
            DB拡張適用                    :t313, 2026-06-17, 4d
            セキュリティ設計・API対策     :done, t314, 2026-06-14, 1d
            山梨大Worker結合試験          :t32, 2026-06-17, 11d
            監視・アラート実装            :t35, 2026-06-20, 16d
            本番導入runbook               :t33, 2026-06-24, 8d
            受入テスト・ゴーライブ        :t34, 2026-07-08, 8d
            本番稼働(MS-6)              :milestone, ms6, 2026-07-15, 0d
            月次運用runbook               :t36, 2026-07-06, 7d
            バックアップ・DR              :t37, 2026-07-08, 10d
            インシデント統合手順          :t38, 2026-07-10, 11d
            運用引き継ぎ(MS-7)          :t39, 2026-07-22, 10d
            運用体制確立(MS-7)          :milestone, ms7, 2026-07-31, 0d
                

5. WBS と検証計画の対応

検証計画 IDWBS作業名
Step 00.1, 0.2計画・設計資料
Step 1 / 1-11.1, 1.2.3FB 受信(Tunnel 経由)
Step 2 / 1-41.4.1, 1.4.2GHA Android ビルド
Step 3 / 1-2, 1-31.3, 1.4.3再学習トリガー・Webhook 連携
Step 4 / 1-5, 1-61.5APK 配布・運用手順
1.6本番導入準備(山梨大連携・運用・導入計画)
② 2-12.2macOS ランナー
② 2-22.3署名・証明書
② 2-32.4CoreML 同梱
② 2-42.5TestFlight
② 2-52.6実機 / Simulator
3.1〜3.4本番移行・Worker 結合・ゴーライブ(導入計画 Step 1〜2)
3.5〜3.9監視・月次運用・DR・インシデント(運用・監視計画

6. 前提・制約

  • 開始日: 2026-06-05
  • ① 完了(MS-3): 2026-06-11 達成(当初目標 2026-06-19 より前倒し)
  • 本番導入準備(WBS 1.6): 2026-06-12 完了
  • ② 開始: Apple Developer Program 加入次第(目標 2026-06-20)。加入が遅れた場合、② 全体がその分スライドする
  • ② 期間: 2 週間(2026-06-20 〜 2026-07-03 を目標)
  • WBS 3: 2026-06-13 開始。WBS 2 と並行可能。MS-6(7/15)・MS-7(7/31)は目標日
  • 工数は 1 人想定の稼働日(1 日 = 実働 6〜8 時間)である
  • 1.3(AI Worker)と 1.4(GHA)は 1.2 と並行して進める
  • アプリ本体はスタブ。工数に本番アプリ開発は含まない

§2 開発ログ

本ページは、設計方針の変更・協議の経緯・実装の進捗を時系列で記録する開発ログです。 検証計画や WBS の「計画」と本ログの「実績」が乖離した場合は、本ログと関連資料を同期します。 設計理解・エラー解決のナレッジは Phase1 ナレッジ に集約しています。

1. 現在地サマリー(2026-06-11 更新)

区分状態備考
WBS 1.1 サーバー環境構築 完了 1.1.1〜1.1.3 すべて完了(コミット e4defb5
MS-1(Tunnel 経由 FB 受信) 達成 https://api.dammy-otoko.com 経由で HTTP 201・Storage 保存を確認
WBS 1.2.1 Flutter プロジェクト 完了 flutter createapp/ 作成(コミット f383eae
WBS 1.2.2 F-01〜F-03 実装 完了 画像選択・ダミー推論・FB 送信
WBS 1.2.3 端末検証 完了 Pixel 7a から Tunnel 経由 FB 送信成功(HTTP 201)。Storage に eb29ce87-....png 等を確認
MS-1(クライアント経路) 再確認済み スマホ → Cloudflare → Windows PC API → DB / Storage。PC スクリプト経路に加え実機経路も達成
WBS 1.3 AI Worker スタブ 実装済み worker/models/android-build.yml(dispatch 検証用)。手順: Phase1 Worker 手順
WBS 1.4 GHA Android ビルド E2E 確認済み 手動ビルド(workflow_dispatch)→ artifact → Pixel 7a install。手順: GHA 操作手順(UI)
MS-2(GHA APK artifact・実機配布) 達成 2026-06-10。Android Build #1(7m 18s)→ app-release-apk-v1 → adb install → 同梱モデル v1 表示・Tunnel 経由 FB 成功
WBS 1.4.3 repository_dispatch 連携 確認済み 2026-06-10。run-training-stub.ps1 → HTTP 204 → Android Build #2(Repository dispatch)起動
WBS 1.5.2 月次通し検証 完了 2026-06-10〜11。dispatch → Build #2 → v2 APK → Pixel 7a:同梱モデル: v2・Tunnel FB 成功(HTTP 201)
WBS 1.5.3 ① 完了レビュー 完了 records.html#review — 検証計画 §5 全項目 OK
MS-3(① Android 向け検証 完了) 達成 2026-06-11。Webhook 連携・端末配布・runbook 整備を確認
次のマイルストーン WBS 2.1 ② iPhone 向け検証。前提: Apple Developer Program 加入判断(完了レビュー §8

2. 方針変更・決定事項一覧

日付変更内容理由影響資料
2026-06-07 Cloudflare Tunnel を新規構築せず PoC の poc-api-tunnel を再利用 PoC(スマート農業)で Named Tunnel・DNS 移管・固定ドメインが確立済みかつ稼働中のため runbookWBS
2026-06-07 サーバーホストを Raspberry Pi からWindows 11 PCへ変更 開発環境をプライベート PC に移行。FB API を同一 PC で運用 runbook基本設計
2026-06-07 WBS 1.1 の実施順序を変更(ローカル API 疎通 → Tunnel 移行) Tunnel 基盤は既存のため、先に API の正しさを localhost で確認 runbookindex
2026-06-07 公開 URL を api.dammy-otoko.com に統一 PoC で有効なドメインをそのまま利用(api.example.com は不採用) runbook
2026-06-07 cloudflared はDocker コンテナで運用(Windows ネイティブは不採用) PoC と同様の compose 運用に揃え、TUNNEL_TOKEN のみで接続 server/docker-compose.ymlK-03
2026-06-07 クライアントはFlutter スタブapp/)で F-01〜F-03 を実装 インフラ検証に集中。診断精度・本番 UI は対象外 design.html#functionsapp/lib/
2026-06-07 test-feedback.ps1 の JSON 送信を一時ファイル経由に変更 Windows curl.exe -F のインライン JSON エスケープ問題 scripts/test-feedback.ps1

3. 時系列ログ

プロジェクト準備完了(WBS 0)

進捗 2026-06-03 〜 2026-06-05

検証計画・設計 HTML 資料、WBS・ガントチャート、リポジトリルールを整備。MS-0 達成。

サーバー実装着手・runbook v1.0 作成

進捗 2026-06-05

server/(FastAPI + PostgreSQL + docker-compose)、 scripts/test-feedback.ps1runbook.html#server v1.0 を作成。 当初は Tunnel 新規構築(horse-feedback)を想定。

プライベート PC へ開発環境移行

環境変更 2026-06-07

リポジトリをプライベート PC(Windows 11)へ移行し初回コミット(2c6f420)。 開発の主戦場を自宅 Windows PC とする。

協議: PoC Cloudflare Tunnel の再利用可否

協議・決定 2026-06-07

論点: WBS 1.1.1 の Tunnel 構築を一から行うか、 過去 PoC(C:\Dev\PoC_スマート農業環境構築)の資産を活用するか。

  • PoC 記録および疎通確認により、https://api.dammy-otoko.com/ping が応答(Tunnel 稼働中)と確認
  • Named Tunnel poc-api-tunnel、Public Hostname api.dammy-otoko.com → http://api:8000 が docker-compose と整合
  • DNS 移管(Squarespace → Cloudflare)は PoC で完了済み

決定: Tunnel・DNS・Hostname は再利用。作業範囲は「cloudflared の接続先を Pi から Windows PC へ移す」のみ。

参照: Manus 作業記録、 PoC ナレッジ資料(Phase 1-4)

runbook v1.1・開発ログ初版・WBS 更新

方針変更 2026-06-07

PoC Tunnel 再利用を反映し runbook v1.1、 本 開発ログWBS を更新。 実施順序: Docker 起動 → ローカル API 疎通 → cloudflared 移行。

Docker Desktop インストール・初回起動

進捗 2026-06-07

Docker Desktop 4.76.0 をインストール(Per-user)。 初回の Docker Hub サインインはスキップ(ローカル compose のみ利用)。 インストール先: %LOCALAPPDATA%\Programs\DockerDesktop\

WBS 1.1.2 / 1.1.3 ローカル疎通完了

進捗 2026-06-07
  • docker compose up -d --build db api 成功
  • GET /api/v1/health{"status":"ok"}
  • POST /api/v1/feedback → HTTP 201、画像は data/storage/ に保存

課題: test-feedback.ps1 の JSON 送信失敗(Windows)

課題・対応 2026-06-07

事象: curl.exe -F "inference_result={...}"inference_result must be valid JSON

原因: インライン JSON のエスケープ破損、または UTF-8 BOM。

対応: scripts/inference.json[System.IO.File]::WriteAllText で生成し -F "inference_result=<...json" で送信。

課題: TUNNEL_TOKEN に Tunnel ID(UUID)を設定

課題・対応 2026-06-07

事象: cloudflared が Provided Tunnel token is not valid.Restarting (255)。Tunnel 経由は Cloudflare error 1033

原因: Tunnel ID(UUID)を設定していた。正しくは Zero Trust の Connector トークン(eyJ...)。

対応: ダッシュボードから正しいトークンを server/.env に設定。 詳細: Phase1 ナレッジ K-03

WBS 1.1.1 完了・MS-1 達成(cloudflared: Pi → Windows)

進捗 2026-06-07

cloudflared の Windows への置き換えを完了。コミット e4defb5

  • Raspberry Pi(~/poc-api)で sudo docker compose stop cloudflared
  • 本 PC で docker compose --profile tunnel up -d cloudflaredUp(precheck 成功、QUIC)
  • curl.exe https://api.dammy-otoko.com/api/v1/health{"status":"ok"}
  • test-feedback.ps1 -BaseUrl "https://api.dammy-otoko.com" → HTTP 201

補足: 移行後は /ping(PoC エンドポイント)は 404 となる。 馬体診断 API では /api/v1/health を疎通確認に使用する。

課題: Git push に -m を付けて失敗

課題・対応 2026-06-07

事象: git push -m "..."unknown switch 'm'

対応: git commit -m "..."git push の順。 詳細: Phase1 ナレッジ K-14

移行後の再確認(エージェント検証)

進捗 2026-06-07

ユーザー報告の移行完了後、稼働状態を再確認。

  • server-api-1 / server-db-1 / server-cloudflared-1 すべて Up
  • localhost・Tunnel 経由とも /api/v1/healthok
  • Tunnel 経由 POST /api/v1/feedback → HTTP 201(ID 発行・Storage 保存)

WBS 1.2.1 / 1.2.2 Flutter スタブ実装

進捗 2026-06-07

MS-1 完了後、クライアント側スタブの実装に着手。コミット f383eae

機能 ID実装ファイル
F-01ギャラリー画像選択image_pickermain.dart
F-02ダミー推論services/dummy_inference.dart
F-03FB 送信(multipart)services/feedback_client.dart

依存: httpimage_picker。デフォルト API URL: https://api.dammy-otoko.comconfig.dart、UI で変更可)。

  • flutter analyze — 問題なし
  • flutter test — 成功
  • Android INTERNET 権限を AndroidManifest.xml に追加

残: WBS 1.2.3 — 実機検証。 Windows では symlink 警告のため開発者モードの有効化が必要な場合あり。

cd app
        flutter run

WBS 1.2.3 実機検証着手(Pixel 7a)

進捗 2026-06-08(朝)

端末: Pixel 7a3C261JEHN19182、Android 16 / API 36)。 USB デバッグ初回は is not authorized → 端末の許可ダイアログ承認で解消。

  • flutter run -d 3C261JEHN19182 — ビルド・インストール成功(約 161s)
  • NDK 26 vs 27 警告あり(ビルドは通過。後日 ndkVersion = "27.0.12077973" 追記可)
  • API Base URL https://api.dammy-otoko.com — 確認 OK
  • ギャラリー画像選択・ダミー推論表示(F-01 / F-02)— 確認 OK

課題: 実機 FB 送信 — HTTP 530 / error code 1033(Docker Desktop 未起動)

課題・対応 2026-06-08(朝)

事象: 「フィードバックを送信」→ 送信失敗: Exception: HTTP 530: error code: 1033

原因: PC 上の Docker Desktop が停止しており、cloudflared が Tunnel に接続していない。 MS-1 達成後に PC を再起動/Docker を終了したため再発(K-06 と同型)。

切り分け: PC から curl.exe https://api.dammy-otoko.com/api/v1/health も同じ 1033。 スマホ側の問題ではない。flutter run を止める必要もない(Docker 操作は別ターミナルで可)。

対応: Docker Desktop を起動 → docker compose --profile tunnel up -d → health 確認。

課題: 実機 FB 送信 — HTTP 400「image must be an image file」

課題・対応済み 2026-06-08

事象: Docker 復旧後、Tunnel 経由で API には到達。 送信時 HTTP 400: {"detail":"image must be an image file"}

原因: サーバーは multipart の image フィールドの Content-Typeimage/* であることを要求(feedback.py)。 Flutter の MultipartFile.fromPath は Android キャッシュパス(拡張子なし)で MIME 推定に失敗し、 PC の test-feedback.ps1type=image/jpeg 明示)との差分。

対応: image_pickerXFile.mimeTypefeedback_client.dart の multipart に渡す。詳細: K-17

WBS 1.2.3 完了 — 実機から Tunnel 経由 FB 送信成功

進捗 2026-06-08 22:54 頃

Pixel 7a(flutter run)から FB 送信に成功。WBS 1.2 スタブ Android アプリの端末検証を完了とした。

  • API URL: https://api.dammy-otoko.com
  • 画面: 送信成功 (HTTP 201)、ID: 2cf573f7-1b4b-47a1-a5ce-e1af31915800
  • Storage: data/storage/eb29ce87-af85-4159-8a5d-abdc4f5dfd76.png 等に保存を確認
  • 経路: スマホ → Cloudflare Tunnel → Windows PC(FastAPI + PostgreSQL + Storage)

次: WBS 1.3 AI Worker スタブ(学習スタブ → repository_dispatch

WBS 1.3 実装 — AI Worker スタブ

進捗 2026-06-09

WBS 1.3.1〜1.3.3 のコード実装を完了。実学習は行わずベース stub.tfliteversions/v{N}/ にコピーする。

  • F-20: worker/training_stub.pyrun_training_stub()
  • F-21: worker/github_dispatch.pytrigger_github_dispatch()(event: model-updated
  • 手動起動: scripts/run-training-stub.ps1
  • GHA: .github/workflows/android-build.yml(dispatch 受信・プレースホルダビルド)
  • ローカル検証: --skip-dispatch で v1 生成を確認

次: WBS 1.4 — APK ビルド本実装。1.3.3 の E2E は worker/.env 設定後に dispatch 実行で確認。

WBS 1.4 / 1.5.1 実装 — GHA APK ビルド・配布手順

進捗 2026-06-09
  • android-build.yml: Flutter セットアップ → モデル同梱 → app-release.apk artifact
  • アプリ: assets/models/ 同梱・画面にバージョン表示(ModelBundle
  • scripts/install-apk.ps1: adb インストール用
  • runbook: runbook.html#gha

次: リモート push 後、Actions 手動実行または Worker dispatch で artifact 取得 → Pixel 7a 検証。

ナレッジ整理 — GHA / YAML / 月次パイプライン(K-19〜K-21)

設計理解 2026-06-09

WBS 1.4 着手に伴い、GitHub Actions・CI/CD の概念整理を実施。 Phase1 ナレッジ に以下を追記。

  • K-19 — YAML の文法とツールごとのスキーマ(Docker Compose vs GHA)
  • K-20android-build.yml の役割、リモート push、artifact / APK、手動ビルドの実体
  • K-21 — 月次モデル更新(学習 → repository_dispatch → GHA → adb 配布、TestFlight は ②)

要点: YAML push だけではビルドは走らない(on: push なし)。 成果物は artifact に一時保存され、端末反映は PC ダウンロード + adb が Phase1 Android の想定。

WBS 1.4.1 / 1.5.1 E2E — GHA 手動ビルド → Pixel 7a 配布(A-2〜A-6)

進捗 2026-06-10

GHA 操作手順(UI) に沿い、 workflow_dispatch 手動ビルドから実機配布まで完遂。証跡スクショは runbook に掲載。

手順結果
A-2 Android Build 選択OK(workflow_dispatch 表示)
A-3 Run workflow(model_version: v1)OK
A-4 ビルドAndroid Build #1 成功(7m 18s、Artifacts: 1)
A-5 artifact ダウンロードapp-release-apk-v1 → 解凍 → app-release.apk
A-6 adb install初回 INSTALL_FAILED_UPDATE_INCOMPATIBLEadb uninstall 後 Success

実機確認(GHA release APK):

  • 画面上部: 同梱モデル: v1 (92 bytes)
  • FB 送信: 送信成功 (HTTP 201)(ID: 0710ac54-44f8-41ec-b83b-aca8c12b02af
  • DEBUG リボンなし(release ビルドとして正常)

副次対応: install-apk.ps1 を Android SDK の adb.exe 自動検出に修正(PATH 未設定対策)。

次: WBS 1.4.3 — run-training-stub.ps1 による repository_dispatch 通し検証。

マイルストーン 2026-06-10 — WBS 1.4.3 Worker dispatch 連携

実施内容

  1. worker/.env.exampleworker/.env にコピー(gitignore 済み、commit しない)
  2. Classic PAT をユーザー Settings → Developer settings で発行(repo スコープ)。リポジトリの Actions Secrets ではない — K-22
  3. GITHUB_REPOSITORY=makoto55879/github-actions-test を設定
  4. .\scripts\run-training-stub.ps1 実行

コンソール結果:

  • [1/2] 学習スタブ: models/versions/v2/horse_model.tflite 生成(前回 v1 済みのため v2)
  • [2/2] dispatch: event model-updatedstatus: 204

GitHub Actions: Android Build #2Repository dispatch で起動(方法 A の #1「Manually run」とは別トリガー)。

参照: GHA 操作手順 §BWorker 手順 §3〜5。

マイルストーン 2026-06-10 — WBS 1.5.2 月次通し(方法 B E2E)

実施内容

  1. Android Build #2 成功 → Artifacts app-release-apk-v2 を PC にダウンロード・ZIP 解凍
  2. Pixel 7a(3C261JEHN19182)へ release APK を install:
.\scripts\install-apk.ps1 `
          -ApkPath "C:\Users\wt2bp\Downloads\app-release-apk-v2\app-release.apk" `
          -DeviceId 3C261JEHN19182

install 時のエラーと対処:

  • 初回: INSTALL_FAILED_UPDATE_INCOMPATIBLE(既存 com.horsediagnosis.horse_stub の署名不一致)
  • 対処: adb uninstall com.horsediagnosis.horse_stub → 再 install → Success
  • 方法 A(v1)でも同症状。デバッグ版(flutter run)残留時や release 上書き時に発生しうる — K-13

方法 B 通し確認(1.5.2):

工程結果
学習スタブ v2 + dispatch 204
Android Build #2(Repository dispatch)成功
artifact app-release-apk-v2取得済み
adb install → Pixel 7aSuccess
起動後 同梱モデル: v2 表示確認(2026-06-11)
Tunnel 経由 FB 送信HTTP 201(ID: 45cbbe07-c287-4db9-845f-dce8904bff91

実機確認(方法 B release APK):

  • 画面上部: 同梱モデル: v2 (92 bytes)
  • API Base URL: https://api.dammy-otoko.com
  • FB 送信: 送信成功 (HTTP 201)
  • DEBUG リボンなし(release ビルドとして正常)

証跡: GHA 操作手順 図 B-4b10-app-release-v2.png

次: WBS 1.5.3 — ① 完了レビュー。

マイルストーン 2026-06-11 — WBS 1.5.3 / MS-3 達成

① Android 向け検証 完了レビュー

1.5.2 の方法 B E2E をもって、検証計画 の ① 完了条件 4 項目すべてを満たしたと判定。 成果物: records.html#review

  • MS-0〜MS-3 すべて達成
  • runbook 5 体系 + ナレッジ K-19〜K-23 で再現性を確保
  • 月次フロー(Worker dispatch → GHA → artifact → adb → FB)確立

次: ② iPhone 向け検証 — Apple Developer Program 加入判断後、WBS 2.1 から。並行して WBS 3.1 本番移行設計。

進捗 2026-06-12 — 本番準備(山梨大連携・運用基盤)
  • integrations/github_actions_client.pyGitHubActionsClient(山梨大 Worker 組み込み用)
  • integrations/notifier.py — 開発者 Webhook 通知
  • scripts/archive-apk.ps1 / rollback-apk.ps1 — ローカル APK 世代管理
  • server/api/sql/001_schema.sql + DB スキーマ
  • 山梨大 GHA 連携ガイド
  • 本番導入計画(test_plan_draft.html v0.1 を MS-3 実績で同期)
協議・決定 2026-06-12 — 本番導入〜運用の WBS 化

MS-3 後の振り返りで、本番導入計画 はコンポーネント構築までで、 ゴーライブ以降の監視・定常運用が未計画であることを確認。

次: WBS 3.1 本番移行設計から着手。3.1.4 セキュリティ(API 認証)は MS-6 前必須。山梨大 Worker 結合(3.2)は並行調整。

協議・決定 2026-06-12 — セキュリティ設計のギャップ整理

基本設計のセキュリティは HTTPS + PII 禁止の 1 行のみ。実装は /api/v1/feedback が無認証のまま。

設計理解 2026-06-12 — セキュリティ会話のナレッジ化

セキュリティ設計の理解に OSI・HTTPS・FW 等の前提が必要とのフィードバックを受け、 これまでの Q&A を Phase1 ナレッジ に集約。

  • K-24 OSI・FW・ネットワーク境界
  • K-25 HTTPS・Tunnel(何を守る/守らない)
  • K-26 公開 URL・API 認証・アップロード制限
  • K-27 シークレット・.env・ローテーション
  • K-28 Cloudflare Access・ログ・PII・実測(3.1.5)
  • K-29 セキュリティを考える共通の型
  • 用語集 v1.5 — セキュリティ用語 14 件追加

設計の正本: セキュリティ設計。推奨読了順は K-24 → K-29。用語は 用語集

進捗 2026-06-13 — WBS 3.1.5 セキュリティ実測確認(学習)

MS-3 後のセキュリティ学習として、Tunnel 経由の FB・DB・Storage・ログ・無認証 POST・localhost 裏口を確認。

  • Tunnel: test-feedback.ps1 → 201(id df37d39d-...
  • DB: PII なし(inference JSON + 画像パスのみ)
  • ログ: body 全文は出ず(メソッド・パス・ステータスのみ)
  • 無認証 POST 可能 → SEC-01(API キー)の必要性を実感
  • localhost:8000 で health OK → SEC-03(bind 制限)の必要性を実感

記録: K-28 実測記録次: WBS 3.1.4(SEC-01〜04 実装)。

進捗 2026-06-14 — WBS 3.1.4 セキュリティ対策実装(SEC-01〜04)
  • SEC-01: FEEDBACK_API_KEY 設定時に Authorization: Bearer 必須(app/deps/auth.py
  • SEC-02: MAX_UPLOAD_BYTES 超過で HTTP 413
  • SEC-03: docker-compose ポートを 127.0.0.1:8000:8000 に変更
  • SEC-04: デフォルト DB パスワード検知の起動 WARNING + server/env.example
  • クライアント: test-feedback.ps1 -ApiKey、Flutter --dart-define=FEEDBACK_API_KEY=...

検証: 無認証 401 / キーあり 201 / oversized 413 / Tunnel 経由 201(キー未設定時)。

進捗 2026-06-14 — SEC-01 運用検証・リポジトリ構成ドキュメント整備
  • 誤設定: FEEDBACK_API_KEYworker/.env に追加してしまった(正しい置き場所は server/.env のみ)。誤記載は削除済み
  • 症状: test-feedback.ps1 で health は ok だが POST が 401 invalid api key。プレースホルダ警告あり
  • 解消: Remove-Item Env:FEEDBACK_API_KEYrotate-server-secrets.ps1 -ApiKey -RestartApi → Tunnel 経由で HTTP 201(id 58b80bce-...、2026-06-14)
  • ドキュメント: README に「リポジトリ構成とシークレット」、docs/index.html 同セクション、サイドバー「リポジトリ・シークレット」グループを追加
  • ナレッジ: K-30 に .env 配置ミスと 401 の整理を追記
  • deny 実測: 誤キー → 401 invalid api key、認証なし → 401 missing or invalid authorization headerK-30 deny

記録: K-30次: WBS 3.1.1 本番移行設計を継続。Flutter 本番ビルドへ --dart-define=FEEDBACK_API_KEY を渡す手順の整理。

進捗 2026-06-14 — SEC-01 クライアント(Flutter / GHA)
  • android-build.yml: secrets.FEEDBACK_API_KEY--dart-define で APK に同梱
  • scripts/build-flutter-apk.ps1: ローカル release ビルド(server/.env 自動読み込み)
  • 手順: runbook-phase1-gha §4b

2-B 完了: 2026-06-15 マイルストーン を参照。

進捗 2026-06-14 — SEC-01 2-B(GHA Secret + ビルド)
  • GitHub → Settings → Secrets and variables → Actions → FEEDBACK_API_KEY 登録
  • Android Build 手動 run(model_version ラベル付き)→ 成功(約 7m)
  • ビルドログ: FEEDBACK_API_KEY is set (length …) を確認

手順・スクショ: runbook §4b-1〜4b-6注意: Secret 値は = 右のみ。length がローカル(43)と一致するか要確認。

マイルストーン 2026-06-14 — SEC-01 実機 FB 201(2-A ローカル APK)
  • build-flutter-apk.ps1server/.env から鍵同梱(長さ 43)
  • 副次修正: feedback_client.dartimport '../config.dart';(release ビルドエラー解消)
  • Pixel 7a(3C261JEHN19182): INSTALL_FAILED_UPDATE_INCOMPATIBLE → uninstall 後 install Success
  • 実機 FB: HTTP 201(ID: 77d54315-7fe9-4c82-a48f-4fd628ec9067a
  • 表示: 同梱モデル: local-dev (92 bytes)(ローカル release ビルドのため GHA 版 vN ラベルではない)

証跡: runbook §4c 図 4c-1。SEC-01 経路: サーバー + test-feedback.ps1 + Flutter APK(ローカルビルド)が揃った。

マイルストーン 2026-06-15 — SEC-01 実機 FB 201(2-B GHA artifact)
  • 初回失敗: Secret に FEEDBACK_API_KEY=... 行全体を貼り付け → ビルドログ length 68 → 実機 FB 401 invalid api key
  • 修正: Actions Secret を = 右側のみに更新 → 再ビルド → ログ length 43(2-A と一致)
  • Pixel 7a(3C261JEHN19182): uninstall → GHA artifact install Success
  • 実機 FB: HTTP 201(ID: f3119e16-6f20-41d7-915b-15807b25c8fe
  • 表示: 同梱モデル: v2 (Add Secrets) (92 bytes)

証跡: runbook §4c 図 4c-2。SEC-01 クライアント検証(WBS 3.1.4)完了: 2-A(ローカル)・2-B(GHA)の両経路で実機 FB 201。

進捗 2026-06-15 — Worker 連携 仮定パターン整理
  • 方針: 本番正は パターン A(DB + Storage 直)。B Export API は代替として実装済み
  • 環境: 検証は開発者 PC、本番は役場 PC(山梨大コンポーネントは最終的に役場へ)
  • FB 想定: 月 100 件以下 — DB レスも可能だが Phase1 は PostgreSQL 維持
  • DB: 002_feedback_lifecycle.sql / B 用 API(pending・consume・image)
進捗 2026-06-15 — 資料 8 ページ統合版を正本に
  • 71ff554: 計画 / Runbook / 連携 / 設計 / 参照 / 記録 / ナレッジ + トップの 8 ページ構成
  • 旧 HTML はリダイレクトスタブ(例: integration-boundary.htmlintegration.html#boundary
  • 統合版へリンク統一・パターン A 方針・PC 移設 §5 を追記
進捗 2026-06-15 — 資料を標準ドキュメント体系に再構成
  • トップ(index §1): 計画→設計→構築・運用→連携→参照→記録の 6 層 + ナレッジ
  • 各ページ冒頭に「この文書について」(目的・読者・標準章との対応表)
  • Runbook を「構築・運用手順書」、サイドバーを ①〜⑥ の層番号に統一

4. 実装済みコンポーネント一覧

コンポーネントパス状態
FastAPI + PostgreSQLserver/稼働中
cloudflared(Tunnel)server/docker-compose.yml profile tunnel稼働中(Windows PC)
疎通スクリプトscripts/test-feedback.ps1Tunnel 経由確認済み
Flutter スタブapp/SEC-01 実機 FB 201 — 2-A・2-B 両経路確認済み(2026-06-15)
AI Worker スタブworker/models/dispatch 204 + GHA 起動確認済み(2026-06-10)
GitHub Actions.github/workflows/android-build.yml手動 #1・dispatch #2 → 実機 install まで確認済み
APK インストールscripts/install-apk.ps1Pixel 7a へ release APK 導入確認済み

5. 関連リソース

種別参照先
PoC 記録(ローカル) C:\Dev\PoC_スマート農業環境構築\
Manus 作業記録 RaspberryPiを用いたサーバ/クライアント構築と実現性検証
Phase1 ナレッジ knowledge.html(K-18 Flutter 基礎、K-19〜K-23 GHA / CI/CD / 運用)
機能定義 design.html#functions(F-01〜F-03 実装済み)
現行 runbook runbook.html#gha-ui(v1.5、§A/B E2E 証跡付き)

§3 ① Android 完了レビュー

WBS 1.5.3 の成果物です。検証計画 の「① 完了条件」を 実施記録と照合し、MS-3(① Android 向け検証 完了) を宣言します。

判定: 2026-06-11 時点で ① の完了条件をすべて満たしています。 ② iPhone 向け検証は、本レビュー完了を前提にApple Developer Program 加入判断後に着手します。

1. マイルストーン達成状況

MS内容達成日状態
MS-0 キックオフ・設計資料整備 2026-06-05 頃 達成
MS-1 FB 受信経路(Tunnel 経由) 2026-06-07 達成
MS-2 Android ビルドパイプライン(GHA → artifact → adb) 2026-06-10 達成
MS-3 ① Android 向け検証 完了(Webhook・配布・runbook) 2026-06-11 達成

2. 完了基準チェックリスト(検証計画 §5)

完了条件判定証跡
FB が Tunnel 経由で PC に届く OK MS-1(2026-06-07): test-feedback.ps1 -BaseUrl https://api.dammy-otoko.com
1.2.3 / 1.5.2: Pixel 7a から HTTP 201(ID: 45cbbe07-c287-4db9-845f-dce8904bff91 等)
サーバー手順開発ログ
再学習(スタブ可)完了後に Webhook で GHA が起動する OK 1.4.3 / 1.5.2: run-training-stub.ps1 → dispatch 204 → Android Build #2(Repository dispatch)
Worker 手順GHA UI §B
APK がビルドされ artifact から取得できる OK Build #1(手動): app-release-apk-v1(7m 18s)
Build #2(dispatch): app-release-apk-v2
GHA・APK 手順GHA 操作手順(UI)
手順書のみで第三者が同じ操作を再現できる OK runbook 5 本(下表)。画面操作は UI 手順書+スクリーンショット証跡(A-6b / B-4b)
ナレッジ K-19〜K-23(設計理解・PAT・運用)

3. WBS 1.1〜1.5 実施サマリー

WBS内容完了日
1.1サーバー(FastAPI + PostgreSQL + Tunnel 移行)2026-06-07
1.2Flutter スタブアプリ(F-01〜F-03)・実機 FB2026-06-08
1.3AI Worker スタブ(学習コピー + repository_dispatch)2026-06-10
1.4GHA Android ビルド(手動 + dispatch)2026-06-10
1.5.1artifact 取得・adb install2026-06-10
1.5.2月次通し E2E(方法 B: v2 → 実機 → FB)2026-06-11
1.5.3本レビュー・チェックリスト確認2026-06-11

4. runbook 一覧(再現手順)

手順書対象 WBS主な操作
Phase1 サーバー手順 1.1 Docker 起動・Tunnel 移行・FB 疎通
Phase1 Worker 手順 1.3 学習スタブ・PAT 設定・dispatch
Phase1 GHA・APK 手順 1.4 / 1.5.1 モデル同梱ビルド・artifact・adb
GHA 操作手順(UI) 1.4.1 / 1.5.2 GitHub 画面での Run workflow・Artifacts 取得(方法 A/B)
K-23 運用 1.5 運用 PAT ローテーション・artifact 30 日・APK 世代管理

5. 月次更新フロー(確立済み・方法 B)

        flowchart LR
          FB["Pixel: FB 送信"]
          API["FastAPI + Storage"]
          WK["Worker: 学習スタブ"]
          GHA["GitHub Actions"]
          APK["artifact APK"]
          DEV["adb install"]
          FB --> API
          WK -->|"repository_dispatch"| GHA
          GHA --> APK
          APK --> DEV
                

2026-06-11 に方法 B で通し確認済み(v2 同梱表示・Tunnel FB 201)。詳細: 開発ログ(1.5.2 エントリ)。

6. 運用上の継続事項(① 完了後も実施)

  • PAT 期限切れ前のローテーション(K-23
  • artifact ダウンロード後のローカル APK 保管(30 日で GitHub 上から消える)
  • 月次: Docker 起動 → Worker dispatch → artifact 取得 → adb install
  • 署名不一致時の adb uninstallK-13

7. 既知の制限(スタブ検証の範囲)

項目現状本番想定
推論 ダミー推論(DummyInference オンデバイス TFLite 推論
学習 モデルファイルのコピー FB データを用いた再学習
モデル同梱(GHA) ベース stub + バージョンラベル(versions/ はローカルのみ) 学習成果物のリポジトリ or ストレージ連携
配布 adb 手動 install(管理下 1 台) 社内配布手段の拡張(検討余地あり)

いずれもインフラ検証のスコープ外として意図的にスタブ化しています(検証計画 §1)。

8. ② iPhone 向け検証 — 着手条件

MS-3 達成により、② への着手ゲートを満たしました。着手前に以下を決定してください。

条件状態備考
① チェックリスト完了 満たす 本レビュー §2
Apple Developer Program 加入 未加入 WBS 2.1。TestFlight に必須(WBS
macOS ランナー・署名コストの把握 着手時確認 月次 1 回更新想定(検証計画 §5)

次のアクション(②): Apple Developer Program の Go / No-Go 判断 → WBS 2.1 から開始(ios-build.yml ドラフト等)。