Header定義
概要
YAMLのheaderハッシュの詳細です。
記入例
header:
input_path:
- path: Unit/Unit.xlsx
sheet: Unit
row: 5
base_type: Normal
source_type: Normal
container_type: WienerDictionary
output_path: Unit
name: Unit
詳細
input_path
input_path:
- path: Unit/Unit.xlsx
- 定義:条件付き(multi_yaml_action以外は必須)
表入力の入力元をリストで指定します。
入力が1つだけの場合も必ずリストで記述します。
指定できる入力元は以下の通りです。
.xlsx/.xlsm: ローカルExcel入力。input_search_pathからの相対パスを指定します。https://docs.google.com/spreadsheets/d/{spreadsheetId}/...: Google Sheets入力
ワイルドカードはローカルExcel入力でのみ使用可能です。
Google Sheets URLの gid は無視され、header.sheet のシート名を使用します。
Google Sheets入力は Standalone版とUnity Asset版の両方で使用可能です。
# ローカルExcel
header:
input_path:
- path: Unit/Unit.xlsx
sheet: Unit
row: 5
# ローカルExcelのワイルドカード
header:
input_path:
- path: Unit/*.xlsx
sheet: Unit
row: 5
# Google Sheets
header:
input_path:
- path: https://docs.google.com/spreadsheets/d/xxxxxxxx/edit#gid=0
sheet: Unit
row: 5
ワイルドカードを使うと、同じシート構造のExcelをフォルダ単位でまとめて読み込めます。例えばユニットデータを複数のExcelに分けておき、Unit/*.xlsx と指定しておくと、新しいExcelを追加してもYAMLを変更せずに読み込み対象を増やせます。
development_input_path
development_input_path:
- path: Unit/Unit_Test.xlsx
- 定義:オプション
設定ファイルで development: true の場合にのみ読み込まれる追加の表入力。
input_path と同じ形式でパスをリストで指定します。development: true のときは input_path と development_input_path の両方を読み込みます。development: false のときは development_input_path は無視されます。
開発専用の入力(テストデータなど)を本番用の入力と分離するために使用します。YAML定義を重複させる必要がなくなります。
# 開発モード: Unit.xlsx + Unit_Test.xlsx を読み込む
# 本番モード: Unit.xlsx のみ読み込む
header:
input_path:
- path: Unit/Unit.xlsx
development_input_path:
- path: Unit/Unit_Test.xlsx
sheet: Unit
row: 5
...
sheet
sheet: Unit
- 定義:条件付き(multi_yaml_action以外は必須)
表入力のシート名を指定します。
row
row: 5
- 定義:オプション
- デフォルト:1
表入力の解析開始行を指定します。
例えば5を指定した場合、1~4行目まではコメント行として扱えます。
base_type
base_type: Normal
- 定義:オプション
- デフォルト:Normal
基本タイプを以下の中から指定します。
| 値 | 説明 |
|---|---|
| Normal | データ、定数、列挙の出力時に指定 |
| NoOutput | データを出力しない場合に指定。列挙のリレーションのみ使用する場合や、定数・列挙結合時に使用 |
| MultiYamlAction | 複数のYAMLに跨る処理を行う場合に指定。input_path・sheetの定義は不要(multi_yaml_actionの定義を参照) |
| ManualOnly | データの出力は行わないが、マニュアルファイルのみ出力したい場合に指定。fields.manual_onlyは設定不要 |
source_type
source_type: Normal
- 定義:オプション
- デフォルト:Normal
ソースタイプを以下の中から指定します。
| 値 | 説明 |
|---|---|
| Normal | データ出力時に指定 |
| Enum | 列挙出力時に指定 |
| Const | 定数出力時に指定。C#はバイナリと読み取りソースを出力 |
| ConstSource | 定数ソース出力時に指定。C#は定数ソースファイルを出力。C#以外はConstと同様のデータを出力 |
container_type
container_type: WienerDictionary
- 定義:オプション
- デフォルト:List
コンテナタイプを以下の中から指定します。
| 値 | 型 | 説明 |
|---|---|---|
| List | T[] | 配列形式で出力 |
| Dictionary | Dictionary<T, U> | 辞書形式で出力。fieldsの最初のkeyがキーとなる。キーが重複した場合はエラー |
| DictionaryList | Dictionary<T, U[]> | 辞書配列形式で出力。fieldsの最初のkeyがキーとなる |
| WienerDictionary | Dictionary<T, U> | WienerDictionary形式で出力。fieldsの最初のkeyがキーとなる。キーが重複した場合はエラー |
| WienerDictionaryList | Dictionary<T, U[]> | WienerDictionaryList形式で出力。fieldsの最初のkeyがキーとなる |
辞書形式の特性比較
| 形式 | プラットフォーム対応 | 検索速度 | メモリ消費 |
|---|---|---|---|
| Dictionary / DictionaryList | プラットフォームネイティブ辞書 Unity: DictionaryUE5: TMap | 高速 | 多い |
| WienerDictionary / WienerDictionaryList | Unity: 二分探索 UE5: TMap(BPで使用するためTMapが必要) | Unity: O(log n) UE5: 高速 | Unity: 少ない(Listと同等) UE5: 多い |
output_path
output_path: Unit
- 定義:条件付き(base_typeがNormalの場合は必須)
出力するフォルダ名を指定します。
name
name: Unit
- 定義:条件付き(base_typeがNormalの場合は必須)
名前を指定します。 ファイル名、クラス名、変数名になります。
group
group: Unit
- 定義:オプション
- デフォルト:""
C#/UE5にて使用可能です。
複数のデータを用意するが、使用時に2つ以上同時に使わない場合の形式です。
通常データファイルはUnit.bytesに全て結合されますが、groupを指定した場合は指定した値のファイルが出力されます。
(記述例ではUnit.bytesを出力)
groupを使用する場合は以下の条件を満たしてください。
- 1データにつき1つの表入力を用意
- 上記の全ての表入力はシート名や列などの形式を同じにする(行数は同じでなくてよい)
- ローカルExcel入力をワイルドカードで指定する場合は、同一のフォルダに入れて、groupに関与しないExcelは入れない
- スプレッドシートではないこと
例)ユニットデータを複数作り、グループ化してC#で1ファイル毎に読む
ローカルExcelのファイル配置
excel/unit/unit_rare.xlsx
excel/unit/unit_common.xlsx
unit.yaml
header:
input_path:
- path: unit/*.xlsx # ローカルExcel結合と同じ書式
sheet: Unit
row: 5
output_path: Unit
name: Unit
group: Unit # groupの定義が必須
...
使用するC#コード
void Load()
{
var wm = new WienerManager();
// unit_rare.xlsx
wm.LoadUnitPack("Unit.bytes", "unit_rare"); // groupを指定した場合は、「Load[Group名]Pack」という専用の読み込みメソッドが生成される
var rareUnit = wm.Unit; // データアクセス
// unit_common.xlsxに切り替え
wm.LoadUnitPack("Unit.bytes", "unit_common");
var commonUnit = wm.Unit;
}
sort
sort: True
- 定義:オプション
- デフォルト:False
fieldsの最初のkeyでソートを行います。
※container_typeがListの場合にのみ使用することを推奨
encryption
encryption: True
- 定義:オプション
- デフォルト:False
fields全体を難読化します。
manual_comment
manual_comment: "YAMLのコメントを記述"
- 定義:オプション
マニュアル出力時のYAMLのコメントを記述します。
template
template: BasicPhp.php
- 定義:オプション
- デフォルト:""
PHPのみ使用可能です。
独自形式で出力したい場合にテンプレートファイルを指定します。
validate
validate:
composite_unique:
- keys:
- key: Id
- key: SubId
- 定義:オプション
データ検証定義です。 YAML内の複数のkeyに対する検証を行います。
composite_unique
複数のkeyの組み合わせの重複チェックを行います。
以下の例の場合は1行目と3行目のId、SubIdが同一であるためエラーとなります。
| 行 | Id | SubId |
|---|---|---|
| 1 | 100 | 20 |
| 2 | 100 | 30 |
| 3 | 100 | 20 |
localization
localization:
id_key: Id
- 定義:オプション
そのYAMLのローカライズを有効化する設定です。
id_key
- 定義:条件付き(localizationを指定した場合に必須)
各行を一意に識別するフィールドのkeyを指定します。
指定したフィールドは自動的に重複チェック(unique)が有効になります。manual_only: True でないフィールドを指定してください。
ローカライズが有効なYAMLでは、localize: True を指定したフィールドが翻訳対象となります。
翻訳用CSVのキーは {クラス名}.{フィールドkey}.{id_keyの値} 形式で生成されます。
multi_yaml_action
multi_yaml_action:
type: ValidateKeyExistsYaml
ignores:
- value: 0
- 定義:条件付き(base_typeがMultiYamlActionの時に必須)
タイプを以下の中から指定します。
| タイプ | 説明 |
|---|---|
| ValidateKeyExistsYaml | 複数YAMLのいずれかにkeyが存在するかを検証 |
| ValidateKeyExistsYamlConditions | パラメータ条件付きで複数YAMLのkeyの存在を検証 |
| ValidateUnique | 複数YAML間のkeyの一意性を検証 |
| EnumConstJoin | 列挙と定数を結合 |
複数のYAMLにかかわる処理の定義です。 トップレベルの multi_yaml_action 定義は MultiYamlAction定義 を参照してください。
ignores
- 定義:オプション
検証時に無視する値のリストを指定します。
| タグ | 必須 | 説明 |
|---|---|---|
| value | ○ | 無視する値を指定 |