本文へ移動
Wagby11
マニュアルのグループを選ぶ

WAGBY11 MANUAL / 02

管理するデータをモデルとして定義する

商品管理を例に、モデルから標準画面を用意する方法を説明します。

最終更新日:

モデルの小目次へ

1. このページで伝える機能

Wagby11では、商品・顧客・受注など、管理するデータの単位をモデルとして定義します。モデルと必要な権限・検索・画面の設定を組み合わせると、登録・検索一覧・詳細・更新・削除の標準画面を用意できます。

このグループでは「商品」を例に、項目、主キー、自動採番、一意制約、監査項目を順番に説明します。

商品モデルを新規追加し、既存の顧客モデルとシステム定義は保持しています。操作する利用者には既存のG_ADMINロールを割り当てています。

表示名・英語識別名・DB物理名の使い分けは、モデルと項目の名前を決めるで説明します。

2. Wagby11で実現できること

2.1 商品を管理する入口を用意する

商品モデルとメニューを追加すると、「商品管理」の「商品検索」から検索一覧を開けます。モデルの追加だけではメニュー項目は作られないため、入口も合わせて定義します。

商品管理の分類と商品検索への入口があるメニュー
既存の顧客管理と並べて商品管理を追加した例です。

2.2 同じ種類のデータをまとめて扱う

デスクライトとブックスタンドは、商品コード・商品名・単価という共通の項目を持つ「商品」のデータとして登録します。データごとに別のモデルを作る必要はありません。

商品ID1と2の商品が並ぶ商品の検索一覧
商品コードと商品名で検索でき、商品ID・商品コード・商品名・単価を一覧で確認できます。画像は商品コード変更前の状態です。

2.3 モデル区分を決める

区分主な用途例
Mマスタ:業務の基本となる情報を、繰り返し参照して使います。商品、顧客、部署
Tトランザクション:業務で発生する出来事を、その都度記録します。受注、申請、日報
O選択肢・コード:入力時に選ぶ値と、その表示名を管理します。ステータス、区分
Sシステム管理情報:ログインや権限など、Wagby11の運用に使う情報です。システムユーザー、ロール

商品は受注のたびに参照する基本情報なので、この例ではMにします。対して「いつ、どの商品を、いくつ受注したか」を記録する受注はT、受注画面で選ぶ「受付中・完了」などの区分はOが向いています。モデル区分は用途の分類であり、区分だけで操作権限は決まりません。誰に何を許可するかは、認証と認可で別に設定します。

業務領域ごとに設計情報を整理する方法は、ドメインでモデルを分類するを参照してください。

2.4 使わなくなったモデルと関連定義を取り除く

試作で追加したモデルや、業務で使わなくなったモデルは、関連する設計情報と合わせて整理します。モデルのYAMLだけを削除すると、メニューや他モデルの参照が残り、定義の読み込みや生成でエラーになる場合があります。

例えば、練習用に追加した商品モデルProductを取り除く場合は、次の範囲を確認します。実際に使っている商品管理を削除する指示ではなく、整理する対象の例です。

対象確認・整理する内容
モデルの定義対象のモデルYAMLと、そのモデルに含まれる項目・権限・検索・一覧などの定義を確認します。
画面定義uidefs内のレイアウトなど、対象モデル用の定義を整理します。他から使う定義は残します。
メニューと表示文言対象モデルの検索・登録などへの入口と、対応するpropertiesの文言を整理します。同じファイルに残す業務の項目があれば、その部分は保持します。
明示参照ルートのmodulesやメニューなどにある$refを確認し、削除するファイルへの参照を取り除きます。
他モデルや機能からの利用参照項目・ルックアップ・親子関係・式など、対象モデルを使う定義を調べます。参照を外すか、別モデルへ切り替えるかを決め、残す機能との整合性を保ちます。
操作マニュアル取り除いた機能の案内やリンクを見直し、残す画面・操作と一致させます。

通常の自動読み込みでは、モデルYAMLを取り除くと次の読み込みから対象外になります。明示参照がある場合は、参照元も更新する必要があります。共用のドメインやロールなどは、他のモデルから使われていないか確認し、対象モデルと一緒に機械的に削除しません。

モデル定義の削除と、DBの整理を分ける

モデルそのものを定義から取り除いても、DBテーブルや保存済みデータは自動では削除されません。モデル削除に伴うテーブル削除SQLは自動生成されないため、DBをどう扱うかは別に決めます。保管が必要なデータや参照元を確認し、DBの整理が必要な場合はバックアップと移行・削除の計画を別途用意します。

整理後に残す機能を確認する

定義を整理した後は、設計情報の検証・コード生成・必要なビルドを行い、REST APIとWeb UIを再起動します。削除したモデルへの入口が残っていないこと、残すメニューや参照先が使えること、既存データを参照できることを確認します。定義ファイルを外しただけで、起動済みのアプリケーションが即時に切り替わるわけではありません。

3. AIへの指示例

最小限の指示例

商品コード・商品名・単価を管理できる商品管理を作ってください。

モデルの区分、項目の型、必須条件、主キー、検索項目、権限などはAIが類推して補います。提案された仕様を確認し、業務上の条件が決まっている部分は詳細な指示で指定します。

より詳細な指示例

このWagby11インストールフォルダのREADME.mdとHOWTODEV.mdを読み、guideと必要なreferenceを確認してください。
既存の顧客管理とシステム定義を保持し、商品管理を標準機能で追加してください。

