コンテンツにスキップ

実装状況サマリー

現時点(2026-02-28)のコードベースの実装状況をまとめる。


MVP 完成度

受注者向けのコアフロー(ログイン → タスク一覧 → 受託 → 作業 → 完了 → 報酬確認)が全て実装済み。SSEリアルタイム通知・位置情報保存・期限切れ自動遷移も実装済み。決済・振込は未実装。


バックエンド(server/)

実装済みエンドポイント

エンドポイントメソッド認証説明
/healthGETなしヘルスチェック
/auth/line/callbackPOSTなしLINE Login コールバック・トークン発行
/auth/refreshPOSTなしアクセストークン更新
/tasksPOSTAPIキー(Agent)タスク投稿
/tasksGETJWT(Worker)受注可能なタスク一覧(open のみ)
/tasks/{id}GETなしタスク詳細
/tasks/{id}PATCHJWT(Worker)タスク状態遷移
/tasks/eventsGETBearer/クエリトークンSSEリアルタイム通知ストリーム
/workers/meGETJWT(Worker)ワーカープロフィール取得
/workers/mePATCHJWT(Worker)ワーカープロフィール更新(位置情報含む)
/workers/me/tasksGETJWT(Worker)自分が受注したタスク一覧

タスク状態遷移

open ──(受諾)──→ accepted ──(作業開始)──→ in_progress ──(完了報告)──→ completed
└──────────────────────────────────(キャンセル)──────────────────────→ cancelled
└──────────────────────(期限切れバッチ・60秒間隔)──────────────────→ expired
  • 同時受諾の排他制御を CAS(WHERE status = 'open')で実現
  • expires_at 超過の open タスクは 60 秒間隔のバッチで自動的に expired へ遷移

SSEイベント

GET /tasks/events から以下のイベントをリアルタイム配信。EventSource API 非対応のカスタムヘッダ制限を回避するため、?token= クエリパラメータでも認証を受け付ける。

イベント名発火タイミング
task.createdタスク新規投稿時
task.acceptedタスク受諾時
task.cancelledタスクキャンセル時
task.expired期限切れバッチ実行時

切断・再接続時は Last-Event-ID(またはクエリ ?lastEventId=)でリングバッファ(最大1000件)からイベントを再生。

DBスキーマ

テーブル主要カラム
agentsid, name
api_keysid, agent_id, key_hash
workersid, line_sub, name, avatar_url, phone, kyc_level, refresh_token_hash, lat, lng, location_updated_at
tasksid, agent_id, title, description, reward, status, location_text, lat, lng, execution_method, expires_at, contractor_id, payment_due_days
eventsid, event_type, entity_type, entity_id, payload(監査ログ)

技術スタック

  • Hono 4.x + Bun
  • Drizzle ORM + PostgreSQL
  • JWT (HS256)・APIキー (SHA-256ハッシュ)
  • OpenAPI 3.1 自動生成(/reference

フロントエンド(web/)

実装済み画面

画面パス認証要否備考
ログイン/login不要
LINE コールバック/auth/line/callback不要
オンボーディング(利用規約)/onboarding/terms不要
オンボーディング(プロフィール)/onboarding/profile不要
オンボーディング(位置情報)/onboarding/location不要許可後にサーバーへ lat/lng を保存
タスク一覧/tasksSSEでリアルタイム更新
タスク詳細/tasks/:id不要
作業中/working画面表示時に in_progress へ自動遷移
完了報告/working/report
完了/completion報酬額を ¥X,XXX 形式で表示
履歴・報酬/history
マイページ/mypage

useTaskEvents フック

web/src/hooks/useTaskEvents.ts で SSE 接続を管理。

  • task.created → タスク一覧の先頭に追加
  • task.accepted / task.cancelled / task.expired → 一覧から除去
  • connectionStatus: 'connecting' | 'open' | 'closed' を返す
  • アンマウント時に EventSource.close() でクリーンアップ
  • 再接続時は Last-Event-ID をクエリパラメータで送信

技術スタック

  • React 19 + React Router 7
  • Vite 7 + Tailwind CSS 4
  • PWA(vite-plugin-pwa + Workbox)
  • Cloudflare Pages ホスティング

ドキュメントサイト(docs-site/)

  • Astro + Starlight で構築、Cloudflare Pages にデプロイ
  • docs-site/scripts/sync-docs.mjsdocs/docs-site/src/content/docs/ に同期

未実装・将来実装

機能状況優先度
決済・振込(Stripe Connect)未実装Phase 2
プロフィール編集・設定UI は「準備中」Phase 2
eKYC(身分証確認)未実装Phase 2+
エージェント向け管理ダッシュボード未実装(APIキー手動発行)Phase 2+
評価・「徳」制度設計済み・未実装Phase 3
オークション形式マッチング設計済み・未実装Phase 3

参考ドキュメント