構築例一覧へ戻る
構築例 01 / Build Example
Example 01 / 05

建設現場 日報・写真整理アプリ

建設現場の日報作成と、電子小黒板付き証拠写真の整理をデジタル化するシステム。写真の登録・分類から日報の提出・承認ワークフロー、写真台帳の出力までを一気通貫でカバーします。

フロントエンド
React + TypeScript
バックエンド
Express REST API
設計トレース
業務シナリオ → アクティビティ / ユースケース / クラス図 → 実装
日報ワークフロー 電子小黒板 写真台帳(Excel/PDF/SXF) 権限管理 状態遷移 iOSアプリ (SwiftUI)
設計モデル / Design Models

実装の前に、モデルで合意する。

本アプリの実装は、下記のユースケース図・クラス図から導出されています。アクター・ユースケース(UC)・業務ルール(BR)・ドメインクラスがそのまま実装へトレースされ、操作マニュアルの各章と一対一で対応します。

ユースケース図 Use Case Diagram
建設現場 日報・写真整理アプリ ユースケース図
アクター(現場作業員・元請け・本社システム管理者ほか)と UC-01〜UC-10 の関係、および BR-001/BR-003/BR-004 の制約を表現。 原寸で開く ↗
クラス図(ドメインモデル) Domain Class Diagram
建設現場 日報・写真整理アプリ クラス図(ドメインモデル)
DailyReport・Photo・ElectronicBlackboard・PhotoLedger・User などのエンティティと関連・多重度、状態遷移(ReportStatus / SyncStatus)を定義。 原寸で開く ↗

本書は、本アプリケーションの操作手順をまとめた利用者向けマニュアルです。画面・ボタン名は実装に準拠しています。

  • 対象アプリ: 建設現場 日報・写真整理アプリ
  • 構成: フロントエンド (React + TypeScript) + バックエンド (Express REST API)
  • 設計トレース: 業務シナリオ → アクティビティ図 / ユースケース図 / クラス図 → 実装

01はじめに

本アプリは、建設現場の日報作成と写真整理をデジタル化するためのシステムです。主な機能は次のとおりです。

区分機能
現場記録電子小黒板付き写真の登録、画像アップロード、位置情報、日報作成
写真整理写真の自動分類、写真台帳(Excel/PDF/SXF)の出力
承認日報の提出・承認・差し戻し
マスタ・権限工事現場・図面の管理、利用者の権限管理

代表的なアクター(利用者像):現場作業員 / 現場監督 / 元請け / バックオフィス / 本社システム管理者。

本アプリはログイン認証を実装していないため、すべての画面に誰でもアクセスできます。権限は「利用者」データ上の属性として管理します。

02起動と終了

2.1 必要環境

  • Node.js 18 以降
  • (ダミーデータ投入を使う場合)Python 3

2.2 起動手順

2つのサーバーを起動します。ターミナルを2つ使います。

# ① バックエンド(REST API / ポート 4000)
cd app/backend
npm install        # 初回のみ
npm run dev

# ② フロントエンド(画面 / ポート 5173)
cd app/frontend
npm install        # 初回のみ
npm run dev

ブラウザで http://localhost:5173/ を開きます。

フロントエンドは /api/uploads へのアクセスを自動的にバックエンド(4000番)へ転送します。先にバックエンドを起動してください。

2.3 終了手順

各ターミナルで Ctrl + C。または以下で停止します。

lsof -ti:4000,5173 | xargs kill

03画面構成

画面左のサイドバーから各機能へ移動します。グループ構成は次のとおりです。

グループメニュー内容
ダッシュボードダッシュボード件数サマリと最近のデータ
業務日報 / 写真 / 写真台帳日々の記録・整理・台帳出力
マスタ管理工事現場 / 図面基礎データの登録
システム利用者利用者と権限の管理

各機能は共通して 一覧 → 詳細 → 新規/編集 の3画面で構成されます。

  • 一覧画面: 検索・絞り込み・並び替え・ページ送り。行クリックで詳細へ。右上「新規作成」で新規登録。
  • 詳細画面: データの内容表示と、右上の操作ボタン(編集・削除・業務操作)。
  • 新規/編集画面: 入力フォーム。「作成」または「更新」で保存、「キャンセル」で戻る。

04ダッシュボード

ログイン直後(トップ画面)に表示されます。

  • 各データの件数サマリ
  • 最近の日報・写真の一覧(クリックで該当の詳細へ移動)

