Master Schema Specification

提供:moorestechWiki
2024年10月11日 (金) 22:56時点におけるSakastudio (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

マスターのスキーマの仕様書

基本的なフォーマット

基本的にroot要素にdataの配列が来るものとする。

id: idName
type: object
isDefaultOpen: true
properties:
- key: data
  type: array
  overrideCodeGeneratePropertyName: OverrideName
  items:
    type: object
    properties:
    - key: masterId
      type: uuid
      autoGenerated: true

各プロパティの詳細

基本のプロパティ

プロパティ名 説明 プロパティの型 フォーマット エディタ上の挙動 コード生成時の挙動
id そのスキーマのid string 任意の文字列
key その要素の名前 string 任意の文字列
type その要素の型 string array, object, string, number, integer, boolean,

uuid, vecotr2, vecotr3, vecotr4, vecotr2Int, vecotr3Int, vecotr4Int

properties object型の中に入っている要素を列挙する。 object array 各要素はkeyがMUST。typeかrefのどちらかMUST
items array型の型を定義する。 object typeとそのタイプの定義に必要な付随要素
autoGenerated uuid専用、エディタ上でuuidを自動生成する。 boolean
foreignKey 外部キーとなる要素を指定する。 object schemaId, keyPath, displayElementPathの3要素のobject型

パスは絶対パス固定?

optional その要素がnullもしくは要素無しでも良いか。 boolean
default その要素のエディタ上でのデフォルト値を指定する。 typeによる
enum string要素をいくつかの値に固定する。 string array
ref 他のスキーマをインポートする string スキーマIDを指定する

旧OneOf関連

プロパティ名 説明 プロパティの型 フォーマット エディタ上の挙動 コード生成時の挙動
switch 要素の値ごとのスキーマを変更するとき、その要素のパスを指定する

caseとセットで使う。

string 絶対パス or 相対パス

指定出来るタイプはstring, number, integer, boolean

case switchで指定した要素でどのスキーマに分岐するかを記述する。

switchとセットで使う。

object array when, typeがMUST
when case内で、そのスキーマとなる値を設定する。 switchで指定したタイプによる

エディタ、コード生成関連

プロパティ名 説明 プロパティの型 フォーマット エディタ上の挙動 コード生成時の挙動
isDefaultOpen その要素を表示時に展開しておくか boolean
overrideCodeGeneratePropertyName コードジェネレート時のプロパティ、クラス名を上書きする string 任意の文字列

新規プロパティ

プロパティ名 説明 プロパティの型 フォーマット エディタ上の挙動 コード生成時の挙動
fixedParameter パスで指定した要素を特定の値に固定する object path 指定する要素のパス

value 固定する値

無し

今は使ってないが将来的に必要になる機能

ユーザーによるスキーマ拡張

schemaExtensionディレクトリにhogehoge.yamlが入っていて、各yamlが拡張情報を持っている感じ。


以下のような拡張スキーマがあったとき

extensions:
- schemaId: item
  path: properties[0]/items/properties
  schema:
    - key: hp
      type: integer
      default: 100
      optional: true

こうする

変更前 変更後
id: items
type: object
isDefaultOpen: true
properties:
- key: data
  type: array
  items:
    type: object
    thumbnail: imagePath
    properties:
    - key: itemGuid
      type: uuid
      autoGenerated: true
    - key: name
      type: string
    - key: maxStack
      type: integer
      default: 100
id: items
type: object
isDefaultOpen: true
properties:
- key: data
  type: array
  items:
    type: object
    thumbnail: imagePath
    properties:
    - key: itemGuid
      type: uuid
      autoGenerated: true
    - key: name
      type: string
    - key: maxStack
      type: integer
      default: 100
    # ---- ここが追加分 ----
    - key: hp
      type: integer
      default: 100
      optional: true


...みたいな

スキーマの拡張の順番等をちゃんと定義しないといけなかったり、例みたいにindexを直で指定すると他のスキーマを拡張したときに意図した拡張ができないと言ったリスクがあるので、色々検討事項が多い。

ただ、これはスキーマをロードしてUIを構築する前段階で行うものなので、今置いておいても大きな問題にはならないはず。

複数modロード

複数のmodをロードするということは、当然複数の実データファイルを読み込む必要がある。

どうすればいいか思いついていないが、root直下のdata配列だけマージする、もしくはmergeableといったプロパティを容易して、複数ロードしたときにマージするかオーバーライドするかと言った情報を付与できるようにするのが良いのかもしれない。

パッケージマネージャー

package.jsonみたいなものを定義して、パッケージマネージャーからmodをDLしてnode_cache的なところに全部ぶち込むみたいな処理をする必要がある。