# 導入

Zend_Console_Getopt クラスは、 コマンドラインアプリケーションでのオプションや引数の処理を助けるものです。

ユーザは、アプリケーションを実行する際にコマンドライン引数を指定できます。 これらの引数はアプリケーションにとって何らかの意味を持つものであり、 何らかの振る舞いを変更したりリソースを選択したり、パラメータを設定したりします。 多くのオプションには、慣例となっている意味があります。 たとえば `--verbose` は、多くのアプリケーションで 出力内容をさらに追加します。 その他のオプションには、アプリケーションによって意味が異なるものもあります。 たとえば `-c` は、 `grep`、`ls` および `tar` でそれぞれ違う機能を表します。

以下で用語の定義をします。これらの用語はいろいろな意味で用いられますが、 このドキュメントでは、ここで定義した意味で使用します。

- "引数 (argument)": コマンドラインで、コマンド名の後にあらわれる文字列。 引数には、オプションが付くこともありますし 付かないこともあります。引数により、 コマンドの操作対象となるリソースを指定します。

- "オプション (option)": 引数のうち、そのコマンドのデフォルトの振る舞いを 何らかの方法で変更するもの。

- "フラグ (flag)": オプションの最初の部分で、 そのオプションの目的を表すもの。フラグの前には、 慣習的にひとつあるいはふたつのダッシュ (`-` あるいは `--`) をつけることになっています。 ひとつのダッシュをつけるのは、 一文字のフラグかあるいは一文字フラグのクラスタの場合です。 ふたつのダッシュをつけるのは複数文字からなるフラグの場合です。 長い形式のフラグはクラスタ化できません。

- "パラメータ (parameter)": オプションの二番目の部分で、 フラグとともに使用するデータの値を指定します。 これは、オプションがそれを受け付ける場合に限ります。 たとえば、多くのコマンドは `--verbose` オプションを受け付けますが、 このオプションには一般的にパラメータを指定しません。 しかし、`--user` のようなオプションは、 たいていの場合はその後にパラメータが必要です。

  パラメータはフラグ引数の後で別の引数として指定することもできますし、 あるいは同一の引数文字列の一部として指定することもできます。 この場合は、フラグとパラメータを等号 (`=`) で連結します。 後者の形式は、長いフラグでのみサポートしています。 たとえば、 `-u username`、`--user username` あるいは `--user=username` といった形式を Zend_Console_Getopt でサポートしています。

- "クラスタ (cluster)": 複数の一文字のフラグを組み合わせ、 ひとつのダッシュの後に文字列としてつなげたもの。 たとえば "`ls -1str`" は四つのフラグのクラスタを使用しています。 このコマンドは "`ls -1 -s -t -r`" と同等です。クラスタ化できるのは一文字のフラグだけで、 長い形式のフラグはクラスタ化できません。

たとえば `mysql --user=root mydatabase` において、 `mysql` は コマンド、 `--user=root` は オプション、 `--user` は フラグ、 `root` はオプションに対する パラメータ となります。また `mydatabase` は、 この定義によると引数ですがオプションではありません。

Zend_Console_Getopt が提供するインターフェイスには、 「アプリケーションで使用可能なフラグの宣言」 「無効なフラグが指定された場合のエラー表示および使用法の表示」 「ユーザが指定したフラグのアプリケーションへの通知」 などがあります。

Getopt はアプリケーションフレームワークではありません

Zend_Console_Getopt はdoes フラグやパラメータの意味を解釈するわけ ではなく、 またアプリケーションのワークフローを実装したりコードを起動したりするものでもありません。 それらの処理については、アプリケーション内で自分で実装しなければなりません。 Zend_Console_Getopt クラスを使用すると、 コマンドラインをパースし、ユーザが指定したオプションを オブジェクト指向のメソッドで取得できるようになります。 しかし、その情報をもとにアプリケーションで何らかの処理を行うのは別の PHP クラスの仕事です。

これ以降の節で、Zend_Console_Getopt の使用法を説明します。