🏔️

今週のアップデート(システム全体のモックアップが生成できるようになりました)

に公開

https://tango238.github.io/teamkit/

README.mdから一気に画面モックを生成できるようになりました

前回の記事で feature.yml をイベントストーミングっぽい構造になるようにYAMLフォーマットを変更しました。
https://zenn.dev/tan_go238/articles/9ff48a0a41011f

この変更で、当初は README.md でざっとした業務フローを feature.yml として生成したあと、手作業で修正、そのあとチェックをかける、というようなフローを想定していたのですが、より簡単にREADMEから一気にモック生成できるようにして、フィードバックを早めにもらえるフローにしました。

とはいえ、いままでの /teamkit:check によるチェック機構もそれなりに強力だったと思うので、いままでの create-feature → check → update-feature のフローは残しています。

feature.yml もある程度手入力による修正が必要になると思うので、適当に書いてもフォーマットを自動的に整えてくれるように /teamkit:update-feature に自動フォーマット&補完機能をいれようかなと思っています。

アプリケーション全体のモックアップを生成できるようになりました

/teamkit:plan-app, design-app, create-app でアプリケーション全体のモックアップを生成できるようになりました。

使い方

1. /teamkit:plan-app "アプリの説明(誰が使うのかなど)"

まず、どんなシステムのモックアップなのかを定義するために計画から作ります。
システムの概要やどんな機能があって、誰が使うのか、ナビゲーション構成や関連仕様をコマンド実行時のアプリ説明から対話形式でナビゲーション構成を決めつつ、README.mdと0_navigation.ymlを生成します。

ここでの "アプリの説明" は結構重要で、例えばECサイトの管理画面を作りたいが、要件定義に購入者が見るフロント画面が混ざってしまっている場合があります。
そのシステムを誰が使うのかでメニューや表示される画面の取捨選択にこの"アプリの説明"を使います。そしてそこでうまくできなかった細かい調整は手作業で生成されたファイルを修正して次の工程に進む感じです。

README.md

ホテル施設管理システム(PMS Admin)

概要

ホテル運営会社向けの総合施設管理システム。
客室・設備の管理から、スタッフ配置、料金設定、予約管理、ゲスト対応、清掃管理、売上分析まで、
ホテル運営に必要なすべての業務を一元的に管理・運用できる。

主な機能

  1. 施設管理 - 施設・部屋タイプ・部屋の登録・編集、部屋状態管理、メンテナンス設定
  2. スタッフ管理 - スタッフ情報管理、アカウント発行、権限ロール設定、パスワードリセット
  3. 料金管理 - シーズン設定、レートプラン管理、OTA連携、サイトコントローラー同期
  4. 予約管理 - OTA予約取り込み、予約一覧・カレンダー、部屋アサイン、ダブルブッキング対応、キャンセル処理
  5. 宿泊者管理 - チェックイン案内メール、宿泊者名簿管理、チェックイン・チェックアウト処理
  6. 清掃管理 - 清掃対象一覧、清掃状態管理、備品不足報告、清掃完了通知
  7. 売上分析 - 売上集計、KPI分析(ADR・OCC・RevPAR)、OTA別分析、宿泊者属性分析

対象ユーザー

  • ホテル管理者(施設オーナー/総支配人)
  • 人事担当者
  • フロントスタッフ
  • 予約管理担当者
  • 清掃スタッフ
  • 経理担当者

ナビゲーション構成

  • ダッシュボード
  • 施設管理(施設検索、部屋タイプ管理、部屋管理)
  • スタッフ管理(スタッフ一覧、権限管理)
  • 料金管理(シーズン管理、レートプラン管理、同期ログ)
  • 予約管理(予約ダッシュボード、予約一覧、予約カレンダー、部屋アサイン、ダブルブッキング対応)
  • 宿泊者管理(到着予定一覧、チェックイン処理、チェックアウト処理、宿泊者名簿検索、案内メール送信)
  • 清掃管理(清掃ダッシュボード、清掃対象一覧、部屋状況一覧)
  • 売上分析(売上ダッシュボード、売上集計、分析指標、OTA別分析、宿泊者属性分析)