・モデル名は「商品」、英語名はProduct、モデル区分はマスタとしてください。
・商品IDは自動採番する主キーにしてください。
・商品コードは最大30文字で必須とし、他の商品と重複できないようにしてください。
・商品名は最大100文字で、登録・更新時とも必須にしてください。
・単価は任意入力の固定小数点数とし、全体12桁・小数部2桁としてください。
・商品コードと商品名で検索し、一覧には商品ID、商品コード、商品名、単価を表示してください。
・登録者・登録日時・更新者・更新日時を自動記録し、詳細画面で確認できるようにしてください。
・G_ADMINロールに登録・参照・更新・削除を許可してください。
・「商品管理」メニューに「商品検索」を追加してください。

既存のProductがある場合は上書きせず、既存定義・データを確認して差分を扱ってください。
設計情報の検証・コード生成・起動を行い、登録・検索・更新・重複チェックと監査値を確認してください。
一般利用者向け操作マニュアルも追加または更新し、検証・HTML生成を確認してください。
変更したファイルと動作確認結果を説明してください。

AIには、管理するデータだけでなく、入力する項目、検索方法、利用者の権限も伝えます。生成・起動の流れはAIへの指示からアプリケーションを作る流れを参照してください。

使わなくなったモデルを整理する指示

最小限の指示例

練習用に追加した商品モデルを取り除きたいので、関連する定義と他の機能への影響を調べてください。DBと既存データは保持してください。

AIは対象モデルや関連するファイルを、既存の定義と業務の説明から類推して調べます。同じような名前のモデルがある場合や、残す業務から参照されている場合は、対象と整理方法を確認します。この短い指示だけで、次の詳細例と同じ範囲が対象になるとは限りません。

より詳細な指示例

練習用に追加した商品モデルProductを設計情報から取り除いてください。
・最初にモデル本体、uidefs、メニュー、表示文言、modulesなどの明示参照、他モデルからの参照を調べてください。
・残す業務がProductを使っている場合は、参照を外すか別モデルへ切り替えるかの確認事項を示し、未解決のまま定義を削除しないでください。
・Product専用の定義とメニュー項目・文言を整理し、共用ファイル内の他の業務に必要な部分は残してください。
・操作マニュアルの不要な案内やリンクも整理してください。
・顧客管理、システムモデル、他のモデルに必要なロール・ドメイン・権限を保持してください。
・DBテーブルと既存データは保持し、テーブル削除やデータ削除のSQLは作成・実行しないでください。
設計情報の検証・コード生成・必要なビルド後、REST APIとWeb UIを再起動し、残すメニューと参照機能が使えることを確認してください。
変更したファイル、残した共用定義、検証・動作確認の結果を説明してください。

4. 編集されるAppSchemaの例

以下は撮影に使用した商品モデルの全体例です。配置先はdesigner/repository/appschema/Product.yamlです。entityがモデルと項目、permissionsが操作権限、functionsが検索・一覧、uiが画面の設定を表します。

entity:
  name: 商品
  name_en: Product
  type: M
  audit: true
  attributes:
    - name: 商品ID
      name_en: productId
      type: autoid
      pk: true
    - name: 商品コード
      name_en: productCode
      type: string
      length: 30
      not_null: true
      unique: uq_product_code
      validation:
        presence: { create: error, update: error }
    - name: 商品名
      name_en: productName
      type: string
      length: 100
      validation:
        presence: { create: error, update: error }
    - name: 単価
      name_en: unitPrice
      type: decimal
      precision: 12
      scale: 2
    - { name: 登録者, name_en: createdBy, type: string, reserved: true, readonly: true }
    - { name: 登録日時, name_en: createdAt, type: datetime, reserved: true, readonly: true }
    - { name: 更新者, name_en: updatedBy, type: string, reserved: true, readonly: true }
    - { name: 更新日時, name_en: updatedAt, type: datetime, reserved: true, readonly: true }
    - { name: バージョン, name_en: version, type: number, hidden: true, reserved: true }
permissions:
  - role: G_ADMIN
    crud: [C, R, U, D]
functions:
  - description: 商品検索
    filter:
      - name_en: productCode
      - name_en: productName
    list:
      - name_en: productId
      - name_en: productCode
      - name_en: productName
      - name_en: unitPrice
ui:
  enabled: true

通常のautoモードでは、モデルをこのフォルダに置くと読み込まれます。

実際の設計情報には固定識別子migration_idが付与されますが、ここでは省略しています。目的と手動編集時の注意点はモデル・項目の固定IDを参照してください。

商品検索へのメニュー

designer/repository/menus/product-menu.yamlに配置します。

id: product-menu
order: 20000
title_key: menu.product.title
children:
  - kind: item
    id: product-search
    order: 10000
    title_key: menu.product.search
    target: { kind: entity, entity: Product, screen: search }

表示文言はdesigner/repository/menus/product-menu.propertiesに配置します。

menu.product.title=商品管理
menu.product.search=商品検索

項目の詳しい役割は、このグループの残りのページで説明します。利用者はYAMLの構文を暗記せず、AIに業務上の要望を伝えるところから始められます。

5. 参考資料

guide:モデルを作成する
designer/docs/appschema/html/guide/03-model/01-create-model.html
guide:標準画面
designer/docs/appschema/html/guide/07-screens/01-standard-screens.html
reference:modules
designer/docs/appschema/html/reference/05-modules.html
reference:entity
designer/docs/appschema/html/reference/06-entity.html
reference:menus
designer/docs/appschema/html/reference/13-menus.html
reference:固定識別子
designer/docs/appschema/html/reference/06-entity.html