定義が唯一の正
画面は PageDefinition に集約される。YAML / JSON / API のどれで持ってきても、内部では同じ定義に収束する。
一覧・並べ替え・行の編集削除・入力フォーム・必須チェックまで、これで全部。Dart は1行も書かない。
# yaml-language-server: $schema=https://github.com/ASIL-E-Hatake/hatake/raw/main/spec/hatake-page.schema.json
# hatake — MasterPage example: 部門マスタ (Department master)
dsl_version: "1.0"
page:
type: master
id: dept_master
title: 部門マスタ
repository: deptRepository
key: code
# 選択肢を**マスタから引く**例(`optionsSource`)。定義に並びを書けないもの
# ── 取引先・商品・部署のように増える表 ── はこちら。Framework は HTTP も SQL も
# 知らない=一覧と同じ `search` を Repository に投げるだけ。
search:
filters:
- { field: name, label: 部門名, type: text, operator: contains }
- field: parentCode
label: 上位部門
type: select
operator: equals
# 検索条件でも入力欄と同じキーが同じ意味で効く。
optionsSource:
repository: deptRepository
value: code
label: name
limit: 200
# 見せ方の設定は `config`(Renderer とプラグインが読む)。
config: { placeholder: すべて }
table:
rowActions: [edit, delete]
columns:
- { field: code, label: 部門コード, sortable: true }
- { field: name, label: 部門名 }
form:
sections:
- title: 基本情報
fields:
- { field: code, label: 部門コード, type: text, required: true }
- { field: name, label: 部門名, type: text, required: true }
# 上位部門は自分自身のマスタから引く。
- field: parentCode
label: 上位部門
type: select
optionsSource:
repository: deptRepository
value: code
label: name
limit: 200
# 部門長は**選んだ部門に属する人**だけを出す(`parentKey` で親の値が
# 絞り込み条件として渡る=`{ deptCode: <上で選んだ値> }`)。
- field: managerNo
label: 部門長
type: select
optionsFrom: code
optionsSource:
repository: employeeRepository
value: employeeNo
label: employeeName
parentKey: deptCode
limit: 100
actions:
- { id: create, type: create, label: 新規登録 }書いたら推測で終わらせずに検証する。知らないキーは黙って捨てられるので、「書いた気になって効いていない」を防ぐのはこれ。
npx -p @hatake-fw/api hatake validate dept_master.yaml人と AI が書くのは定義だけ。PageDefinition が唯一の正で、Renderer は業務を知らない。 データの流れと層の責務も 図解 にある。
上の YAML を貼って、その場で画面にできる場がある。プレイグラウンド。
sortble → sortable の間違い?)?yaml= に載る)ので、そのままレビューに貼れるブラウザだけで動く(Flutter Web)。インストールも登録も要らない。
| やりたいこと | 行き先 |
|---|---|
| 案件を始める(画面を書く前に決めること) | 先に決めること |
| 「こうしたい」から書き方を引く | 機能別の書き方 |
| 全体像を絵で見る | 図解 |
| 動いている画面を触る | デモ(右下の札で役割を切り替えると、隠れる列・出ないボタンが見える) |
| 自分で書いた定義を試す | プレイグラウンド |
| 自分の AI に hatake を書かせる | AI に書かせる |
| 導入手順・仕組み・写経用サンプル | GitHub のドキュメント |
業務ロジック、ワークフローエンジン、DB、認証、認可、バックエンド API、ORM。持たないと決めているので、そこは普通に自分のコードで書く。
この境界は散文ではなく引ける表にしてある。「これは定義で書けるのか、自分で書くのか」を1発で。
npx -p @hatake-fw/api hatake where 締め処理 # → 枠組みの外(なぜ持たないか+画面側でできること)
npx -p @hatake-fw/api hatake where 一覧の並べ替え # → 定義で書ける(書くキーと次に引く道具)AI に「締め処理も作って」と頼むと、外だと言えないまま Dart を書き始める。それを止めるための表で、MCP なら hatake_where として渡る。詳しくは 先に決めること と 仕組みと責務分担。