コマンドラインの引数解析を簡単に!
皆さんは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を使ってみては如何でしょうか。
トラックバック
-
- PEAR::Console_CommandLineで引数を管理する from 携帯サイトをつくろう。
- WEBサイトを開発・運営していると、携帯サイトに限らず、コマンドライ...
2008年10月03日 09:43
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



最近のコメント