全体状況の把握と、各機能への入り口として利用します。画面左がサイドバー、中央が各機能の表示エリアです。

ダッシュボード画面
ダッシュボード画面

05写真

電子小黒板を合成した証拠写真を管理します。現場記録の起点となる機能です。

5.1 写真一覧

  • サムネイル / 工事名 / 工種 / 位置情報 / 撮影日時 / 同期状態 / 分類 を表示。
  • 検索(工事名・工種)、絞り込み(同期状態・分類状態)、並び替え(工種・撮影日時)が可能。
  • 画像未登録の写真はサムネイル欄に「なし」と表示されます。
写真一覧画面
写真一覧画面

5.2 写真の新規登録(UC-01/02)

右上「新規作成」から登録します。フォームは3ブロックです。

  1. 写真情報 — 撮影日時(必須)、工種、位置情報タグ、図面、同期状態。チェック: 改ざん防止済 / 分類済
  2. 写真ファイル — 「ファイルを選択」で画像(JPEG/PNG/WebP/GIF・最大10MB)を選ぶとプレビュー表示。保存時にアップロードされます(編集時は差し替え)。
  3. 電子小黒板(重要・必須) — 工事名(必須)・工種・測点・撮影日・J-COMSIA適合
⚠️ 小黒板情報(特に工事名)が未入力の写真は登録できません(BR-001:証拠写真として認められない)。

「作成」を押すと登録され、写真詳細へ移動します。

写真の新規作成画面(写真ファイル・電子小黒板)
写真の新規作成画面(写真ファイル・電子小黒板)

5.3 写真詳細

  • 写真ファイル: 画像を表示。右上「画像をアップロード/差し替え」で画像を登録・変更、「画像を削除」で画像のみ削除(メタデータは保持)。
  • 写真情報: 撮影日時・工種・位置情報・同期状態・改ざん防止・分類状態・図面。
  • 電子小黒板: 工事名・工種・測点・撮影日・J-COMSIA適合と「合成済/未合成」バッジ。
  • 右上操作: 一覧へ / 編集 / 分類(未分類のときのみ表示。押すと「分類済」になる=UC-05)/ 削除。
写真詳細画面(画像・電子小黒板の表示)
写真詳細画面(画像・電子小黒板の表示)

5.4 画像のアップロード方法(2通り)

  • 新規/編集フォーム: 「写真ファイル」でファイルを選び保存。
  • 写真詳細: 「画像をアップロード/差し替え」ボタン。

06日報

現場作業員が作成し、写真を紐付けて提出・承認する日次報告です。

6.1 日報一覧

  • 報告日 / 工種 / 状態 / デバイス種別 などを表示。状態(下書き・提出済・承認済・差戻し)で絞り込み可能。
日報一覧画面
日報一覧画面

6.2 日報の新規作成(UC-03)

右上「新規作成」から登録します。

  • 報告日、工種、作業内容(複数行入力可)、状態、デバイス種別、工事現場
  • 紐付く写真: 登録済みの写真から選択して関連付けます。
  • 「作成」で保存。

6.3 日報詳細とワークフロー(UC-09)

詳細画面の上部に「ワークフロー」セクションがあり、現在の状態バッジと操作ボタンが表示されます。ボタンは状態に応じて出し分けされます。

現在の状態表示される操作結果
下書き / 差戻し提出提出済へ(※写真が1枚以上必要)
提出済承認 / 差し戻し承認済 / 差戻しへ
すべて同期クラウドへ反映(同期状態を更新)
  • 日報情報: 報告日・工種・作業内容・状態・デバイス種別・工事現場。
  • 紐付く写真: 関連写真をカード表示。クリックで写真詳細へ。
  • 右上: 一覧へ / 編集 / 削除。
日報詳細画面(ワークフロー・状態別ボタン)
日報詳細画面(ワークフロー・状態別ボタン)
上図は「提出済」状態の例で、「承認」「差し戻し」ボタンが表示されています。
⚠️ 写真が1枚も紐付いていない日報は「提出」できません(業務ルール)。先に写真を作成し、日報フォームで紐付けてください。

07写真台帳

分類済み写真をまとめ、提出先に応じた形式で出力する台帳です(UC-06/07)。

7.1 台帳の生成

  1. サイドバー「写真台帳」→ 一覧画面の「台帳を生成」へ進みます(/photo-ledgers/generate)。
  2. 出力形式を選択(Excel / PDF / SXF)。提出先(元請け・施主など)に応じて選びます。
  3. 分類済み写真の一覧から対象にチェック(「すべて選択/解除」も可能)。ここには 分類済み の写真のみ表示されます。未分類の写真は写真詳細で「分類」してください。
  4. 「台帳を生成」を押すと台帳が作成され、台帳詳細へ移動します。
