hnwの日記

Console Componentを利用したメモ

Console Componentを使った感想を記録しておきます。雑なメモですが、どなたかの参考になれば。

Console Componentとは

Console ComponentはPHPコマンドラインアプリケーション用ライブラリです。コマンドラインオプション解析や、出力に簡単に色をつける機能などを提供しています。


ちなみに、このライブラリはSymfony Componentsに含まれています。SymfonyPHPの有名フレームワークですが、多くの機能をスタンドアロンなライブラリとして切り出しています。Console Componentもその一つということになります。

コマンドラインオプション解析ライブラリとしての特徴

  • 標準的なコマンドラインオプションに対応している
    • short option/long option両対応
    • 値を取らないshort optionを圧縮して指定できる(-v -a -xを-vaxと指定できる)
    • オプションが値を取らない/値が必須/値を指定してもしなくても良い/複数指定できるに対応
  • サブコマンドに対応している
  • ヘルプメッセージ(--helpで出力される内容)を勝手に作ってくれる
  • テストが書きやすい
    • 特定のコマンドラインオプションが指定された状況をテストすることができる

イマイチな点

  • コマンドラインオプション解析だけしたい場合には巨大かつ冗長
    • 必ずCommandクラスを継承したクラスを作らなくてはならない
  • サブコマンド無しのコマンドが標準では作れない
    • 単機能のツールを作る場合でも必ずサブコマンド指定をさせることになる
  • --with-foo,--without-fooのようなオプション指定に標準で対応していない
    • 他言語の同等ライブラリでは真偽値を返してくれるものがあって便利
  • 値を取るオプションの場合に、型の指定ができない
    • 他言語の同等ライブラリでは数値を取るオプションに文字列が来るとエラーにしてくれる、無きゃ無いでいいかも…


上記のうちいくつかは簡単に対応できそうな気もしていますが、「巨大かつ冗長」はどうにもならんと思います。

サンプルコード

以下、Commandクラスを継承したクラスの例です。これをApplicationクラスからadd()で登録して使います。

続きを読む