Skip to content

一覧に列を出す

表示する列、幅、並べ替え、値の見せ方。

一覧に出す列は table.columns に並べる。並べた順がそのまま画面の左からの順になる。

yaml
page:
  type: master
  id: customer_master
  title: 顧客マスタ
  repository: customerRepository
  key: code

  table:
    columns:
      - { field: code, label: コード, width: 120, sortable: true }
      - { field: name, label: 顧客名, sortable: true }
      - { field: sales, label: 売上, format: currency }

field がデータ側の項目名、label が画面に出る見出し。label を省くと field がそのまま出るので、業務の言葉にしたいときは書く。

幅は基本書かない

width を省くと内容に応じて配分される。書くのは「コードは短いのに広く取られてしまう」ような、見た目が崩れる列だけでいい。全列に書くと画面幅が変わったときに破綻する。

値の見せ方は format で変える

金額・日付・和暦などは、データを加工してから渡すのではなく format で指定する。加工を自分のコードでやると、同じ項目を別の画面に出したときに揃わなくなる。

yaml
- { field: sales,     label: 売上,   format: currency, config: { symbol: "¥" } }
- { field: updatedAt, label: 更新日, format: wareki }

書ける format の一覧は下の表と、チートシートにある。足りない見せ方はプラグインで足す。

並べ替えは列ごとに許可する

sortable: true を書いた列だけ、見出しを押して並べ替えられるようになる。並べ替えの実行はデータ側に投げられるので、Repository がその指定を受け取って処理する。

columns はもう1か所ある

layout.columns(1行あたり何項目並べるか)は別物。名前が同じだけで、意味も書く場所も違う。混ざりやすいので、下の「よくある間違い」も見ておくとよい。

書けるキー

キー書く場所必須既定値有効なページ種別説明
tablecrudPageobjecttable任意crudThe results table.
tablemasterPageobjecttable任意masterThe results table.
tablereportPageobjecttable任意reportDetail columns (number columns print right-aligned).
tablesearchPageobjecttable任意searchThe results table.
columnsdashboardItemarraycolumn任意dashboardColumns for a table card.
columnsfieldarraycolumn任意crud dashboard detail form master report search wizardChild-row grid columns, for type: subTable (master-detail). The field's value is then a list of records.
columnslayoutinteger任意1crud dashboard detail form master report search wizardItems per row on wide layouts.
columnstablearraycolumn任意crud master report search
labelactionstring必須crud dashboard detail form master report search wizard
labelcolumnstring必須crud dashboard detail form master report search wizard
labelfieldstring必須crud dashboard detail form master report search wizard
labelfilterstring必須crud dashboard master report search
labelmenuItemstring任意すべて
labeloptionstring必須crud dashboard detail form master report search wizard
labeloptionsSourcestring任意"name"crud dashboard detail form master report search wizardField of a row to show.
labelreportGroupstring必須reportHeading label shown next to the group's value.
widthcolumnnumber任意crud dashboard detail form master report search wizardFixed width in logical pixels; omit for flexible.
sortablecolumnboolean任意falsecrud dashboard detail form master report search wizard
formatcolumnstringcurrency / percent / date / wareki / postal / mask ほか)任意crud dashboard detail form master report search wizardDisplay formatter name (open string). Built-ins: currency, percent, date, wareki, postal, mask.
formatdashboardItemstringcurrency / percent / date / wareki / postal / mask ほか)任意dashboardDisplay formatter for a metric value (open string). Built-ins: currency, percent, date, wareki, postal, mask.
formatfieldstringcurrency / percent / date / wareki / postal / mask ほか)任意crud dashboard detail form master report search wizardDisplay formatter name (open string). Built-ins: currency, percent, date, wareki, postal, mask.

この表は spec/reference.json から生成している(JSON Schema が正)。手元では npx hatake reference <キー名> で同じものが引ける。

近い例

例は丸ごと写して直すのが一番速い。以下は CI で検証済み(そのまま動く形)。

ファイル種別画面どういうときに使うか
customer_master.yamlcrud顧客マスタ検索して一覧に出して、その場で登録・修正・削除まで面倒を見る画面が欲しい
dept_master.yamlmaster部門マスタコードと名前だけの小さなマスタを、最小の定義でメンテしたい
product_search.yamlsearch商品照会検索して一覧を見るだけ(登録も更新もさせない)画面が欲しい
customer_detail.yamldetail顧客詳細1件の内容を読み取り専用で表示したい(一覧から開く先)
order_entry.yamlform受注入力ヘッダと明細行を1画面で入力して、まとめて保存したい
order_entry_paged.yamlform受注入力(明細別テーブル)明細が何百行もあるので、子テーブルから外部キーで引いてページングしたい
sales_dashboard.yamldashboard売上ダッシュボード件数・金額・グラフのカードを並べて、まず数字を見せたい
sales_report.yamlreport売上明細表一覧の印刷版が欲しい。顧客ごとに小計を出して、CSV も落としたい、紙にも刷りたい
roles_app.yamlapp人事管理見せる相手を役割で変えたい(画面ごと隠す・列や項目だけ隠す・押せる人を絞る)

よくある間違い

ページ直下に columns を書く

なぜ駄目か 列は一覧(table)の持ち物。columns が有効なのは table / dashboardItem / field(明細)の中だけ。

こう直す table.columns に入れる。layout.columns(1行あたりの項目数)とは別物なので混同しないこと。

yaml
page:
  type: search
  id: order_search
  title: 受注照会
  repository: orderRepository
  columns:
    - { field: orderNo, label: 受注番号 }
yaml
page:
  type: search
  id: order_search
  title: 受注照会
  repository: orderRepository
  table:
    columns:
      - { field: orderNo, label: 受注番号 }

form / detail / wizard / dashboardtable を書く

なぜ駄目か table(一覧)を持つのは crud / master / search / report だけ。単票やステップ入力は1件を扱うので一覧を持たない。

こう直す 一覧も要るなら crud にする。1件の中に明細行を持ちたいだけなら、fieldtype: subTable にして columns を書く(親子・明細)。

yaml
page:
  type: form
  id: order_entry
  title: 受注入力
  repository: orderRepository
  table:
    columns:
      - { field: productName, label: 商品 }
yaml
page:
  type: form
  id: order_entry
  title: 受注入力
  repository: orderRepository
  form:
    sections:
      - fields:
          - field: lines
            label: 明細
            type: subTable
            columns:
              - { field: productName, label: 商品 }
              - { field: qty, label: 数量, type: number }

spec/pitfalls.json から生成。各項目は CI で検証済み(間違いは本当に落ち、正しい方は本当に通る)。手元では npx hatake pitfalls <キー名>

実物を見る

デモアプリの「受注照会」がこれを使っている。 デモを開く