Rustのコマンドライン解析ライブラリ『Clap』 〜一覧編〜

# Clapとは
コマンドラインの引数解析を行う[Rust](https://www.rust-lang.org/ja-JP/)用のライブラリです。
位置引数、フラグ、オプション、サブコマンドなどの解析が可能で、それぞれ細かい設定も指定することができる多機能さが特徴です。

* [Webサイト](https://clap.rs/)
* [Github](https://github.com/kbknapp/clap-rs)
* [ドキュメント](https://docs.rs/clap)

# この記事について
Clapについてざっと確認したので個人的な備忘的意味合いも含め、各種設定についてまとめてあります。
ここでは各設定の一覧のみ記載しています。導入方法や簡単な使い方については別記事で導入編をアップしていますので[こちら](http://qiita.com/emonuh/items/41f7bba5283c732b0209)を参考にして下さい。

確認した環境やバージョンは以下の通りです。

* MacOSX 10.11.6 (El Capitan)
* rust 1.5.1
* clap 2.20.3

# コマンドライン定義メソッド一覧
## App
コマンドラインApplicationを作成するstruct。

### new
`App`インスタンスを生成するメソッド。引数は作成するApp名（バイナリと同名でなくてもよい）。

### version
アプリケーションのバージョン番号を定義するメソッド。引数はバージョン番号。
> Tips: `crate_version`マクロで`Cargo.toml`の値を参照して設定させることもできる。

### author
作者名を定義するメソッド。引数は作者名。
> Tips: `crate_authors`マクロで`Cargo.toml`の値を参照して設定させることもできる。

### about
アプリケーションの説明文を定義するメソッド。引数は説明文。
> Tips: `crate_description`マクロで`Cargo.toml`の値を参照して設定させることもできる。

### usage
USAGEを定義するメソッド。引数はUSAGE。
> Note: USAGEは通常は自動的に生成される。これを使用するとそのUSAGEを上書きすることになる。

### help
ヘルプ全文を定義するメソッド。引数はヘルプ全文。
> Note: ヘルプ文言は通常は自動的に生成される。これを使用するとその文言を上書きすることになる。

### set_term_width
ヘルプ情報を折り返す端末幅を定義するメソッド。引数は端末幅。デフォルトは120（0は折り返しなし）。
この設定はグローバルに影響する。
> Note: サブコマンド定義より前に定義される必要がある。

### max_term_width
ヘルプ情報を折り返す最大端末幅を定義するメソッド。引数は最大端末幅。0は折り返しなし。
この設定はグローバルに影響する。
> Note: サブコマンド定義より前に定義される必要がある。

### template
ヘルプ情報の出力テンプレートを定義するメソッド。引数はテンプレート構文。
テンプレート構文には以下のタグを利用することができる（タグは`{}`で囲う）。

|Tag        |Description|
|:----------|:----------|
|bin        |`new`メソッドまたは`bin_name`メソッドで定義した名称|
|version    |バージョン情報|
|author     |作成者情報|
|about      |`about`メソッドで定義した文言|
|usage      |USAGE文言|
|before-help|`before_help`で定義した文言|
|after-help |`after_help`で定義した文言|
|flags      |値を持たないオプション引数群|
|options    |値を持つオプション引数群|
|positionals|位置引数群|
|subcommands|サブコマンド群|
|all-args   |flags、options、positionals、subcommandsを全てヘッダ付きで表示する|
|unified    |オプション引数群（flagsとoptionsを統合して出力）|

### before_help
自動生成されるヘルプ情報より前に表示する文言を定義するメソッド。引数は文言。

### after_help
自動生成されるヘルプ情報より後に表示する文言を定義するメソッド。引数は文言。

### help_short
自動で設定されるヘルプのショートコマンド`-h`の`h`を任意の文字に置き換えるメソッド。引数は置き換える文字。

### version_short
自動で設定されるバージョンのショートコマンド`-V`の`V`を任意の文字に置き換えるメソッド。引数は置き換える文字。

### setting
有効にする`AppSettings`を設定するメソッド。引数は有効にしたい`AppSettings`。

### settings
有効にする`AppSettings`を複数設定できるメソッド。引数は有効にしたい`AppSettings`の配列。
これはsettingを複数回定義することと同義。

### unset_setting
無効にする`AppSettings`を設定するメソッド。引数は無効にしたい`AppSettings`。

### unset_settings
無効にする`AppSettings`を複数設定できるメソッド。引数は無効にしたい`AppSettings`の配列。
これはunset_settingを複数回定義することと同義。

### global_setting
グローバルに有効にする`AppSettings`を設定するメソッド。引数は有効にしたい`AppSettings`。
子サブコマンドにも設定が適用される。
> Note: 親方向へは適用されない。

### global_settings
グローバルに有効にする`AppSettings`を複数設定できるメソッド。引数は有効にしたい`AppSettings`の配列。
これはglobal_settingを複数回定義することと同義。

### arg
`Arg`を定義するメソッド。引数は`Arg`インスタンス。

### args
`Arg`を複数定義できるメソッド。引数は`Arg`インスタンスの配列。
これはargを複数回定義することと同義。

### arg_from_usage
`Arg::from_usage`のシンタックスで引数を定義するメソッド。引数はシンタックス文字列。
> Note: シンタックスで定義できる設定しか定義できない。

### args_from_usage
`Arg::from_usage`のシンタックスで引数を複数定義できるメソッド。引数はシンタックス文字列（1行に1引数）。
これはarg_from_usageを複数回定義することと同義。

### group
`ArgGroup`を定義するメソッド。引数は`ArgGroup`インスタンス。

### groups
`ArgGroup`を複数定義できるメソッド。引数は`ArgGroup`インスタンスの配列。
これはgroupを複数回定義することと同義。

### subcommand
`SubCommand`を定義するメソッド。引数は`SubCommand`インスタンス。

### subcommands
`SubCommand`を複数定義できるメソッド。引数は`SubCommand`インスタンスの配列。
これはsubcommandsを複数回定義することと同義。

### alias
サブコマンドに別名を定義するメソッド。引数は別名。
この別名はヘルプに表示されない。

### aliases
サブコマンドに別名を複数定義できるメソッド。引数は別名の配列。
これはaliasを複数回定義することと同義。

### visible_alias
サブコマンドに別名を定義するメソッド。引数は別名。
この別名はヘルプに表示される。

### visible_aliases
サブコマンドに別名を複数定義できるメソッド。引数は別名の配列。
これはvisible_aliasを複数回定義することと同義。

### display_order
ヘルプに表示されるサブコマンドの表示順を定義するメソッド。引数は優先度を表す正の整数（0に近いほど上位に表示される）。デフォルトは999。

## Arg
コマンドラインの引数を表現するstruct。

### with_name
`Arg`インスタンスを生成するメソッド。引数は引数名。
> Note: 引数名は全てのArgに対してユニークでなければならない。

### from_usage
シンタックス文字列から`Arg`インスタンスを生成するメソッド。引数はシンタックス文字列。
構文は以下。

```
[explicit name] [short] [long] [value names] [help string]
```

* explicit name

明示的に名称を定義する。
`[]`で囲った場合はオプション、`<>`で囲った場合は必須を意味する。定義の後に`...`を付けた場合multipleであることを意味する。
> Note: 省略された場合はlong->short->valuesの順を優先順として、指定された名称を引数の名称とする。

* short

ショートコマンドを定義する。
定義の後に`...`を付けた場合multipleであることを意味する。

* long

ロングコマンドを定義する。
定義の後に`...`を付けた場合multipleであることを意味する。


* values

引数の値を定義する。
explicit name、short、longいずれかの後にスペースまたは`=`を付けて定義する。`[]`または`<>`で囲わなければならない。`[]`で囲った場合はオプション、`<>`で囲った場合は必須を意味する（ただし、explicit nameが定義されている場合はそちらの定義優先する）。定義の後に`...`を付けた場合multipleであることを意味する。

* help string

ヘルプ情報を定義する。
`''`で囲って記述する。

### short
ショートコマンドを定義するメソッド。引数はショートコマンド名（単文字）。
> Note: 文字列を渡してもエラーにはならず、最初の1文字が適用される）。

### long
ロングコマンドを定義するメソッド。引数はロングコマンド名。

### alias
ロングコマンドの別名を定義するメソッド。引数は別名。
この別名はヘルプに表示されない。
> Note: longを定義していない場合は無効。

### aliases
ロングコマンドの別名を複数定義できるメソッド。引数は別名の配列。
これはaliasを複数回定義することと同義。

### visible_alias
ロングコマンドの別名を定義するメソッド。引数は別名。
この別名はヘルプに表示される。
> Note: longを定義していない場合は無効。

### visible_aliases
ロングコマンドの別名を複数定義できるメソッド。引数は別名の配列。
これはvisible_aliasを複数回定義することと同義。

### help
ヘルプ文言を定義するメソッド。引数はヘルプ文言。

### hidden
ヘルプへの出力可否を定義するメソッド。引数はboolean。
true: 出力しない、fales:出力する（デフォルト）

### next_line_help
ヘルプ文言を引数表示の次の行に表示させるメソッド。引数はboolean。
true: 次行に出力、fales:横に出力（デフォルト）

### display_order
ヘルプに表示される引数の表示順を定義するメソッド。引数は優先度を表す正の整数。
優先度は0に近いほど上位に表示される。デフォルトは999。

### takes_value
引数が値を取ることを定義するメソッド。引数はboolean。
true: 値あり（位置引数の場合のデフォルト）、false: 値なし（オプション引数の場合のデフォルト）

### value_name
ヘルプに表示する引数の値の名称を定義するメソッド。引数は値の名称。
> Note: 暗黙的にtakes_valueにtrueが定義される。

### value_names
ヘルプに表示する引数の値の名称を複数定義できるメソッド。引数は値の名称の配列。
これはvalue_nameを複数回定義することと同義。
> Note: 暗黙的にtakes_valueにtrueが定義される。また、複数定義した場合は暗黙的にnumber_of_valuesに定義数が定義される。

### default_value
デフォルトの値を定義するメソッド。引数はデフォルト値。
> Note: 暗黙的にtakes_valueにtrueが定義される。

### default_value_if
デフォルトの値を設定するための別の引数の条件を定義するメソッド。第1引数は別の引数名、第2引数は第1引数が取る値のオプショナル（第1引数が値を持たない場合は`None`）、第3引数はデフォルト値。
定義した別の引数が指定され、その値が定義した値だったならば（定義した値が`None`なら値の判定は無視される）、デフォルト値が使用される。
> Note: 暗黙的にtakes_valueにtrueが定義される。

### default_value_ifs
デフォルトの値を設定するための別の引数の条件を複数定義できるメソッド。引数はdefault_value_ifと同じ要素を持つタプルの配列。
定義した全ての条件が満たされたならば、最初に定義されたデフォルト値が使用される。
これはdefault_value_ifを複数回定義することと同義。

### empty_values
値として空文字（`""`、`''`）を許可するメソッド。引数はbooleanを。
true: 空文字使用可能（デフォルト）、false: 使用不可。
> Note: 暗黙的にtakes_valueにtrueが定義される。

### possible_value
指定可能な値を定義するメソッド。引数は指定可能な値。

### possible_values
指定可能な値を複数定義できるメソッド。引数は指定可能な値の配列。
これはpossible_valueを複数回定義することと同義。

### hide_possible_values
possible_valueで定義された指定可能値をヘルプに出力させないメソッド。引数はboolean。
true: 非表示、false: 表示（デフォルト）

### allow_hyphen_values
値が`-`から始まることを許可するメソッド。引数はboolean。
true: 許可、false: 拒否（デフォルト）

### index
位置引数の順序を定義するメソッド。引数はインデックス番号。
全ての位置引数に定義されなかった場合、定義順になる。
> Note: 定義された場合、shortやlongは無視され、位置引数となる。また、インデックスが連番になっていない場合や定義されていない`Arg`が混在している場合はパニックを起こす。

### required
この引数を必須に定義するメソッド。引数はboolean。
true: 必須、fales:任意（デフォルト）

### required_if
この引数が必須となる別の引数の条件を定義するメソッド。第1引数は別の引数名、第2引数はその引数が取る値。
定義した別の引数が指定され、さらにその値が定義した値であるならば、この引数は必須となる。

### required_ifs
この引数が必須となる別の引数の条件を複数定義できるメソッド。引数はタプル（別の引数名、その引数が取る値）の配列。
これはrequired_ifを複数回定義することと同義。

### required_unless
この引数が必須でなくなる別の引数を定義するメソッド。引数は別の引数名。
定義した別の引数が指定されいるならば、この引数は必須ではなくなる。

### required_unless_one
この引数が必須でなくなる別の引数を複数定義できるメソッド。引数は別の引数名の配列。
定義した別の引数群のうちどれか1つでも指定されているならば、この引数は必須ではなくなる。
これはrequired_unlessを複数回定義することと同義。

### required_unless_all
この引数が必須でなくなる別の引数を複数定義できるメソッド。引数は別の引数名の配列。
定義した別の引数群が全て指定されているならば、この引数は必須ではなくなる。

### requires
この引数を指定した場合に必須となる別の引数を定義するメソッド。引数は別の引数名。
この引数が指定されているならば、定義した別の引数は必須となる。

### requires_all
この引数を指定した場合に必須となる別の引数を複数定義できるメソッド。引数は引数名の配列。
この引数が指定されているならば、定義した別の引数群は全て必須となる。
これはrequiresを複数回定義することと同義。

### requires_if
この引数の値に応じて必須となる別の引数を定義するメソッド。第1引数は条件となる値、第2引数は別の引数名。
この引数の値が定義した値であるならば、定義した別の引数は必須となる。

### requires_ifs
この引数の値に応じて必須となる別の引数を複数定義できるメソッド。引数はタプル（条件となる値、別の引数名）の配列。
これはrequires_ifを複数回定義することと同義。

### conflicts_with
この引数と競合する別の引数を定義するメソッド。引数は別の引数名。
この引数が指定されているならば、定義した別の引数は指定できない（逆も同様）。
> Note: 競合ルールは必須ルールよりも優先される。
> Tips: 2つの引数を競合関係にする場合、片方のみconflicts_withを定義するだけでよい。

### conflicts_with_all
この引数と競合する別の引数を複数定義できるメソッド。引数は引数名の配列。
これはconflicts_withを複数回定義することと同義。

### overrides_with
この引数と互いにオーバーライドできる別の引数を定義するメソッド。引数は別の引数名。
この引数と定義した別の引数が共に指定されているならば、後に指定した引数が有効となり、前に指定した引数は無効化される。
> Note: オーバーライドルールは競合ルールと必須ルールよりも優先される。
> Tips: 2つの引数を競合関係にする場合、片方のみoverrides_withを定義するだけでよい。

### overrides_with_all
この引数と互いにオーバーライドできる別の引数を複数定義するメソッド。引数は別の引数名の配列。
これはoverrides_withを複数回定義することと同義。

### multiple
この引数が複数回指定することを許可するメソッド。引数はboolean。
true: 許可、false: 拒否（デフォルト）
`-ddd`や`-d -d -d`、`-d val1 val2`、`-d val1 -d val2`といった指定が可能になる。
> Note: 値を持つオプションの場合は指定方法の違いによって、`ArgMatches`の`occurrences_of`の結果が異なる。`-d val1 -d val2`は`occurrences_of`の結果は`2`になるが、`-d val1 val2`は`1`になる。

### number_of_values
値の数を定義するメソッド。引数は値の数。
引数に指定した値の数が定義数に満たないならば、エラーとなる。
> Note: 暗黙的にmultipleにtrueが定義される。

### max_values
値の最大数を定義するメソッド。引数は最大数。
引数に指定した値の数が定義数を超えたならば、エラーとなる。
> Note: オプション引数の場合、multipleは暗黙的にtrueを定義しない。それは`-o val1 val2`と指定するならばmultipleの設定が必要ない為であり、`-o val1 -o val2`と指定することも可能にしたい場合は明示的にmultipleにtrueを定義しなければならない。位置引数の場合は暗黙的にmultipleにtrueが定義される。

### min_values
値の最小数を定義するメソッド。引数は最小数。
引数に指定した値の数が定義数以上指定されないならば、エラーとなる。
> Note: max_valuesと同じ理由により、オプション引数の場合はmultipleは暗黙的にtrueを定義しない。位置引数の場合は暗黙的にmultipleにtrueが定義される。

### use_delimiter
値に区切り文字の使用を許可するメソッド。引数はboolean。
true: 使用可能、false: 使用不可（デフォルト）
`-d val1,val2,val3`のように指定することが可能になる。これは`-d val1 val2 val3`と同じ意味。

### require_delimiter
値に区切り文字の使用を強制するメソッド。引数はboolean。
true: 強制、false: 任意（デフォルト）
複数の値を指定する場合、区切り文字を使用しなければならない。`-d val1 val2 val3`のような指定はできなくなる。

### value_delimiter
値の区切り文字を定義するメソッド。引数は区切り文字。デフォルトは`,`
> Note: 暗黙的にuse_delimiterにtrue、takes_valueにtrueが定義される。

### value_terminator
値の解析停止文字を定義するメソッド。引数は解析停止文字。
`;`を定義したならば、`-o val1 val2 ;`とすることで`-o`オプションの値を明示的に示すことができる。

### group
引数が属する`ArgGroup`を定義するメソッド。引数はグループ名。
同じグループ名で関連付けられた引数同士は同時に指定できなくなる。

### groups
引数が属する`ArgGroup`を複数定義できるメソッド。引数はグループ名の配列。
これはgroupを複数回定義することと同義。

<h3>global</h3>
この引数の定義を全ての子サブコマンドに適用させるメソッド。引数はboolean。
true: サブコマンドに適用する、false: 適用しない（デフォルト）
> Note: 親方向へは適用されない。

### validator
カスタムバリデーションを定義するメソッド。引数はバリデートする関数（`Fn(String) -> Result<(), String> + 'static`）。

### set
有効にする`ArgSettings`を設定するメソッド。引数は有効にしたい`ArgSettings`。
`.set(ArgSettings::Grobal)`と`.global(true)`は同義。

### unset
無効にする`ArgSettings`を設定するメソッド。引数は無効にしたい`ArgSettings`。`.set(ArgSettings::Grobal)`と`.global(false)`は同義。

## ArgGroup
引数グループを表現するstruct。

### with_name
`ArgGroup`インスタンスを生成するメソッド。引数はグループ名。
> Note: グループ名は全てのグループに対してユニークでなければならない。

### arg
引数グループに属する引数を定義するメソッド。引数は引数名。

### args
引数グループに属する引数を複数定義できるメソッド。引数は引数名の配列。
これはargを複数回定義することと同義。

### multiple
引数グループに属する引数を複数指定可能にするメソッド。引数はboolean。
true: 複数指定可能、false: 複数指定不可（デフォルト）

### required
この引数グループのうち、1つ以上の設定を必須にするメソッド。引数はboolean。
true: 必須、false: 任意（デフォルト）

### requires
この引数グループに属する引数を指定した場合に必須となる別の引数を定義するメソッド。引数は別の引数名。
この引数グループに属する引数が指定されているならば、定義した別の引数は必須となる。

### requires_all
この引数グループに属する引数を指定した場合に必須となる別の引数を複数定義できるメソッド。引数は別の引数名の配列。
この引数グループに属する引数が指定されているならば、定義した別の引数群は全て必須となる。
これはrequiresを複数回定義することと同義。

### conflicts_with
この引数グループと競合する別の引数を定義するメソッド。引数は別の引数名。
この引数グループに属する引数が指定されているならば、定義した別の引数は指定できない（逆も同様）。

### conflicts_with_all
この引数グループと競合する別の引数を複数定義できるメソッド。引数は引数名の配列。
これはconflicts_withを複数回定義することと同義。

## SubCommand
サブコマンドを表現するstruct。
生成されるインスタンスは`App`インスタンスになる。

### with_name
`App`インスタンスを生成するメソッド。引数はサブコマンド名。

## AppSettings
アプリケーションレベルの設定要素を持つEnum。

### AllowInvalidUtf8
無効なUTF-8コードポイントをエラーにしない設定。デフォルトは有効。

### StrictUtf8
無効なUTF-8コードポイントが使用された場合にエラーにする設定。デフォルトは無効。
> Note: windows以外で動作する。

### AllowLeadingHyphen
位置引数やオプション引数の値に`-`で始まる文字列の指定を許可する設定。デフォルトは無効。

### AllowNegativeNumbers
位置引数やオプション引数の値に負の数値の指定を許可する設定。デフォルトは無効。
AllowLeadingHyphenと異なり、`-`始まりを許可する文字列は数値のみに限定。

### AllowMissingPositional
最後から2番目の位置引数がオプショナルで、最後の位置引数が必須のコマンド体系を許可する設定。デフォルトは無効。
最後に指定された引数を必須の位置引数として処理され、その前のオプショナルな引数が省略可能になる。

### AllowExternalSubcommands
予期しない位置引数をサブコマンドとして解釈することを許可する設定。デフォルトは無効。
> Note: サブコマンドの定義自体がなくてもエラーにならなくなる。

### ArgsNegateSubcommands
サブコマンドの前に有効な引数の使用を拒否する設定。デフォルトは無効。

### ArgRequiredElseHelp
引数を1つも指定されなかった場合にヘルプを表示する設定。デフォルトは無効。
> Note: `Arg::default_value`が設定されている場合、この設定は無効になる。

### SubcommandRequiredElseHelp
サブコマンドが指定されない場合、常にヘルプを表示する設定。デフォルトは無効。
> Note: 親コマンドが存在し、それを指定されたとしても無視してヘルプを表示するようになる。

### ColoredHelp
色付けされたヘルプを表示する設定。デフォルトは無効。
> Note: この設定はUnix、Linux、OSXでのみ設定可能。

### ColorAuto
コンソールまたはTTY接続の場合のみ出力を色付けする設定。デフォルトは有効。

### ColorAlways
コンソール/TTY接続に関わらず出力を色付けする設定。デフォルトは無効。

### ColorNever
コンソール/TTY接続に関わらず出力を色付けしない設定。デフォルトは無効。

### DontCollapseArgsInUsage
USAGEにおける位置引数を`ARGS`に自動的にまとめさせない設定。デフォルトは無効。

### TrailingVarArg
最後の位置引数がmultipleの場合、それより後に別の引数を定義させない（位置引数のmultipleな値として扱われる）設定。デフォルトは無効。

### DontDelimitTrailingValues
TrailingVarArgを設定している場合、最後の位置引数に区切り文字を使用させない設定。デフォルトは無効。

### DisableHelpSubcommand
通常自動的に作られる`help`サブコマンドを作成させない設定。デフォルトは無効（自動生成される）。

### DisableVersion
通常自動的に作られる`-V`,`--version`オプションを作成させない設定。デフォルトは無効（自動生成される）。

### DeriveDisplayOrder
ヘルプに表示される引数やサブコマンドの順序を定義順にする設定。デフォルトは無効（アルファベット順）。

### GlobalVersion
全ての子サブコマンドに対してトップレベルのバージョンを使用させる設定。デフォルトは無効。

### Hidden
サブコマンドをヘルプに表示しない設定。デフォルトは無効。
これはサブコマンドで設定する。

### HidePossibleValuesInHelp
`Arg::possible_value`で定義された使用可能値をヘルプに表示しない設定。デフォルトは無効。

### NoBinaryName
最初の引数がバイナリ名でないようする設定。デフォルトは無効。

### NextLineHelp
ヘルプを引数表示の次の行に表示させる設定。デフォルトは無効。

### PropagateGlobalValuesDown
グローバルな引数をサブコマンドにも伝搬させる設定。デフォルトは無効。
`Arg::global`が定義された引数が指定されており、さらに子サブコマンドが指定されているならば、そのサブコマンドにもグローバル引数の指定を伝搬させる設定。デフォルトは無効。

### SubcommandsNegateReqs
サブコマンドを使用した場合、親コマンドの全ての条件を無効にする設定。デフォルトは無効。

### SubcommandRequired
サブコマンドの指定を必須にする設定。デフォルトは無効。

### UnifiedHelpMessage
ヘルプの`FLAGS`を`OPTIONS`に統一して表示させる設定。デフォルトは無効（`FLAGS`と`OPTIONS`は分かれて表示させる）。

### VersionlessSubcommands
全てのサブコマンドでバージョンを表示するコマンドを無効にする設定。デフォルトは無効。
これを設定した場合にサブコマンドで`-V`や`--version`を使用するとエラーとなる。

### WaitOnError
エラーが起きた時、`Press [ENTER]/[RETURN] to continue...`と表示し、終了前にユーザ操作を待つ設定。デフォルトは無効。

## ArgSettings
引数レベルの設定要素を持つEnum。
`Arg::set`や`Arg::unset`で指定可能な要素で構成される。
以下の要素を持つ。

* Required
* Multiple
* EmptyValues
* Global
* Hidden
* TakesValue
* UseValueDelimiter
* NextLineHelp
* RequireDelimiter
* HidePossibleValues
* AllowLeadingHyphen

## Macros
### crate_name
コンパイル時にCargo.tomlのnameを参照して自動でセットするマクロ。

```example
App::new(crate_name!())
```

### crate_version
コンパイル時にCargo.tomlのversionを参照して自動でセットするマクロ。

```example
App::new("myapp")
	.version(crate_version!())
```

### crate_authors
コンパイル時にCargo.tomlのauthorsを参照して自動でセットするマクロ。引数にセパレータパターンを指定できる。デフォルトのパターンは`:`。

```example
App::new("myapp")
	.author(crate_authors!(",\n"))
```

### crate_description
コンパイル時にCargo.tomlのdescriptionを参照して自動でセットするマクロ。

```example
App::new("myapp")
	.about(crate_description!())
```

### app_from_crate
コンパイル時にname、version、author、descriptionをCargo.tomlから参照して自動セットしたAppインスタンスを作成するマクロ。

```example
let m = app_from_crate!()
	...(各設定)
	.get_matches();
```

# コマンドライン解析メソッド一覧
## App
### get_matches
コマンドラインの解析を開始するメソッド。`ArgMatches`を返す。
> Note: 解析エラーがある場合は標準出力にエラーメッセージを表示し、メインプロセスは終了コード1で停止させる。

### get_matches_safe
コマンドラインの解析を開始するメソッド。`ArgMatches`と`clap::Error`を持った`clap::Result`を返す。
解析エラーは`clap::Error`に格納されて返される。メインプロセスは終了させない。

### get_matches_from
コマンドラインの解析を開始するメソッド。引数はIntoIteratorトレイトを実装したもの（Vecなど）。`ArgMatches`を返す。
引数に任意のコマンドを表現することで、そのコマンドを実行させることができる。
> Note: 解析エラーがある場合は標準出力にエラーメッセージを表示し、メインプロセスは終了コード1で停止させる。
> Note: 引数に渡すコマンドの最初の1つは、`AppSettings::NoBinaryName`が適用されていない限り、バイナリ名を指定する必要がある。

### get_matches_from_safe
コマンドラインの解析を開始するメソッド。引数はIntoIteratorトレイトを実装したもの（Vecなど）。`ArgMatches`と`clap::Error`を持った`clap::Result`を返す。
解析エラーは`clap::Error`に格納されて返される。メインプロセスは終了させない。

## ArgMatches
コマンドラインの解析結果が格納されたstruct。

### value_of
引数の値を取得するメソッド。引数は取得したい引数名。
> Note: 値を取らない引数を指定した場合、Noneが返る。
> Note: 値に無効なUTF-8コードポイントが含まれている場合、panicを起こす。
> Tips: 複数の値を取る引数を指定した場合、最初の値のみ取得できる。全ての値を取得したい場合は`ArgMatches::values_of`を使用する。

### value_of_lossy
引数の値を取得するメソッド。引数は取得したい引数名。
値に無効なUTF-8コードポイントが含まれている場合、`\u{FFFD}`に置き換えられる。
> Note: 値を取らない引数を指定した場合、Noneが返る。
> Tips: 複数の値を取る引数を指定した場合、最初の値のみ取得できる。全ての値を取得したい場合は`ArgMatches::values_of_lossy`を使用する。

### value_of_os
引数の値を取得するメソッド。引数は取得したい引数名。
値に含まれるUTF-8コードポイントの有効/無効に関わらず、`Option<&OsStr>`を取得する。
> Note: 値を取らない引数を指定した場合、Noneが返る。
> Tips: 複数の値を取る引数を指定した場合、最初の値のみ取得できる。全ての値を取得したい場合は`ArgMatches::values_of_os`を使用する。

### values_of
引数の値を複数取得できるメソッド。引数は取得したい引数名。
`Option<Values>`を取得する。`Values`は`str`の`Iterator`トレイトを実装したstruct。
> Note: 値を取らない引数を指定した場合、Noneが返る。
> Note: 値に無効なUTF-8コードポイントが含まれている場合、panicを起こす。

### values_of_lossy
引数の値を複数取得できるメソッド。引数は取得したい引数名。
`Option<Vec<String>>`を取得する
値に無効なUTF-8コードポイントが含まれている場合、`\u{FFFD}`に置き換えられる。
> Note: 値を取らない引数を指定した場合、Noneが返る。

### values_of_os
引数の値を複数取得できるメソッド。引数は取得したい引数名。
値に含まれるUTF-8コードポイントの有効/無効に関わらず、`Option<OsValues>`を取得する。`OsValues`は`OsStr`の`Iterator`トレイトを実装したstruct。
> Note: 値を取らない引数を指定した場合、Noneが返る。

### is_present
引数が指定されたかどうかを判断するメソッド。引数は取得したい引数名。booleanが返る。
true: 指定されている、false: 指定されていない

### occurrences_of
オプションの出現回数を取得するメソッド。引数は取得したいオプション名。
例えば、`-o val1 val2`なら1、`-o val1 -o val2`なら2が返る。

### subcommand_matches
サブコマンドの`ArgMatches`を取得するメソッド。引数は取得したいサブコマンド名。

### subcommand_name
この解析結果で指定されたサブコマンドの名称を取得するメソッド。

### subcommand
この解析結果で指定されたサブコマンドの名称と`ArgMatches`を取得するメソッド。
名称と`ArgMatches`のタプルが返る。

### usage
この解析結果が保持するUSAGE文字列を取得する。

# その他メソッド一覧
## App
### get_name
App名を取得するメソッド。

### get_bin_name
バイナリ名を取得するメソッド。

### print_help
`App`に定義されたヘルプを標準出力に出力するメソッド。

### write_help
`App`に定義されたヘルプを引数に与えたWriter（IO::Writeトレイとを実装したもの）に書き込むメソッド。

### write_version
`App`に定義されたバージョンを引数に与えたWriter（IO::Writeトレイとを実装したもの）に書き込むメソッド。

### gen_completions
`App`から補完ファイルを生成するメソッド。第1引数はバイナリ名、第2引数は`Shell`Enumの要素、第3引数は出力先。