PHPフレームワーク「ちいたん」の第一歩

PHP製マイクロフレームワークを調査している際にみつけたのがちいたん。公式サイトにあるコンセプトを確認してみたかぎりでの特徴としては、

どこでも気軽に使える超簡単で便利な世界最軽量PHP用MVCフレームワーク

また、

その辺に氾濫している「モデルがない?」とか「PEAR等に依存性が激しい」というフレームワークとは違います。

モデル、ビュー、コントローラは当然、サニタイザ、バリデータなど最低限必要な物は組み込まれています。しかもCakePHPを参考に作成されているので、コードを最小限にするための工夫がなされています。

とのこと。かわいい名前のフレームワークで侮りそうですが、こう書かれては試してみる価値はありそうです。

さっそくインストール

公式サイトからちいたんの最新版をダウンロードします。zip版とtar.gz版があるので、お好みでどうぞ。圧縮ファイルを展開するとcheetanディレクトリが作成されます。公式サイトのインストールでは

インストール、と題しましたが特に行うことはありません。アーカイブを解凍してサーバーに配置するだけです。 他のPHPファイルからrequireするだけなので、別にどこに置いてもかまいません。

とあるのでpublic_htmlに、

<?php
require_once '../../cheetan/cheetan.php';
?>

と書いたPHPファイルを作って実行すると、特にエラーは出ません。ホントにrequireするだけでOKなんですね。これは簡単です。

ちいたんを動かす

単純にHello, World.を表示させるコードは公式サイトのサンプルで既に公開されてるので今回は割愛。ちいたんではモデルを完備しているので、Hello, World.を表示させるコードからちょっと凝ってみて、

  1. URLのパラメータを名前として取得する
  2. アクセスされた時間を元に、DBに保存されたあいさつ文を選択
  3. それらを組み合わせて画面表示

みたいなことをしてみます。要は朝にアクセスしたら「Good morning」、午後なら「Good afternoon」とか切替えるだけなんですが。

まずあいさつ文を保存するDBテーブルを作成して、さっそくあいさつ文を入れておきます。ちなみにちいたん本体を特に改造とかしない場合、大文字で始まるDBテーブルに接続できないらしい点に注意しておいてください。 対処法をちいたん」のちょっとしたTIPSでまとめてみました。

CREATE TABLE `greeting` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `idiom` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
);

INSERT INTO `greeting` (`id`, `idiom`) VALUES
(1, 'Good morning'),
(2, 'Good Afternoon'),
(3, 'Good evening'),
(4, 'Good night');

次にモデルクラスを作成します。公式サイトでの説明どおり、

「テーブル名.php」で作成し、テーブル名の一文字目を大文字にして以下を小文字にし、Cをつけたものをクラス名とします。

とのことで、それに従って

<?php
class CGreeting extends CModel {
}

としてgreeting.phpと命名しておきます。

続いてconfig.phpというDB接続のための設定用ファイルを作成し、以下の通り記述します。

<?php
function config_database( &amp;$db ) {
    $db->add( '', 'localhost', 'MYSQL_ACCOUNT', 'MYSQL_PASSWORD', 'DB_NAME' );
}

function config_models( &amp;$controller ) {
    $controller->AddModel( "greeting.php" );
}

$db->add( ... )のDB接続用の引数はそれぞれの環境に合わせて書き換えてください。

なお、モデルクラス(今回の場合greeting.php)やconfig.phpはコントローラとなるindex.phpからrequireできれば特に問題ないようなので、学習テスト程度の段階ではindex.phpと同じディレクトリに作成しても大丈夫です。

最後にindex.phpとテンプレートのgreeting.html.phpを。

<?php
define( 'CHEETAN_DIR', '/home/my-account/cheetan/' );

require_once 'config.php';
require_once CHEETAN_DIR .'cheetan.php';

function action( &amp;$c ) {
    $time = date('G');

    if ($time >= 5 &amp;&amp; $time < 12) {
        $greeting = 1;
    }
    elseif ($time >= 12 &amp;&amp; $time < 17) {
        $greeting = 2;
    }
    elseif ($time >= 17) {
        $greeting = 3;
    }
    else {
        $greeting = 4;
    }

    $rec     = $c->greeting->findone("id = $greeting");
    $name    = array_shift( array_keys($_GET) );
    $message = $name ? sprintf( '%s, %s.',       $rec['idiom'], $name )
                     : sprintf( '%s, everyone.', $rec['idiom']        )
             ;

    $c->setTemplateFile('greeting.html.php');
    $c->set( "msg", $message );
}
?>

ポイントはcheetan.phpよりも先にconfig.phpをrequireする点。先にcheetan.phpの方をrequireしちゃうとブラウザには真っ白なページが出て、error_logには

PHP Notice:  Undefined property: CController::$greeting in /home/my-account/public_html/cheetan/index.php on line XX

と残されます。んでgreeting.html.phpは、

<html>
<body>
<h1><?php print $s->html( $data["msg"] ); ?></h1>
</body>
</html>

として、これで完成です。

簡単に触ってみた雑感

マイクロフレームワークでは、別途DBモジュールをモデルに組み込む仕組みが多いんですが、ちいたんの場合はDBテーブルをモデルとして利用する仕組みが標準で組み込まれているので、お手軽なのが良い感じです。また日本製ということで一通り日本語のドキュメントが揃っているのも良いですね。

ちいたん標準ではページコントローラなので、ページごとにPHPファイルを作る必要があるねとかもあるのですが、作者のブログでフロントコントローラ化するための改造法なども公開されてますし、都合に合わせて手を加えやすいのも良いところかもしれません。

見方を変えれば都合に合わせて多少は手を加えないと……と見る向きもありますけど、少なくとも標準のままでもプロトタイプなどを作成する上ではかなり便利そうな印象を受けました。