FANCOMI Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・新規事業のエンジニア・技術ブログ

CakePHPのShellにオプションを渡そう!

はじめに

こんにちは@kou_hoshです。 最近はCakePHPのShellと戯れる機会が多いです。 フロントエンド側と比較すると地味目ではありますが 機能が充実していてとても便利だなと改めて思います。

というわけで今回はCakePHPのShellへのオプションの渡し方をやっていこうと思います。 (CakePHP 2.x系です)

基本的な使い方

基本的な実装方法は下記のような形です。 getOptionParser()メソッドをオーバライドしてその中でオプション設定を加えていきます。

・ソース

<?php
class SampleShell extends AppShell {

  public function main() {
    var_dump($this->params['sample']);
  }

  public function getOptionParser() {
    $parser = parent::getOptionParser();
    $parser->addOption('sample', array(
      'help' => 'sample option',
    ));
    return $parser;
  }
}

実行時は下記の様にオプションを付与すると $this->params連想配列の中に格納されます。

・実行結果

$ /bin/sh Console/cake sample --sample on
string(2) "on"

また誤ったオプションを指定したりすると、下記のようにCakeが教えてくれます。(あら便利)

・実行結果

$ /bin/sh Console/cake sample --detarame on
Usage:
cake sample [-h] [-v] [-q] [--sample]

Options:

--help, -h     Display this help.
--verbose, -v  Enable verbose output.
--quiet, -q    Enable quiet output.
--sample       sample option

オプション機能のオプション

上記のような基本的な使い方以外にも便利な機能があります。

短縮オプション

オプションのパラメータを指定する際に下記のようにshortに値を指定すると その値を短縮形として使用出来ます。

・ソース

<?php
  public function getOptionParser() {
    $parser = parent::getOptionParser();
    $parser->addOption('sample', array(
      'short' => 's',
      'help' => 'sample option',
    ));
    return $parser;
  }

・実行結果

$ /bin/sh Console/cake sample -s on
string(2) "on"

バリデーション

オプションのパラメータを指定する際に下記のようにchoicesに値を指定すると その値以外を受け付けないようにできます。

・ソース

<?php
  public function getOptionParser() {
    $parser = parent::getOptionParser();
    $parser->addOption('sample', array(
      'choices' => array('on', 'off'),
      'help' => 'sample option',
    ));
    return $parser;
  }

・実行結果

$ /bin/sh Console/cake sample --sample off
string(3) "off"



$ /bin/sh Console/cake sample --sample false
Usage:
cake sample [-h] [-v] [-q] [--sample on|off]

Options:

--help, -h     Display this help.
--verbose, -v  Enable verbose output.
--quiet, -q    Enable quiet output.
--sample       sample option (choices: on|off)
[/shell]

参照

・・・というような役立ちそうなことがCakePHPのCookbookにはたくさん書いてありますので 公式ドキュメントをどんどん読んでいきましょう!

Console and Shells - CakePHP Cookbook v2.x documentation