CSS Selector Generator | CSS のセレクタ一覧を一発で自動生成!

22

07月2009年

【CakePHP】ShellとTaskで作る簡単コンソールアプリ

inoue 17:00 PM

  • はてなブックマークに登録
  • livedoorクリップに登録
  • Yahoo!ブックマークに登録
  • deliciousに追加
photo
CakePHPによる実践Webアプリケーション開発
安藤 祐介
毎日コミュニケーションズ 2009-04-08

by G-Tools , 2009/07/15

こんにちは、シーブレインのinoueです。
雲の向こうに三日月のような日食の太陽を見ることができました。
何十年に一度の天体ショーも雨雲にはかなわず。これぞ自然、とも思ったり。

さてさて、サイトの管理画面にメニューがないけど、ときどき行わなければならないデータ処理、というものが世の中には存在します。
単純なことなら、データベースに接続して、直接SQLクエリを発行すればOK!なのですが、「この条件に該当するデータすべてにこの処理を行う」といった類の処理の場合、やはり手順書よりもプログラムを組んじゃったほうが楽ちんです。

とはいえ、こういった裏の裏の処理に対してwebページ状のユーザーインターフェースまで用意するのはちょっとオーバー。
そんなときに、CakePHPの場合、ShellとTaskというありがたいコマンドライン機能が用意されています。 このShellとTaskを使うと簡単に対話型のコンソールアプリケーションが作成できますので、使ったことのない方はぜひお試しください。

アプリケーションのパスが /home/sample/app のとき、Shell関連のファイルは /home/sample/app/vendor/shells/ に保存します。このshellsディレクトリの下に Taskの保存先ディレクトり tasks/ があります。
また、ファイル名はSampleShell クラスは sample.php、SampleMenuTask クラスは sample_menu.php となります。

サンプルコードはこんなかんじ:

shells/sample.php
<?php
/*
 * サンプル シェル
 *
 */
class SampleShell extends Shell {

    var $tasks = array('Menu1','Menu2','Menu3');

    //overrideでcakeメッセージ除去
    function startup(){}

    function main()
    {

        //メインメニュー作成
        $mainMenu = array(
            '1' => array('name' => 'Menu1','alt' => 'メニュー1'),
            '2' => array('name' => 'Menu2','alt' => 'メニュー2'),
            '3' => array('name' => 'Menu3','alt' => 'メニュー3'),
            'q' => array('name' => null,'alt' => '終了'),
            );
        $mainMenuKeys = array_keys($mainMenu);

        //メインメニュー表示
        $value = "";
        $this->out("---------------------------------------------");
        foreach($mainMenu as $k => $v) {
            $this->out("[{$k}] {$v['alt']}");
        }
        $this->out("---------------------------------------------");
        while ($value <> "q") {
            $value = $this->in("実行するメニューの番号を選択してください", $mainMenuKeys, "q" );

            if ($value <> 'q') {
                $this->$mainMenu[$value]['name']->execute();
            }
        }
    }
}
?>

shells/tasks/menu1.php
<?php
/*
 * メニュー1タスク
 *
 */
class Menu1Task extends Shell {

    //overrideでcakeメッセージ除去
    function startup(){}

    function execute()
    {
        $this->out("メニュー1 実行");
    }
}
?>

(メニュー2、3も同様に)

これを実行した出力結果がこちら:

>cake sample -app /home/sample/app

---------------------------------------------
[1] メニュー1
[2] メニュー2
[3] メニュー3
[q] 終了
---------------------------------------------
実行するメニューの番号を選択してください (1/2/3/q) 
[q] > 1
メニュー1 実行

実行するメニューの番号を選択してください (1/2/3/q) 
[q] > 2
メニュー2 実行

実行するメニューの番号を選択してください (1/2/3/q) 
[q] > 3
メニュー3 実行

実行するメニューの番号を選択してください (1/2/3/q) 
[q] > q

> 

実行時にappのパスを渡してあげることをお忘れなく。
bakeコマンドのようなものが簡単に自作できることがおわかりいただけたでしょうか。

ちょっと簡単な紹介になってしまったので、次回、taskで実際にプログラミングして便利だったことについて、あらためてエントリーしたいと思います。

バシャログスタッフによるWebサイト制作サービス

トラックバック

このエントリーのトラックバックURL
http://c-brains.jp/cgi-bin/mt/###/1953
###はmt-tb.cgiに変更してください。

コメントを投稿

ページの先頭へ

POPULAR TAGS
  • バシャログスタッフによるWebサイト制作サービス

ARCHIVE

特集

RECENT COMMENTS

ishida on CSS Nite in Ginza, Vol.49「バシャログ LIVE」 で紹介したDreamweaverの正規表現クエリーを公開します
>市川さん コメントありがとうございます。 前提条件の部分
ichikawa on 1.2.3で整えるPHP開発環境【STEP.1】 XAMPPをインストール
いつもバシャログ。をご覧いただきありがとうございます。 >
市川 on CSS Nite in Ginza, Vol.49「バシャログ LIVE」 で紹介したDreamweaverの正規表現クエリーを公開します
どういう前提での使用例なのか、わかりませんが、 タグを明示的
studio-8ch on 1.2.3で整えるPHP開発環境【STEP.1】 XAMPPをインストール
いつも記事を大変興味深く、拝見いたしております。 是非、A
sakai on [使える CSS テクニック] CSSで実現するプルダウンメニュー
>とらのすけさん コメントありがとうございます。 CSS