写真台帳の生成画面
写真台帳の生成画面
写真を1枚も選択していないと生成できません。

7.2 台帳一覧・詳細

  • 一覧で過去に生成した台帳(形式・枚数・作成日時)を確認。
  • 詳細で含まれる写真や形式を確認できます。

08マスタ管理(工事現場・図面)

写真・日報から参照される基礎データです。先に登録しておくと入力が楽になります。

8.1 工事現場

  • 工事名を登録。日報の「工事現場」として参照されます。
  • 一覧 → 新規作成 → 工事名入力 → 作成。編集・削除も可能。

8.2 図面

  • 図面名と所属工事現場を登録。写真の位置情報付与(撮影位置)で参照されます。
  • 一覧 → 新規作成 → 入力 → 作成。

09利用者・権限管理

協力会社・元請け・本社の利用者を管理します(UC-10)。

9.1 利用者一覧・登録

  • 氏名・所属会社・権限・状態(有効/無効)を表示。
  • 「新規作成」で氏名・所属会社・権限を登録。

9.2 権限変更(UC-10 / BR-005)

利用者詳細の「権限変更」セクションで、権限を選び「権限を変更」を押します。

権限想定
協力会社(Subcontractor)下請け
元請け(PrimeContractor)承認担当
本社(HeadOffice)管理者

所属に応じて閲覧・編集できる情報範囲が変わる想定です(BR-005)。

利用者詳細画面(権限変更)
利用者詳細画面(権限変更)

9.3 無効化

利用者詳細の「無効化」ボタンで、利用者を論理削除(状態を「無効」に)します。データ自体は残ります。

10業務ルールと状態遷移

10.1 日報の状態遷移

            提出(写真≥1)           承認
 下書き ───────────────▶ 提出済 ────────▶ 承認済
   ▲                      │
   │                      │ 差し戻し
   │      提出            ▼
 差戻し ◀──────────────── (差戻し)
  • 「提出」は 下書き または 差戻し から可能。提出には写真が1枚以上必要。
  • 「承認」「差し戻し」は 提出済 からのみ可能。
  • 「同期」はいつでも可能(オフライン入力の通信復帰を想定)。

10.2 主な業務ルール

ID内容アプリでの挙動
BR-001写真は電子小黒板(工事名・工種・測点・撮影日)を合成し改ざん防止の証拠写真とする小黒板(工事名)未入力の写真は登録不可(エラー表示)
BR-002オフラインでも入力でき、通信復帰時にクラウドへ自動同期する日報の「同期」操作で同期状態を更新
BR-003電子納品要件(SXF形式等)に準拠写真台帳の出力形式に SXF を用意
BR-004小黒板は J-COMSIA 規格に適合小黒板に「J-COMSIA適合」項目
BR-005協力会社・元請け・本社ごとに権限制御利用者の権限(ロール)管理
BR-006提出先に応じて Excel/PDF をカスタマイズ出力台帳生成で形式を選択

11ダミーデータの投入

動作確認用に、電子小黒板付きのダミー写真(画像つき)を一括投入できます。

# バックエンドを起動した状態で実行
python3 app/scripts/seed_dummy_photos.py            # 既定8件
python3 app/scripts/seed_dummy_photos.py --count 4  # 件数指定
python3 app/scripts/seed_dummy_photos.py --no-image # メタデータのみ
  • Python 標準ライブラリのみで動作(追加インストール不要)。
  • 実行のたびにデータが追加されます(重複防止はありません)。

12よくある質問・トラブルシュート

症状原因・対処
写真を保存できない/エラーになる電子小黒板の「工事名」が未入力(BR-001)。工事名を入力してください。
日報を「提出」できない紐付く写真が0枚。日報編集で写真を1枚以上紐付けてください。
台帳生成画面に写真が出ない表示対象は「分類済み」写真のみ。写真詳細で「分類」してください。
画像がアップロードできない対応形式は JPEG/PNG/WebP/GIF・最大10MB。SVG等は不可。
画面は出るがデータが空バックエンド未起動。app/backendnpm run dev を実行。
画像が表示されないバックエンドが停止している、または再起動でデータが初期化された可能性。
ポートが使用中で起動できない既存プロセスを停止:lsof -ti:4000,5173 | xargs kill