関連仕様

  • 1_FacilityManagement - 施設管理機能
  • 2_StaffManagement - スタッフ管理機能
  • 3_PricingManagement - 料金管理機能
  • 4_ReservationManagement - 予約管理機能
  • 5_GuestManagement - 宿泊者管理機能
  • 6_HousekeepingManagement - 清掃管理機能
  • 7_SalesAnalysis - 売上分析機能
0_navigation.yml
# ヘッダーが必要かどうか
header: true

# フッターが必要かどうか
footer: true

# 認証ページが必要かどうか
auth_pages: true

# ナビゲーションメニュー
navigation:
  - section: null
    items:
      - ダッシュボード

  - section: 施設管理
    items:
      - 施設検索
      - 部屋タイプ管理
      - 部屋管理

  - section: スタッフ管理
    items:
      - スタッフ一覧
      - 権限管理

  - section: 料金管理
    items:
      - シーズン管理
      - レートプラン管理
      - 同期ログ

  - section: 予約管理
    items:
      - 予約ダッシュボード
      - 予約一覧
      - 予約カレンダー
      - 部屋アサイン
      - ダブルブッキング対応

  - section: 宿泊者管理
    items:
      - 到着予定一覧
      - チェックイン処理
      - チェックアウト処理
      - 宿泊者名簿検索
      - 案内メール送信

  - section: 清掃管理
    items:
      - 清掃ダッシュボード
      - 清掃対象一覧
      - 部屋状況一覧

  - section: 売上分析
    items:
      - 売上ダッシュボード
      - 売上集計
      - 分析指標(KPI)
      - OTA別分析
      - 宿泊者属性分析

2. /teamkit:design-app

計画をもとにサイト構成の設計をします。
具体的には以下の3つのファイルを作成します。

  • 1_layout.yml: システムのレイアウト構成とナビゲーション
  • 1_pages.yml: システム内のページ一覧
  • 1_sitemap.yml: システムのサイトマップ(layoutとpagesから生成)
  • common_layout.html: 1_layout.ymlをもとに生成したHTMLモックのレイアウト確認
1_layout.yml
layout:
  type: sidebar-main
  description: サイドバー付きの管理画面レイアウト(ホテル施設管理システム)

