コマンドラインの引数解析を簡単に!
皆さんはPHPでコマンドラインスクリプトを作成するとき、引数の解析はどうされてますか?
引数が単純であればargvをそのまま使うだけで十分ですが、オプションが多かったりすると結構面倒ですよね。
たまたまPHPプロ!Weekly PEAR リリース @ 08/08/05号でConsole_CommandLineという引数を解析するライブラリを見つけて使ってみたところ、なかなか便利だったのでご紹介したいと思います。
ちなみに、オプションの解析には、PHP標準のgetopt関数を使えば多少楽はできるのですが、
getopt.php
といったように、不明なオプションが指定されているのを判断できなかったり、引数のfilenameを取得できなかったりと、あまり使い勝手が良くありません。
PEAR::Console_CommandLineはそこもきちんと対処してくれます。なお、Pythonのoptparseモジュールにインスパイアされて作られたものらしいです。
では、まずインストールします。
例として、日付と複数のファイル名を引数にとるスクリプトを作成してみます。
command_line.php
それでは、とりあえず何も指定せずに実行します。
エラーメッセージにあるように「-h」をつけてみます。
普通のコマンドのようなヘルプが表示されましたね。
それでは、パラメータを指定して実行してみます。
連想配列に必要な情報がすべて入ってますね。あとはこれを利用して実際の処理を行うだけです。
なお、存在しないオプションを指定すると、きちんとエラーが表示されます。
また、「-v」や「--version」をつけて実行すると、バージョンが表示されます。
また、面白い機能として、XMLでオプションの設定をすることもできるようです。
バッチ処理などPHPでコマンドラインスクリプトを作成する際、引数が複雑な場合はPEAR::Console_CommandLineを使ってみては如何でしょうか。
引数が単純であればargvをそのまま使うだけで十分ですが、オプションが多かったりすると結構面倒ですよね。
たまたまPHPプロ!Weekly PEAR リリース @ 08/08/05号でConsole_CommandLineという引数を解析するライブラリを見つけて使ってみたところ、なかなか便利だったのでご紹介したいと思います。
ちなみに、オプションの解析には、PHP標準のgetopt関数を使えば多少楽はできるのですが、
getopt.php
- $options
= getopt('d:'); - print_r($options);
- $
php getopt.php -h -d 20080807 filename
- Array
- (
[d] => 20080101 - )
といったように、不明なオプションが指定されているのを判断できなかったり、引数のfilenameを取得できなかったりと、あまり使い勝手が良くありません。
PEAR::Console_CommandLineはそこもきちんと対処してくれます。なお、Pythonのoptparseモジュールにインスパイアされて作られたものらしいです。
では、まずインストールします。
- #
pear install Console_CommandLine
例として、日付と複数のファイル名を引数にとるスクリプトを作成してみます。
command_line.php
- require_once
'Console/CommandLine.php'; - //
パーサの作成 - $parser
= new Console_CommandLine(array( 'description' => 'Console_CommandLineのサンプル', 'version' => '1.0.0' - ));
- //
オプションの追加 - $parser->addOption('date',
array( 'short_name' => '-d', 'long_name' => '--date', 'action' => 'StoreString', 'help_name' => 'YYYYMMDD', 'description' => '対象となる日付', - ));
- //
引数の追加 - $parser->addArgument('files',
array( 'multiple' => true, 'description' => '処理するファイル' - ));
- //
パーサの実行 - try
{ $result = $parser->parse(); print_r($result->options); print_r($result->args); - }
catch (Exception $e) { $parser->displayError($e->getMessage()); - }
それでは、とりあえず何も指定せずに実行します。
- $
php command_line.php
- Error:
You must provide at least 1 argument. - Type
"command_line.php -h" to get help.
エラーメッセージにあるように「-h」をつけてみます。
- $
php command_line.php -h
- Console_CommandLineのサンプル
- Usage:
command_line.php [options] <files...> - Options:
-d YYYYMMDD, --date=YYYYMMDD 対象となる日付 -h, --help show this help message and exit -v, --version show the program version and exit - Arguments:
files 処理するファイル
普通のコマンドのようなヘルプが表示されましたね。
それでは、パラメータを指定して実行してみます。
- $
php command_line.php -d 20080807 filename1 filename2
- Array
- (
[date] => 20080807 [help] => [version] => - )
- Array
- (
[files] => Array ( [0] => filename1 [1] => filename2 ) - )
連想配列に必要な情報がすべて入ってますね。あとはこれを利用して実際の処理を行うだけです。
なお、存在しないオプションを指定すると、きちんとエラーが表示されます。
- $
php command_line.php -i
- Error:
Unknown option "-i". - Type
"command_line.php -h" to get help.
また、「-v」や「--version」をつけて実行すると、バージョンが表示されます。
- $
php command_line.php --version
- command_line.php
version 1.0.0.
また、面白い機能として、XMLでオプションの設定をすることもできるようです。
バッチ処理などPHPでコマンドラインスクリプトを作成する際、引数が複雑な場合はPEAR::Console_CommandLineを使ってみては如何でしょうか。
トラックバックURI
-
- PEAR::Console_CommandLineで引数を管理する from 携帯サイトをつくろう。
- WEBサイトを開発・運営していると、携帯サイトに限らず、コマンドライ...
2008年10月03日 09:43
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













最近のコメント