# クレートについて [In English](https://github.com/ogata-k/sbrd-gen/blob/v0.1.x/README.md) [crates.io](https://crates.io/crates/sbrd-gen ) [APIドキュメント](https://docs.rs/sbrd-gen/0.1.0/sbrd_gen/ ) これはスキーマをベースにしてランダムにダミーデータを生成することができるクレート(Schema-Based Random Data GENerator、i.e. SBRD GEN)です。 ライブラリとしてもCLIツールとしても利用可能です。 スキーマとスキーマのジェネレーターは[スキーマについて](#スキーマについて)、ジェネレーターとそのビルダーは[指定可能なジェネレーターの一覧](#指定可能なジェネレーターの一覧)を参照してください。 なお、このプログラムは[serde](https://serde.rs/ )を利用して、スキーマのパースと生成結果のフォーマット行っています。 ## ライブラリとして利用する場合 ライブラリとして使用する場合、[単一のジェネレータで生成する方法](#単一のジェネレータで生成する方法)と[スキーマを用いて複数のジェネレータを組み合わせる方法](#スキーマを用いて複数のジェネレータを組み合わせる方法)があります。 ### 単一のジェネレータで生成する方法 生成結果を組み合わせるほどでもないときに単一のジェネレータで生成する方法を利用することができます。 もちろん[スキーマを用いて複数のジェネレータを組み合わせる方法](#スキーマを用いて複数のジェネレータを組み合わせる方法)でも生成可能です。 利用方法は、次の通りです。 1. ```GeneratorBuilder```の```new_xx```(xxは可変)でビルダーを用意します。nullを生成できるようにしたい場合は、```nullable```の指定を追加します。 2. ビルダーを```build```してジェネレータに変換する 3. ジェネレータにシード種とコンテキストを渡してダミーデータを生成する 以下に、実際の記述例を記します。 ```rust use rand::thread_rng; use sbrd_gen::builder::GeneratorBuilder; use sbrd_gen::value::DataValueMap; fn main() { let builder = GeneratorBuilder::new_int(Some((0..=100).into())).nullable(); let generator = builder.build().unwrap(); let generated_value = generator.generate(&mut thread_rng(), &DataValueMap::new()).unwrap(); println!("generated: {}", generated_value); } ``` ### スキーマを用いて複数のジェネレータを組み合わせる方法 複数のジェネレータを利用したい場合は、こちらの方法を利用することができます。 利用方法は、次の通りです。 1. 利用したいジェネレータのリストとして```ParentGeneratorBuilder```のリストを用意する。 このリストは上から順に生成に利用されるため、宣言する順番を間違えると生成した値を使ってキーを置き換えることのできる[スクリプト](#スクリプト)や[フォーマット](#フォーマット)が正しく機能しないことになるので注意してください。 2. 利用したいジェネレータの内、出力したいキーの一覧を用意する。 3. 出力したいキーの一覧と利用したいジェネレータの一覧を引数に指定して、```SchemaBuilder```を構築する。 4. 構築した```SchemaBuilder```を```build```して、```Schema```に変換する。 5. 変換した```Schema```で、```generate```してダミーデータを生成、または```GeneratedValueWriter```トレイトの```write_xx```(xxは可変)でWriterに書き込む。 実際の記述例は、[all_builder.rs](https://github.com/ogata-k/sbrd-gen/blob/v0.1.x/examples/schema/all_builder.rs )をご覧ください。 ## CLIツールとして利用する場合 CLIツールとして使用する場合、スキーマファイルのファイルパスを指定してダミーデータを生成することができます。 CLIではスキーマファイルのファイル形式や出力する個数、出力するフォーマットなどを指定することができます。詳しくはCLIのヘルプをご覧ください。 ### インストール インストールする方法はいくつかありますが、代表なのは[Cargoを使ってインストール](#Cargoを使ってインストール)と[GitHubのリリースページからインストール](#GitHubのリリースページからインストール)です。 #### Cargoを使ってインストール ```cargo```コマンドが利用できる状態で以下のコマンドを叩いてください。 ```sbrd-gen --help```でヘルプメッセージが出力されればインストールは成功しています。 ``` bash cargo install sbrd-gen sbrd-gen --help ``` #### GitHubのリリースページからインストール GitHubのリリースページからインストールする場合は、[こちら](https://github.com/ogata-k/sbrd-gen/releases )から希望のバージョンをダウンロードします。 ダウンロードしたフォルダを展開後、バイナリファイルのパスを通して利用できるようにしてください。 ```sbrd-gen --help```でヘルプメッセージが出力されればインストールは成功しています。 ### CLIツールの使い方 実行ファイル(例えばWindowsなら```sbrd-gen.exe```)にパスを通したうえで```sbrd-gen [OPTIONS] ```という文法でコマンドを実行します。 以下で、指定可能な引数やオプションを説明しますが、```sbrd-gen --help```で表示されるヘルプメッセージでも閲覧可能です。 #### 引数 * `` : 生成に用いるスキーマを記したファイルのファイルパス。 #### オプション * パーサー * 指定1 : `--parser ` * 指定2 : `-p ` * 説明 : 利用したいパーサーの種類を指定するオプションです。``に利用したいパーサーの種類を指定します。 * 利用可能オプション : yaml, json * デフォルト : yaml * 出力タイプ * 指定1 : `--type ` * 指定2 : `-t ` * 説明 : 出力したいフォーマットを指定するオプションです。``に利用したいフォーマッターを指定します。 * 利用可能オプション : yaml, json, csv, tsv * デフォルト : json * 出力数 * 指定1 : `--num ` * 指定2 : `-n ` * 説明 : スキーマの`keys`で指定したダミーデータのセットの個数を指定するオプションです。``に個数を指定します。 * デフォルト : 10 * キーヘッダー出力させないことを表すフラグ * 指定 : `--no-header` * 説明 : 出力結果にキーを含めたくない場合に指定するオプションです。 * スキーマのパースのみの実行 * 指定 : `--dry-run` * 説明 : ダミーデータの出力をせずにスキーマのパースだけを行って終了することを指定するオプションです。 * ヘルプ * 指定1 : `--help` * 指定2 : `-h` * 説明 : ヘルプを確認したいときに指定するオプションです。 * バージョン * 指定1 : `--version` * 指定2 : `-V` * 説明 : バージョンを確認したいときに指定するオプションです。 ## スキーマについて スキーマは、`keys`をキーとする出力したい[キー](#キー)のシークエンスと、`generators`をキーとする[ジェネレータのビルダー](#親ジェネレーターのオプション一覧)のシークエンスからなるマップ形式で指定します。 フォーマットは、YamlとJsonをサポートしています。 記述例については、[all.yaml](https://github.com/ogata-k/sbrd-gen/blob/v0.1.x/examples/schema/all.yaml )や[all.json](https://github.com/ogata-k/sbrd-gen/blob/v0.1.x/examples/schema/all.json )をご覧ください。 ### 値のコンテキスト スキーマからダミーデータを生成するときは、スキーマに指定されたジェネレーターを上から順に実行します。 このとき生成された値は値のコンテキストと呼ばれるマップ形式のデータ構造に保存されます。 つまり、値のコンテキストで参照可能なペアは、参照時点で生成に成功したジェネレーターのキーと値のペアです。 この値のコンテキストは、出力したいキーからキーに紐づく値を取得するのに用いられたり、[スクリプト](#スクリプト)や[フォーマット](#フォーマット)として指定された"{key}"(括弧とキーの間にはスペース無し)という表記をその時点のコンテキストにあるkeyに紐づく値で置き換えてから評価したり、といった形などで利用されます。 ### 親ジェネレーターのオプション一覧 親ジェネレーターはキーとビルダーのオプションからなるマップ形式で指定します。 構造体としては```ParentGeneratorBuilder```となります。 #### キー ジェネレーターを特定するためのキーで、`key`をキーとした文字列として指定します。 [スクリプト](#スクリプト)や[フォーマット](#フォーマット)を評価する際の置換キーとしても利用されます。 #### ビルダー [指定可能なジェネレーターの一覧](#指定可能なジェネレーターの一覧)で列挙されているジェネレーターのオプションを指定することができます。 生成されるジェネレータは[タイプ](#タイプ)によって決まり、ほかのオプションも同様に解釈されます。 ### 指定可能なジェネレーターの一覧 スキーマや単一のジェネレーターとして指定可能なジェネレーターは以下の通りです。 #### 文字列構築系(build_stringモジュール) 他のジェネレーターの生成結果をもとに文字列を組み立てるジェネレーターの集まりからなるモジュールです。 * duplicate permutation generator * 説明 : 生成結果を組み合わせて文字列にするジェネレーターです。範囲指定で指定された回数だけ値を生成して区切り文字で貼り付けて文字列を作成します。[区切り文字](#区切り文字)のデフォルトは空文字("")です。 * 備考 : なし * 構造体 : ```DuplicatePermutationGenerator``` * タイプ : duplicate-permutation * 必須オプション : [タイプ](#タイプ)、[区切り文字](#区切り文字)、括弧内一つ以上([子ジェネレーターの一覧](#子ジェネレーターの一覧)、[文字リスト](#文字リスト)、[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス)) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[範囲(整数型)](#範囲)、[区切り文字](#区切り文字)、[子ジェネレーターの一覧](#子ジェネレーターの一覧)、[文字リスト](#文字リスト)、[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス) * 生成型 : 文字列型 * format generator * 説明 : 指定されたフォーマットにコンテキストを適応して文字列を構築するジェネレーターです。 * 備考 : なし * 構造体 : ```FormatGenerator``` * タイプ : format * 必須オプション : [タイプ](#タイプ)、[フォーマット](#フォーマット) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[フォーマット](#フォーマット) * 生成型 : 文字列型 #### 分布系(distributionモジュール) 分布関数をもとに乱数を生成するジェネレーターの集まりからなるモジュールです。 * normal generator * 説明 : 正規分布に従って乱数を生成するジェネレーターです。 * 備考 : [パラメーター](#パラメーター)で指定できるのは、実数型の平均(`mean`)と実数型の標準偏差(`std_dev`)です。デフォルトは、それぞれ0.0、1.0です。 * 構造体 : ```NormalGenerator``` * タイプ : dist-normal * 必須オプション : [タイプ](#タイプ)、[パラメーター](#パラメーター) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[パラメーター](#パラメーター) * 生成型 : 実数型 #### 評価系(evalモジュール) 指定した式を評価して値を出力するジェネレーターの集まりからなるモジュールです。 * eval generator * 説明 : 指定した[スクリプト](#スクリプト)を評価した結果を出力するジェネレーターです。 * 備考 : なし * 構造体 : ```EvalGenerator``` * タイプ : eval-int(整数型)、eval-real(実数型)、eval-bool(ブーリアン型)、eval-string(文字列型) * 必須オプション : [タイプ](#タイプ)、[スクリプト](#スクリプト) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[スクリプト](#スクリプト) * 生成型 : 整数型(eval-int)、実数型(eval-real)、ブーリアン型(eval-bool)、文字列型(eval-string) #### 逐次変更系(incrementalモジュール) 実行するたびに一定量増加するといったように逐次的に変化するジェネレーターの集まりからなるモジュールです。 * increment id generator * 説明 : 生成するたびに指定された[逐次定量変化](#逐次定量変化)のステップ数を加算してから生成するジェネレーターです。初期値は指定された[逐次定量変化](#逐次定量変化)の初期値です。 * 備考 : [逐次定量変化](#逐次定量変化)のデフォルトは、1始まりの1増加となっています。 * 構造体 : ```IncrementIdGenerator``` * タイプ : increment-id * 必須オプション : [タイプ](#タイプ) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[逐次定量変化(整数型)](#逐次定量変化) * 生成型 : 整数型 #### プリミティブ系(primitiveモジュール) 基本的な値を生成するジェネレーターの集まりからなるモジュールです。 * int generator * 説明 : 指定された[範囲](#範囲)で整数型を生成するジェネレーターです。デフォルトの範囲はi16の最小値(-32768)以上i16の最大値(32767)以下です。 * 備考 : なし * 構造体 : ```IntGenerator``` * タイプ : int * 必須オプション : [タイプ](#タイプ) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[範囲(整数型)](#範囲) * 生成型 : 整数型 * real generator * 説明 : 指定された[範囲](#範囲)で実数型を生成するジェネレーターです。デフォルトの範囲はi16の最小値(-32768)以上i16の最大値(32767)以下です。 * 備考 : 生成された値の絶対値が大きいほど小数点以下の字数が減り、絶対値が小さいほど小数点以下の字数が増えます。 * 構造体 : ```RealGenerator``` * タイプ : real * 必須オプション : [タイプ](#タイプ) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[範囲(実数型)](#範囲) * 生成型 : 実数型 * bool generator * 説明 : 50%の確率でtrueかfalseを生成するジェネレーターです。 * 備考 : なし * 構造体 : ```BoolGenerator``` * タイプ : bool * 必須オプション : [タイプ](#タイプ) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル) * 生成型 : ブーリアン型 * date time generator * 説明 : [フォーマット](#フォーマット)で指定したフォーマットで日時を生成するジェネレーターです。 * 備考 : [範囲](#範囲)で指定する日時のフォーマットは"%Y-%m-%d %H:%M:%S"です。[フォーマット](#フォーマット)のデフォルト値も同じフォーマットです。フォーマットについては[こちら](https://docs.rs/chrono/0.4.19/chrono/format/strftime/index.html#specifiers )をご覧ください。デフォルトの[範囲](#範囲)は1900-01-01 00:00:00以上2151-01-01 00:00:00未満で、未指定の境界はデフォルト値が指定されたものとします。 * 構造体 : ```DateTimeGenerator``` * タイプ : date-time * 必須オプション : [タイプ](#タイプ) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[範囲(日時の文字列型)](#範囲)、[フォーマット](#フォーマット) * 生成型 : 文字列型 * date generator * 説明 : [フォーマット](#フォーマット)で指定したフォーマットで日付を生成するジェネレーターです。 * 備考 : [範囲](#範囲)で指定する日付のフォーマットは"%Y-%m-%d"です。[フォーマット](#フォーマット)のデフォルト値も同じフォーマットです。フォーマットについては[こちら](https://docs.rs/chrono/0.4.19/chrono/format/strftime/index.html#specifiers )をご覧ください。デフォルトの[範囲](#範囲)は1900-01-01以上2151-01-01未満です、未指定の境界はデフォルト値が指定されたものとします。 * 構造体 : ```DateGenerator``` * タイプ : date * 必須オプション : [タイプ](#タイプ) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[範囲(日付の文字列型)](#範囲)、[フォーマット](#フォーマット) * 生成型 : 文字列型 * time generator * 説明 : [フォーマット](#フォーマット)で指定したフォーマットで時刻を生成するジェネレーターです。 * 備考 : [範囲](#範囲)で指定する日時のフォーマットは"%H:%M:%S"です。[フォーマット](#フォーマット)のデフォルト値も同じフォーマットです。フォーマットについては[こちら](https://docs.rs/chrono/0.4.19/chrono/format/strftime/index.html#specifiers )をご覧ください。デフォルトの[範囲](#範囲)は00:00:00以上23:59:59以下です、未指定の境界はデフォルト値が指定されたものとします。 * 構造体 : ```TimeGenerator``` * タイプ : time * 必須オプション : [タイプ](#タイプ) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[範囲(時刻の文字列型)](#範囲)、[フォーマット](#フォーマット) * 生成型 : 文字列型 * always null generator * 説明 : 常にnullを生成するジェネレーターです。 * 備考 : なし * 構造体 : ```AlwaysNullGenerator``` * タイプ : always-null * 必須オプション : [タイプ](#タイプ) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル) * 生成型 : Null型 #### 子ジェネレーター乱択系(random_childrenモジュール) [子ジェネレーターの一覧](#子ジェネレーターの一覧)を利用して値を生成するジェネレーターです。 * case when generator * 説明 : 宣言順に[条件](#条件)を評価してtrueになった子ジェネレーターを利用して生成するジェネレーターです。 * 備考 : [条件](#条件)に引っかからなかった場合のためにデフォルト条件(つまり、[条件](#条件)が未指定)の子ジェネレーターが必要です。 * 構造体 : ```CaseWhenGenerator``` * タイプ : case-when * 必須オプション : [タイプ](#タイプ)、[条件](#条件)の指定がある[子ジェネレーターの一覧](#子ジェネレーターの一覧) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[条件](#条件)の指定がある[子ジェネレーターの一覧](#子ジェネレーターの一覧) * 生成型 : 生成に利用した子ジェネレーターの生成型 * random child generator * 説明 : [ウェイト](#ウェイト)を考慮して乱択したジェネレーターを利用して生成するジェネレーターです。 * 備考 : なし * 構造体 : ```RandomChildGnerator``` * タイプ : random-child * 必須オプション : [タイプ](#タイプ)、[ウェイト](#ウェイト)の指定がある[子ジェネレーターの一覧](#子ジェネレーターの一覧) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[ウェイト](#ウェイト)の指定がある[子ジェネレーターの一覧](#子ジェネレーターの一覧) * 生成型 : 生成に利用した子ジェネレーターの生成型 #### 値乱択系(random_valuesモジュール) [文字リスト](#文字リスト)や[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス)を利用して値を生成するジェネレーターの集まりからなるモジュールです。 * select generator * 説明 : [文字リスト](#文字リスト)や[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス)で指定された値を乱択するジェネレーターです。 * 備考 : なし * 構造体 : ```SelectGenerator``` * タイプ : select-int(整数型)、select-real(実数型)、select-string(文字列型) * 必須オプション : [タイプ](#タイプ)、括弧内一つ以上([文字リスト](#文字リスト)、[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス)) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[文字リスト](#文字リスト)、[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス) * 生成型 : 整数型(select-int)、実数型(select-real)、文字列型(select-string) * get value at generator * 説明 : [スクリプト](#スクリプト)を評価して取得したインデックスにある値を、入力された値の一覧から取得するジェネレーターです。 * 備考 : なし * 構造体 : ```GetValueAtGenerator``` * タイプ : get-int-value-at(整数型)、get-real-value-at(実数型)、get-string-value(文字列型) * 必須オプション : [タイプ](#タイプ)、[スクリプト](#スクリプト)、括弧内一つ以上([文字リスト](#文字リスト)、[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス)) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[スクリプト](#スクリプト)、[文字リスト](#文字リスト)、[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス) * 生成型 : 整数型(get-int-value-at)、実数型(get-real-value-at)、文字列型(get-string-value-at) * get value index generator * 説明 : 入力された値の一覧から乱択可能な範囲のインデックスを取得するジェネレーターです。 * 備考 : なし * 構造体 : ```GetValueIndexGenerator``` * タイプ : get-value-index * 必須オプション : [タイプ](#タイプ)、括弧内一つ以上([文字リスト](#文字リスト)、[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス)) * 指定可能オプション : [タイプ](#タイプ)、[ヌラブル](#ヌラブル)、[文字リスト](#文字リスト)、[値の一覧](#値の一覧)、[外部ファイルパス](#外部ファイルパス) * 生成型 : 整数型(非負) ### ジェネレーターのオプション一覧 ジェネレーターを構築するのに指定できるオプションは次の通りです。 指定可能なオプションはジェネレーターによって違いますが、指定可能なオプション以外は無視されます。 #### タイプ * 説明 : [指定可能なジェネレーターの一覧](#指定可能なジェネレーターの一覧)で列挙されているジェネレーターのタイプ。ジェネレーターの種類を特定するために利用される。 * 備考 : なし * 構造体 : ```GeneratorType``` * キー名 : `type` * 値型 : 文字列型 #### ヌラブル * 説明 : ジェネレーターが生成する値に加えてnullを生成することができるかのフラグ。trueならnullを生成することができる。デフォルトはfalse。 * 備考 : なし * 構造体 : ```bool``` * キー名 : `nulable` * 値型 : ブーリアン型 #### フォーマット * 説明 : このフォーマットは、[値のコンテキスト](#値のコンテキスト)内のキーと値のペア(仮にそのペアを(key, value)とする。)を順番にフォーマット内の"{key}"や"{key:\\}"(括弧とkey、コロンの間にはスペース無し)という文字列をフォーマットしたvalueで置き換えてから文字列として評価されます。文字'{'と'}'は二つ重ねればエスケープできますが、キーの指定として優先的にパースされるのでキーに'{'や'}'を利用するとキーがうまく特定できないので注意してください。なお、出力用のキーとしてなら問題なく利用できます。 * 備考 : 文法について詳しくはこのクレートの[EvaluatorのAPIドキュメント](https://docs.rs/sbrd-gen/0.1.0/sbrd_gen/eval/struct.Evaluator.html )を参照してください。 * 構造体 : ```String``` * キー名 : `format` * 値型 : 文字列型 #### スクリプト * 説明 : このスクリプトは、[値のコンテキスト](#値のコンテキスト)内のキーと値のペア(仮にそのペアを(key, value)とする。)を順番にスクリプト内の"{key}"や"{key:\\}"(括弧とkey、コロンの間にはスペース無し)という文字列をフォーマットしたvalueで置き換えてから式として評価されます。文字'{'と'}'は二つ重ねればエスケープできますが、キーの指定として優先的にパースされるのでキーに'{'や'}'を利用するとキーがうまく特定できないので注意してください。なお、出力用のキーとしてなら問題なく利用できます。 * 備考 : 文法や式について詳しくはこのクレートの[EvaluatorのAPIドキュメント](https://docs.rs/sbrd-gen/0.1.0/sbrd_gen/eval/struct.Evaluator.html )を参照してください。 * 構造体 : ```String``` * キー名 : `script` * 値型 : 文字列型 #### 区切り文字 * 説明 : 文字列の構築などで区切りに使う文字列です。 * 備考 : なし * 構造体 : ```String``` * キー名 : `separator` * 値型 : 文字列型 #### 範囲 * 説明 : 繰り返し数の範囲や生成する値の範囲の指定に利用されるオプションです。 * 備考 : 範囲指定時に利用できる値型として利用可能なのは、整数型、実数型、文字列型、日時の文字列型、日付の文字列型、時刻の文字列型の6つです。日時関係の値の指定はそれぞれの[プリミティブ系ジェネレーター](#プリミティブ系(primitiveモジュール))を参照してください。 * 構造体 : ```ValueBound``` * キー名 : `range` * 値型 : 値型の値を値に持つキー`start`とキー`end`、`end`の値を含むことを表すフラグを値に持つキー`include_end`からなるマップ形式であり、それぞれ任意指定です。`include_end`のデフォルト値はtrueです。 #### 逐次定量変化 * 説明 : ジェネレーターを実行するたびに更新される値の初期値と変化量を指定するためのオプションです。 * 備考 : 指定時に利用できる値型として利用可能なのは、整数型、実数型、文字列型、日時の文字列型、日付の文字列型、時刻の文字列型の6つです。値の指定は[範囲](#範囲)の指定と同じです。 * 構造体 : ```ValueStep``` * キー名 : `increment` * 値型 : 初期値として値型の値を値に持つキー`initial`と、変化量を表す値型の値を値に持つキー`step`からなるマップ形式であり、`initial`は必須、`step`は任意指定です。 #### 子ジェネレーターの一覧 * 説明 : [ジェネレーターのオプション一覧](#ジェネレーターのオプション一覧)で指定されるジェネレーターのシークエンスを指定するオプションです。ここで指定するのは子ジェネレーターと呼ばれ、親ジェネレーターとは違い追加で[子ジェネレーターのオプション一覧](#子ジェネレーターのオプション一覧)を指定することができます。 * 備考 : なし * 構造体 : ```Vec>``` * キー名 : `children` * 値型 : 子ジェネレーターのシークエンス #### 文字リスト * 説明 : 乱択の対象とする文字を列挙するオプションです。 * 備考 : なし * 構造体 : ```String``` * キー名 : `chars` * 値型 : 文字列型 #### 値の一覧 * 説明 : 乱択の対象とする値を列挙するオプションです。 * 備考 : 値型として利用可能なのは、整数型、実数型、文字列型です。 * 構造体 : ```Vec``` * キー名 : `values` * 値型 : 整数型、実数型、文字列型のどれかの型からなるシークエンス #### 外部ファイルパス * 説明 : 乱択の対象とする値を一行==一つの値として列挙するファイルのファイルパスを指定するオプションです。絶対パスのほかにスキーマファイルからの相対パスで指定することができます。 * 備考 : なし * 構造体 : ```PathBuf``` * キー名 : `filepath` * 値型 : 文字列型 #### パラメーター * 説明 : 分布関数を構築する際に必要なパラメーターを指定するためのオプションです。指定するキーと値については[分布系](#分布系(distributionモジュール))の各ジェネレーターを参照してください。 * 備考 : なし * 構造体 : ```DataValueMap``` * キー名 : `parameters` * 値型 : マップ形式 ### 子ジェネレーターのオプション一覧 子ジェネレーターは、ジェネレーターで指定可能なオプションに加えて次に列挙するオプションも指定することができます。 #### 条件 * 説明 : どの子ジェネレーターを利用するかの条件分岐の条件を指定するためのオプション。指定された場合[スクリプト](#スクリプト)と同様に評価してtrue/falseを判定し、未指定の場合常にtrueを返します。 * 備考 : なし * 構造体 : ```String``` * キー名 : `condition` * 値型 : 文字列型 #### ウェイト * 説明 : 子ジェネレーターを乱択する際の重みを指定するためのオプション。重みが大きいほどよく選択される。デフォルトの重みは1。 * 備考 : なし * 構造体 : ```Weight``` * キー名 : `weight` * 値型 : 整数型(非負) ## LICENSE MIT