sidebar:
  class: sidebar
  logo:
    text: PMS Admin
    class: logo

  navigation:
    - section: null
      items:
        - id: dashboard
          label: ダッシュボード
          href: dashboard.html
          icon: home
          visible: true

    - section: 施設管理
      items:
        - id: facility-list
          label: 施設検索
          href: facility_list.html
          icon: building
          visible: true
        - id: room-type-list
          label: 部屋タイプ管理
          href: room_type_list.html
          icon: layers
          visible: true
        - id: room-list
          label: 部屋管理
          href: room_list.html
          icon: door-open
          visible: true

    - section: スタッフ管理
      items:
        - id: staff-list
          label: スタッフ一覧
          href: staff_list.html
          icon: users
          visible: true
        - id: permission-list
          label: 権限管理
          href: permission_list.html
          icon: shield
          visible: true

    - section: 料金管理
      items:
        - id: season-list
          label: シーズン管理
          href: season_list.html
          icon: calendar
          visible: true
        - id: rate-plan-list
          label: レートプラン管理
          href: rate_plan_list.html
          icon: tag
          visible: true
        - id: sync-log
          label: 同期ログ
          href: sync_log.html
          icon: refresh
          visible: true

    - section: 予約管理
      items:
        - id: reservation-dashboard
          label: 予約ダッシュボード
          href: reservation_dashboard.html
          icon: clipboard
          visible: true
        - id: reservation-list
          label: 予約一覧
          href: reservation_list.html
          icon: list
          visible: true
        - id: reservation-calendar
          label: 予約カレンダー
          href: reservation_calendar.html
          icon: calendar-days
          visible: true
        - id: room-assign
          label: 部屋アサイン
          href: room_assign.html
          icon: arrow-right-left
          visible: true
        - id: double-booking
          label: ダブルブッキング対応
          href: double_booking.html
          icon: alert-triangle
          visible: true

    - section: 宿泊者管理
      items:
        - id: arrival-list
          label: 到着予定一覧
          href: arrival_list.html
          icon: plane-landing
          visible: true
        - id: checkin
          label: チェックイン処理
          href: checkin.html
          icon: log-in
          visible: true
        - id: checkout
          label: チェックアウト処理
          href: checkout.html
          icon: log-out
          visible: true
        - id: guest-registry
          label: 宿泊者名簿検索
          href: guest_registry.html
          icon: book-user
          visible: true
        - id: guide-mail
          label: 案内メール送信
          href: guide_mail.html
          icon: mail
          visible: true

    - section: 清掃管理
      items:
        - id: housekeeping-dashboard
          label: 清掃ダッシュボード
          href: housekeeping_dashboard.html
          icon: sparkles
          visible: true
        - id: cleaning-list
          label: 清掃対象一覧
          href: cleaning_list.html
          icon: brush
          visible: true
        - id: room-status
          label: 部屋状況一覧
          href: room_status.html
          icon: layout-grid
          visible: true

    - section: 売上分析
      items:
        - id: sales-dashboard
          label: 売上ダッシュボード
          href: sales_dashboard.html
          icon: chart-bar
          visible: true
        - id: sales-report
          label: 売上集計
          href: sales_report.html
          icon: file-text
          visible: true
        - id: kpi-analysis
          label: 分析指標(KPI)
          href: kpi_analysis.html
          icon: trending-up
          visible: true
        - id: ota-analysis
          label: OTA別分析
          href: ota_analysis.html
          icon: share-2
          visible: true
        - id: guest-analysis
          label: 宿泊者属性分析
          href: guest_analysis.html
          icon: pie-chart
          visible: true

header:
  class: header
  components:
    - id: breadcrumb
      class: breadcrumb
      description: パンくずリスト

    - id: header-actions
      class: header-actions
      components:
        - id: notification-badge
          class: notification-badge
          icon: bell
          visible: true
        - id: user-menu
          class: user-menu
          components:
            - id: user-avatar
              class: user-avatar
            - id: user-name

auth_pages:
  layout:
    type: centered-card
    pages:
      - id: login
        href: login.html
        label: ログイン
      - id: password-reset
        href: password_reset.html
        label: パスワードリセット