13制約事項

  • データは在メモリ(インメモリ)保持です。バックエンドを再起動すると、登録したデータはシード(初期)状態に戻ります。
    • アップロード済みの画像ファイル自体は app/backend/uploads/ に残ります。
  • ログイン認証はありません。権限は利用者データ上の属性として扱います。
  • 写真台帳の「出力」は形式の記録までを行う想定で、実ファイル(Excel/PDF/SXF)の生成は本デモ範囲外です。
  • 本番運用では、永続化層を PostgreSQL(Prisma 等)+オブジェクトストレージ(S3 等)へ差し替えることを想定しています。
iOS App / Native Client

iOS アプリ版(SwiftUI)

同じ設計情報(ドメインモデル / API 契約 / ユースケース)から実装した、ネイティブ iOS クライアント。現場の日報・写真整理を iPhone / iPad から確認し、提出・同期・承認・差し戻し・分類などのワークフロー操作を行えます。データは Web 版と同じバックエンド REST API を利用します。

プラットフォーム
iOS(SwiftUI)/ iPhone・iPad
データ供給元
既存バックエンド REST API(ポート 4000)
設計トレース
ドメインモデル / API 契約 / ユースケース → iOS 実装
SwiftUI タブナビゲーション ワークフロー操作 写真分類 プルダウン更新

本書は ネイティブ iOS アプリ(SwiftUI) の操作手順をまとめた利用者向けマニュアルです。画面・ボタン名は実装に準拠しています。

  • 対象: 建設現場 日報・写真整理アプリ(iOS クライアント)
  • データ供給元: 既存のバックエンド REST API(app/backend, ポート 4000)
  • Web版マニュアル: 本ページ上部の「操作マニュアル」を参照

01はじめに

現場の日報・写真整理をスマートフォン(iPhone / iPad)から確認・操作するためのアプリです。既存のクラウド(バックエンド API)と同じデータを扱います。

主な機能:

  • ホームで日報・写真などの件数と最近の日報を確認
  • 日報の内容確認と 提出・同期・承認・差し戻し
  • 写真(電子小黒板つき証拠写真)の閲覧と 分類
  • 写真台帳・利用者の一覧確認
本アプリは認証を持たないため、すべての画面を誰でも閲覧できます(権限は利用者データ上の属性として管理)。

02起動と終了

2.1 前提: バックエンドの起動

アプリはバックエンド API からデータを取得します。先に起動してください。

cd app/backend
npm install     # 初回のみ
npm run dev     # http://localhost:4000
# 任意: 動作確認用のダミー写真を投入
python3 ../scripts/seed_dummy_photos.py --count 3

2.2 アプリの起動(Xcode)

open app/ios/ConstructionSiteDailyReport/ConstructionSiteDailyReport.xcodeproj

実行先に iOS シミュレータ(例: iPhone 17 Pro)を選び、⌘R で実行します。

2.3 アプリの起動(コマンドライン)

cd app/ios/ConstructionSiteDailyReport
xcrun simctl boot "iPhone 17 Pro"; open -a Simulator
xcrun simctl install booted ./build/Build/Products/Debug-iphonesimulator/ConstructionSiteDailyReport.app
xcrun simctl launch booted com.techarts.ConstructionSiteDailyReport

2.4 終了

  • シミュレータ: アプリスイッチャーで上スワイプ、または xcrun simctl terminate booted com.techarts.ConstructionSiteDailyReport
  • バックエンド: 実行ターミナルで Ctrl + C

03画面構成と共通操作

画面下部の タブバー で5つの機能を切り替えます。

タブ機能
ホーム件数サマリ・最近の日報
日報日報の一覧・詳細・ワークフロー操作
写真写真の一覧・詳細・分類
台帳写真台帳の一覧
利用者利用者・権限の一覧

共通操作:

  • 一覧の行をタップすると詳細画面へ移動します。
  • 詳細画面の左上の <(戻る) で一覧へ戻ります。
  • 一覧を下方向にスワイプ(プルダウン)すると最新データを再取得します。
  • 通信に失敗した場合はエラー画面が表示され、「再試行」で再読み込みできます。

04ホーム(ダッシュボード)

起動直後に表示されます。日報・写真・写真台帳・工事現場・利用者の件数と、最近の日報(状態バッジつき)を確認できます。

iOS ホーム画面
ホーム画面

05日報

5.1 日報一覧

報告日・工種・写真枚数・状態(下書き/提出済/承認済/差戻し)が並びます。行をタップで詳細へ。

