Skip to content

拡張を差し込む(config)

本体を直さずに、独自の描画・処理・型をプラグインで足す。

config は「Framework が意味を知らない設定」を渡す場所。中身は自由で、受け取るのはフォーマッタ・Renderer・プラグインの側。

yaml
- { field: price, label: 価格, type: number, format: currency,
    config: { symbol: "¥", negative: triangle } }

actions:
  - { id: csv, type: export, label: CSV出力,
      config: { filename: 売上明細, bom: true, delimiter: "," } }

5か所に書ける

field / column / filter / action / theme。どこに書いても「その要素の追加設定」という意味になる。

一番よく使うのはフォーマッタのオプション

format で指定した整形の細かい挙動は config で変える。formatconfig は同じ要素に並べて書くconfig を別の場所に書いても届かない)。

format主な config
currencysymbol decimals negativeminus / triangle / blackTriangle / paren
percentdecimals ratio(true で ×100)
datepatternyyyy/MM/dd など)
warekistylelong / short
maskkeep(残す桁数) char

会計帳票で負の金額を △1,234 にしたいときは negative: triangle。日本の業務システムでは地味に効く。

Framework は中身を検証しない

config閉じていない(知らないキーを書いてもエラーにならない)。受け取る側が知らないキーは黙って無視される。

つまり config の綴りを間違えても気づけない。symbolsymbold と書いたら通貨記号が出ないだけで、何も言われない。効いていないと思ったらまず綴りを確認する

ここは他のキーと扱いが違う。定義の他の部分は validate が知らないキーを弾いてくれるが、config の中はプラグインの領域なので Framework が判断できない。

本体を直さずに拡張する

config は「プラグインで足した機能に引数を渡す」ための口でもある。hatake の拡張は全部この形をとる。

足したいものやること定義での書き方
独自の入力欄名前で登録するtype: productPicker
独自の整形名前で登録するformat: employeeCode
独自の検証名前で登録するvalidators: [{ type: ourCodeRule }]
独自の処理名前で登録するtype: plugin, plugin: approve
独自の計算名前で登録するcomputed: { op: withTax }

どれも組み込みの名前がある開いた文字列なので、Framework 本体を fork せずに増やせる。増やした機能に渡すパラメータが config

何を config に入れて、何を入れないか

config に業務ロジックの分岐条件を詰め込むと、定義を読んでも画面の挙動が分からなくなる。目安はこう。

  • 入れる: 見せ方の細部(記号、桁数、パターン、ファイル名)
  • 入れない: 「この条件のときだけ表示する」(visibleWhen がある)、「このロールだけ」(roles がある)

DSL に用意されているキーで表現できるものは、そちらで書く。config は最後の逃げ道であって、最初に手を伸ばす場所ではない。

書けるキー

キー書く場所必須既定値有効なページ種別説明
configactionobjectconfig任意crud dashboard detail form master report search wizardPlugin / renderer specific extra settings.
configcolumnobjectconfig任意crud dashboard detail form master report search wizardPlugin / renderer specific extra settings.
configdashboardItemobjectdashboardItem.config任意dashboardExtra settings (formatter options, height, ...).
configfieldobjectconfig任意crud dashboard detail form master report search wizardPlugin / renderer specific extra settings.
configfilterobjectconfig任意crud dashboard master report searchPlugin / renderer specific extra settings.
configthemeobjectconfig任意すべてPlugin / renderer specific extra settings.

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