1_pages.yml
features:
  - name: auth
    pages:
      - name: "ログイン画面"
        actor: "全ユーザー"
        tracking: "auth:1"
      - name: "パスワードリセット画面"
        actor: "全ユーザー"
        tracking: "auth:2"

  - name: 1_FacilityManagement
    pages:
      - name: "施設検索画面"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:140"
      - name: "施設登録画面"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:7"
      - name: "施設更新画面"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:75"
      - name: "施設詳細画面"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:165"
      - name: "部屋タイプ検索画面"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:321"
      - name: "部屋タイプ登録画面"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:197"
      - name: "部屋タイプ更新画面"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:260"
      - name: "部屋検索画面(管理者)"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:450"
      - name: "部屋登録画面"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:349"
      - name: "部屋更新画面"
        actor: "施設管理者"
        tracking: "1_FacilityManagement/ui.yml:395"

  - name: 2_StaffManagement
    pages:
      - name: "スタッフ一覧画面"
        actor: "人事担当者"
        tracking: "2_StaffManagement/ui.yml:3"
      - name: "スタッフ登録画面"
        actor: "人事担当者"
        tracking: "2_StaffManagement/ui.yml:36"
      - name: "スタッフ更新画面"
        actor: "人事担当者"
        tracking: "2_StaffManagement/ui.yml:94"
      - name: "スタッフ削除確認画面"
        actor: "人事担当者"
        tracking: "2_StaffManagement/ui.yml:137"
      - name: "パスワードリセット画面"
        actor: "人事担当者"
        tracking: "2_StaffManagement/ui.yml:180"
      - name: "権限検索画面"
        actor: "人事担当者"
        tracking: "2_StaffManagement/ui.yml:336"
      - name: "権限割り当て画面"
        actor: "人事担当者"
        tracking: "2_StaffManagement/ui.yml:243"
      - name: "権限変更画面"
        actor: "人事担当者"
        tracking: "2_StaffManagement/ui.yml:283"

  - name: 3_PricingManagement
    pages:
      - name: "シーズン検索画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:7"
      - name: "シーズン登録画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:30"
      - name: "シーズン更新画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:81"
      - name: "シーズン削除確認画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:133"
      - name: "レートプラン検索画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:154"
      - name: "レートプラン登録画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:185"
      - name: "レートプラン更新画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:251"
      - name: "レートプラン削除確認画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:297"
      - name: "レートプラン一括更新画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:316"
      - name: "同期ログ画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:355"
      - name: "同期エラー詳細画面"
        actor: "施設管理者"
        tracking: "3_PricingManagement/ui.yml:380"

  - name: 4_ReservationManagement
    pages:
      - name: "予約管理ダッシュボード"
        actor: "予約管理担当者"
        tracking: "4_ReservationManagement/ui.yml:412"
      - name: "予約一覧画面"
        actor: "予約管理担当者, フロントスタッフ"
        tracking: "4_ReservationManagement/ui.yml:109"
      - name: "予約カレンダー画面"
        actor: "予約管理担当者"
        tracking: "4_ReservationManagement/ui.yml:143"
      - name: "予約検索画面"
        actor: "予約管理担当者, フロントスタッフ"
        tracking: "4_ReservationManagement/ui.yml:179"
      - name: "予約詳細画面"
        actor: "予約管理担当者, フロントスタッフ"
        tracking: "4_ReservationManagement/ui.yml:237"
      - name: "部屋アサイン画面"
        actor: "予約管理担当者, フロントスタッフ"
        tracking: "4_ReservationManagement/ui.yml:316"
      - name: "予約キャンセル画面"
        actor: "予約管理担当者, フロントスタッフ"
        tracking: "4_ReservationManagement/ui.yml:360"
      - name: "ダブルブッキング一覧画面"
        actor: "予約管理担当者"
        tracking: "4_ReservationManagement/ui.yml:56"
      - name: "ダブルブッキング再割り当て画面"
        actor: "予約管理担当者"
        tracking: "4_ReservationManagement/ui.yml:82"
      - name: "予約取り込み画面"
        actor: "予約管理担当者"
        tracking: "4_ReservationManagement/ui.yml:4"
      - name: "取り込みエラー一覧画面"
        actor: "予約管理担当者"
        tracking: "4_ReservationManagement/ui.yml:30"

  - name: 5_GuestManagement
    pages:
      - name: "到着予定一覧画面"
        actor: "フロントスタッフ"
        tracking: "5_GuestManagement/ui.yml:58"
      - name: "チェックイン処理画面"
        actor: "フロントスタッフ"
        tracking: "5_GuestManagement/ui.yml:178"
      - name: "フロント宿泊者名簿入力画面"
        actor: "フロントスタッフ"
        tracking: "5_GuestManagement/ui.yml:224"
      - name: "チェックアウト処理画面"
        actor: "フロントスタッフ"
        tracking: "5_GuestManagement/ui.yml:292"
      - name: "宿泊者名簿検索画面"
        actor: "フロントスタッフ"
        tracking: "5_GuestManagement/ui.yml:84"
      - name: "宿泊者名簿詳細画面"
        actor: "フロントスタッフ"
        tracking: "5_GuestManagement/ui.yml:120"
      - name: "名簿保管管理画面"
        actor: "フロントスタッフ"
        tracking: "5_GuestManagement/ui.yml:150"
      - name: "案内メール送信画面"
        actor: "フロントスタッフ"
        tracking: "5_GuestManagement/ui.yml:7"
      - name: "送信エラー一覧画面"
        actor: "フロントスタッフ"
        tracking: "5_GuestManagement/ui.yml:34"

  - name: 6_HousekeepingManagement
    pages:
      - name: "清掃管理ダッシュボード"
        actor: "清掃スタッフ"
        tracking: "6_HousekeepingManagement/ui.yml:279"
      - name: "清掃対象部屋一覧画面"
        actor: "清掃スタッフ"
        tracking: "6_HousekeepingManagement/ui.yml:7"
      - name: "清掃作業記録画面"
        actor: "清掃スタッフ"
        tracking: "6_HousekeepingManagement/ui.yml:39"
      - name: "備品不足記録画面"
        actor: "清掃スタッフ"
        tracking: "6_HousekeepingManagement/ui.yml:82"
      - name: "備品補充依頼画面"
        actor: "清掃スタッフ"
        tracking: "6_HousekeepingManagement/ui.yml:144"
      - name: "部屋状況一覧画面"
        actor: "フロントスタッフ"
        tracking: "6_HousekeepingManagement/ui.yml:215"

  - name: 7_SalesAnalysis
    pages:
      - name: "売上分析ダッシュボード"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:7"
      - name: "売上集計画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:29"
      - name: "売上データ検索画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:67"
      - name: "分析指標画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:102"
      - name: "月次KPI分析画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:139"
      - name: "OTA別売上分析画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:246"
      - name: "直接予約分析画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:281"
      - name: "宿泊者属性分析画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:309"
      - name: "インバウンド分析画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:351"
      - name: "利用目的分析画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:384"
      - name: "総合分析画面"
        actor: "経理担当者"
        tracking: "7_SalesAnalysis/ui.yml:418"