iOS 日報一覧
日報一覧

5.2 日報詳細とワークフロー

詳細画面の上部に「ワークフロー」があり、現在の状態と操作ボタンが状態に応じて表示されます。

状態表示されるボタン操作
下書き提出提出済へ(写真1枚以上必要)
提出済承認 / 差し戻し承認済 / 差戻しへ
すべて同期クラウドへ反映

下段に「日報情報」(報告日・工種・作業内容・デバイス種別)と「紐付く写真」(タップで写真詳細へ)が表示されます。

iOS 日報詳細(提出済=承認/差し戻しボタン表示)
日報詳細(提出済=承認/差し戻しボタン表示)

06写真

6.1 写真一覧

サムネイル・工事名・工種・撮影日時・同期状態が並びます。画像が未投入の写真はプレースホルダ(画像アイコン)で表示されます。

iOS 写真一覧(サムネイル付き)
写真一覧(サムネイル付き)

6.2 写真詳細と分類

「写真ファイル」に画像、続いて「写真情報」(撮影日時・工種・位置情報タグ・同期状態・分類状態)と「電子小黒板」(工事名・工種・測点・撮影日・J-COMSIA適合)が表示されます。未分類の写真には 「分類する」 が表示され、タップすると分類済みになります(UC-05)。

iOS 写真詳細(画像・電子小黒板・分類)
写真詳細(画像・電子小黒板・分類)

07写真台帳

生成済みの写真台帳を一覧で確認できます(形式:Excel / PDF / SXF、枚数、作成日)。

iOS 写真台帳一覧
写真台帳一覧
台帳の生成はWeb(管理画面)側の機能です。iOSアプリでは生成済み台帳の閲覧を行います。

08利用者

協力会社・元請け・本社の利用者を一覧で確認できます(氏名・所属会社・権限バッジ、無効な利用者は「無効」バッジ)。

iOS 利用者一覧
利用者一覧

09業務ルールと状態遷移

9.1 日報の状態遷移

        提出(写真≥1)        承認
下書き ───────────▶ 提出済 ──────▶ 承認済
                     │
                     │ 差し戻し
                     ▼
                  (差戻し)
  • 「提出」は下書きから(写真1枚以上必要)。
  • 「承認」「差し戻し」は提出済から。
  • 「同期」はいつでも可能(オフライン入力の通信復帰を想定)。

9.2 主な業務ルール(iOSでの反映)

ID内容アプリでの現れ方
BR-001写真は電子小黒板つきの証拠写真写真詳細に電子小黒板を表示
BR-002通信復帰時にクラウドへ同期日報詳細の「同期」で反映、同期状態バッジ
BR-005所属ごとの権限制御利用者の権限バッジ
不変条件提出済み日報には写真1枚以上写真0枚では提出がエラーになる

10よくある質問・トラブルシュート

症状原因・対処
「読み込みに失敗しました」と表示されるバックエンド(:4000)が未起動。app/backendnpm run dev を実行し「再試行」。
一覧は出るが画像が表示されない画像未投入の写真、またはバックエンド停止。ダミー投入スクリプトで画像つき写真を追加可能。
承認・差し戻しボタンが出ないその日報が提出済でない。下書きなら「提出」、承認済/差戻しでは該当ボタンは非表示。
実機で接続できない実機はホストの localhost に到達できません。接続先を PC の LAN IP に変更し、ATS 設定を調整してください(下記制約参照)。
データが消えたバックエンド再起動でインメモリのデータが初期化されます。

11制約事項

  • 接続先: 既定は http://localhost:4000APIClient.origin)。シミュレータはホストと同一ネットワークのため到達可能。実機の場合は同一 LAN 上の PC の IP に変更し、Info.plist の App Transport Security(NSAllowsLocalNetworking)を用途に応じて調整してください(本番は HTTPS 前提)。
  • 署名: シミュレータ実行用に署名を無効化しています。実機配布には開発チーム設定と署名が必要です。
  • 機能範囲: 本アプリは既存データの閲覧とワークフロー操作(提出/同期/承認/差し戻し/分類)が中心です。新規作成フォーム・カメラ撮影・画像アップロードのネイティブ実装は今後の拡張対象です(これらはWeb版で利用可能)。
  • 永続化: バックエンドはインメモリのため、再起動でデータは初期化されます。
  • 認証: ログイン認証はありません。

本マニュアルは uml-workflow-v3 で生成したアプリケーションの実装に基づいています。