1_sitemap.yml
sitemap:
  name: ホテル施設管理システム(PMS Admin)
  description: ホテル運営会社向けの総合施設管理システム。客室・設備の管理から、スタッフ配置、料金設定、予約管理、ゲスト対応、清掃管理、売上分析まで、ホテル運営に必要なすべての業務を一元的に管理・運用できる。

  auth:
    name: 認証
    pages:
      - id: login
        file: login.html
        title: ログイン
        links:
          - password_reset.html
      - id: password-reset
        file: password_reset.html
        title: パスワードリセット
        links:
          - login.html

  main:
    dashboard:
      name: ダッシュボード
      pages:
        - id: dashboard
          file: dashboard.html
          title: ダッシュボード
          nav_level: 1

    facility:
      name: 施設管理
      pages:
        - id: facility-list
          file: facility_list.html
          title: 施設検索
          mock: 1_FacilityManagement/mock/facility_list.html
          nav_level: 1
          links:
            - facility_form.html
            - facility_detail.html
        - id: facility-form
          file: facility_form.html
          title: 施設登録・編集
          mock: 1_FacilityManagement/mock/facility_form.html
          nav_level: 2
          parent: facility-list
        - id: facility-detail
          file: facility_detail.html
          title: 施設詳細
          mock: 1_FacilityManagement/mock/facility_detail.html
          nav_level: 2
          parent: facility-list
        - id: room-type-list
          file: room_type_list.html
          title: 部屋タイプ管理
          mock: 1_FacilityManagement/mock/room_type_list.html
          nav_level: 1
          links:
            - room_type_form.html
        - id: room-type-form
          file: room_type_form.html
          title: 部屋タイプ登録・編集
          mock: 1_FacilityManagement/mock/room_type_form.html
          nav_level: 2
          parent: room-type-list
        - id: room-list
          file: room_list.html
          title: 部屋管理
          mock: 1_FacilityManagement/mock/room_list.html
          nav_level: 1
          links:
            - room_form.html
        - id: room-form
          file: room_form.html
          title: 部屋登録・編集
          mock: 1_FacilityManagement/mock/room_form.html
          nav_level: 2
          parent: room-list

    staff:
      name: スタッフ管理
      pages:
        - id: staff-list
          file: staff_list.html
          title: スタッフ一覧
          mock: 2_StaffManagement/mock/staff_list.html
          nav_level: 1
          links:
            - staff_form.html
            - staff_delete.html
            - password_reset_staff.html
        - id: staff-form
          file: staff_form.html
          title: スタッフ登録・編集
          mock: 2_StaffManagement/mock/staff_form.html
          nav_level: 2
          parent: staff-list
        - id: staff-delete
          file: staff_delete.html
          title: スタッフ削除確認
          mock: 2_StaffManagement/mock/staff_delete.html
          nav_level: 2
          parent: staff-list
        - id: password-reset-staff
          file: password_reset_staff.html
          title: パスワードリセット(スタッフ)
          mock: 2_StaffManagement/mock/password_reset_staff.html
          nav_level: 2
          parent: staff-list
        - id: permission-list
          file: permission_list.html
          title: 権限管理
          mock: 2_StaffManagement/mock/permission_list.html
          nav_level: 1
          links:
            - permission_assign.html
            - permission_change.html
        - id: permission-assign
          file: permission_assign.html
          title: 権限割り当て
          mock: 2_StaffManagement/mock/permission_assign.html
          nav_level: 2
          parent: permission-list
        - id: permission-change
          file: permission_change.html
          title: 権限変更
          mock: 2_StaffManagement/mock/permission_change.html
          nav_level: 2
          parent: permission-list

    pricing:
      name: 料金管理
      pages:
        - id: season-list
          file: season_list.html
          title: シーズン管理
          mock: 3_PricingManagement/mock/season_list.html
          nav_level: 1
          links:
            - season_form.html
            - season_delete.html
        - id: season-form
          file: season_form.html
          title: シーズン登録・編集
          mock: 3_PricingManagement/mock/season_form.html
          nav_level: 2
          parent: season-list
        - id: season-delete
          file: season_delete.html
          title: シーズン削除確認
          mock: 3_PricingManagement/mock/season_delete.html
          nav_level: 2
          parent: season-list
        - id: rate-plan-list
          file: rate_plan_list.html
          title: レートプラン管理
          mock: 3_PricingManagement/mock/rate_plan_list.html
          nav_level: 1
          links:
            - rate_plan_form.html
            - rate_plan_delete.html
            - rate_plan_bulk.html
        - id: rate-plan-form
          file: rate_plan_form.html
          title: レートプラン登録・編集
          mock: 3_PricingManagement/mock/rate_plan_form.html
          nav_level: 2
          parent: rate-plan-list
        - id: rate-plan-delete
          file: rate_plan_delete.html
          title: レートプラン削除確認
          mock: 3_PricingManagement/mock/rate_plan_delete.html
          nav_level: 2
          parent: rate-plan-list
        - id: rate-plan-bulk
          file: rate_plan_bulk.html
          title: レートプラン一括更新
          mock: 3_PricingManagement/mock/rate_plan_bulk.html
          nav_level: 2
          parent: rate-plan-list
        - id: sync-log
          file: sync_log.html
          title: 同期ログ
          mock: 3_PricingManagement/mock/sync_log.html
          nav_level: 1
          links:
            - sync_error_detail.html
        - id: sync-error-detail
          file: sync_error_detail.html
          title: 同期エラー詳細
          mock: 3_PricingManagement/mock/sync_error_detail.html
          nav_level: 2
          parent: sync-log

    reservation:
      name: 予約管理
      pages:
        - id: reservation-dashboard
          file: reservation_dashboard.html
          title: 予約ダッシュボード
          mock: 4_ReservationManagement/mock/reservation_dashboard.html
          nav_level: 1
          links:
            - reservation_list.html
            - reservation_calendar.html
            - double_booking.html
        - id: reservation-list
          file: reservation_list.html
          title: 予約一覧
          mock: 4_ReservationManagement/mock/reservation_list.html
          nav_level: 1
          links:
            - reservation_detail.html
            - reservation_cancel.html
        - id: reservation-detail
          file: reservation_detail.html
          title: 予約詳細
          mock: 4_ReservationManagement/mock/reservation_detail.html
          nav_level: 2
          parent: reservation-list
        - id: reservation-cancel
          file: reservation_cancel.html
          title: 予約キャンセル
          mock: 4_ReservationManagement/mock/reservation_cancel.html
          nav_level: 2
          parent: reservation-list
        - id: reservation-calendar
          file: reservation_calendar.html
          title: 予約カレンダー
          mock: 4_ReservationManagement/mock/reservation_calendar.html
          nav_level: 1
        - id: room-assign
          file: room_assign.html
          title: 部屋アサイン
          mock: 4_ReservationManagement/mock/room_assign.html
          nav_level: 1
        - id: double-booking
          file: double_booking.html
          title: ダブルブッキング対応
          mock: 4_ReservationManagement/mock/double_booking.html
          nav_level: 1
          links:
            - double_booking_reassign.html
        - id: double-booking-reassign
          file: double_booking_reassign.html
          title: ダブルブッキング再割り当て
          mock: 4_ReservationManagement/mock/double_booking_reassign.html
          nav_level: 2
          parent: double-booking

    guest:
      name: 宿泊者管理
      pages:
        - id: arrival-list
          file: arrival_list.html
          title: 到着予定一覧
          mock: 5_GuestManagement/mock/arrival_list.html
          nav_level: 1
          links:
            - checkin.html
        - id: checkin
          file: checkin.html
          title: チェックイン処理
          mock: 5_GuestManagement/mock/checkin.html
          nav_level: 1
          links:
            - guest_registry_input.html
        - id: guest-registry-input
          file: guest_registry_input.html
          title: フロント宿泊者名簿入力
          mock: 5_GuestManagement/mock/guest_registry_input.html
          nav_level: 2
          parent: checkin
        - id: checkout
          file: checkout.html
          title: チェックアウト処理
          mock: 5_GuestManagement/mock/checkout.html
          nav_level: 1
        - id: guest-registry
          file: guest_registry.html
          title: 宿泊者名簿検索
          mock: 5_GuestManagement/mock/guest_registry.html
          nav_level: 1
          links:
            - guest_registry_detail.html
        - id: guest-registry-detail
          file: guest_registry_detail.html
          title: 宿泊者名簿詳細
          mock: 5_GuestManagement/mock/guest_registry_detail.html
          nav_level: 2
          parent: guest-registry
        - id: guide-mail
          file: guide_mail.html
          title: 案内メール送信
          mock: 5_GuestManagement/mock/guide_mail.html
          nav_level: 1
          links:
            - mail_error_list.html
        - id: mail-error-list
          file: mail_error_list.html
          title: 送信エラー一覧
          mock: 5_GuestManagement/mock/mail_error_list.html
          nav_level: 2
          parent: guide-mail

    housekeeping:
      name: 清掃管理
      pages:
        - id: housekeeping-dashboard
          file: housekeeping_dashboard.html
          title: 清掃ダッシュボード
          mock: 6_HousekeepingManagement/mock/housekeeping_dashboard.html
          nav_level: 1
          links:
            - cleaning_list.html
        - id: cleaning-list
          file: cleaning_list.html
          title: 清掃対象一覧
          mock: 6_HousekeepingManagement/mock/cleaning_list.html
          nav_level: 1
          links:
            - cleaning_record.html
            - supply_shortage.html
        - id: cleaning-record
          file: cleaning_record.html
          title: 清掃作業記録
          mock: 6_HousekeepingManagement/mock/cleaning_record.html
          nav_level: 2
          parent: cleaning-list
        - id: supply-shortage
          file: supply_shortage.html
          title: 備品不足記録
          mock: 6_HousekeepingManagement/mock/supply_shortage.html
          nav_level: 2
          parent: cleaning-list
        - id: supply-request
          file: supply_request.html
          title: 備品補充依頼
          mock: 6_HousekeepingManagement/mock/supply_request.html
          nav_level: 2
          parent: cleaning-list
        - id: room-status
          file: room_status.html
          title: 部屋状況一覧
          mock: 6_HousekeepingManagement/mock/room_status.html
          nav_level: 1

    sales:
      name: 売上分析
      pages:
        - id: sales-dashboard
          file: sales_dashboard.html
          title: 売上ダッシュボード
          mock: 7_SalesAnalysis/mock/sales_dashboard.html
          nav_level: 1
          links:
            - sales_report.html
            - kpi_analysis.html
            - ota_analysis.html
            - guest_analysis.html
        - id: sales-report
          file: sales_report.html
          title: 売上集計
          mock: 7_SalesAnalysis/mock/sales_report.html
          nav_level: 1
          links:
            - sales_data_search.html
        - id: sales-data-search
          file: sales_data_search.html
          title: 売上データ検索
          mock: 7_SalesAnalysis/mock/sales_data_search.html
          nav_level: 2
          parent: sales-report
        - id: kpi-analysis
          file: kpi_analysis.html
          title: 分析指標(KPI)
          mock: 7_SalesAnalysis/mock/kpi_analysis.html
          nav_level: 1
          links:
            - kpi_monthly.html
        - id: kpi-monthly
          file: kpi_monthly.html
          title: 月次KPI分析
          mock: 7_SalesAnalysis/mock/kpi_monthly.html
          nav_level: 2
          parent: kpi-analysis
        - id: ota-analysis
          file: ota_analysis.html
          title: OTA別分析
          mock: 7_SalesAnalysis/mock/ota_analysis.html
          nav_level: 1
          links:
            - direct_booking_analysis.html
        - id: direct-booking-analysis
          file: direct_booking_analysis.html
          title: 直接予約分析
          mock: 7_SalesAnalysis/mock/direct_booking_analysis.html
          nav_level: 2
          parent: ota-analysis
        - id: guest-analysis
          file: guest_analysis.html
          title: 宿泊者属性分析
          mock: 7_SalesAnalysis/mock/guest_analysis.html
          nav_level: 1
          links:
            - inbound_analysis.html
            - purpose_analysis.html
        - id: inbound-analysis
          file: inbound_analysis.html
          title: インバウンド分析
          mock: 7_SalesAnalysis/mock/inbound_analysis.html
          nav_level: 2
          parent: guest-analysis
        - id: purpose-analysis
          file: purpose_analysis.html
          title: 利用目的分析
          mock: 7_SalesAnalysis/mock/purpose_analysis.html
          nav_level: 2
          parent: guest-analysis

  statistics:
    total_pages: 62
    auth_pages: 2
    main_pages: 60

common_layout.html

3. /teamkit:create-app

ここまでできたら、あとはモックアップを生成するだけです。
これまでの仕様で必要な情報はすべて揃っているので生成するのは問題ないはずなのですが、トークン数が多くなってくるとLLMが手を抜き出すので生成したモックアップの検証フェーズを挟んでいます。
具体的な検証内容は次の内容です。

  • 全ページ出力されているか(sitemap.ymlと突合)
  • 画面の項目は正しいか(各ui.ymlと突合)
  • 画面遷移は正しいか(各screenflow.ymlと突合)
  • ナビゲーションは正しいか(common_layout.html, sitemap.ymlと生成されたページのナビゲーションを突合)

お疲れ様でした。ここまでで次のようなシステム全体のモックアップができているかと思います!

Discussion