鉄は熱いうちに打て-コピペプログラマーのためのFuelPHP動作実験その1(サンプルソース&お砂場づくり)

みなさまお久しぶりです。今日は今流行り?のFuelPHP( http://fuelphp.com/ )について調べてみます。
ネーミングにスパイスのきいたフレームワークです。
発火装置よりも燃料とかなんのジョークかいジョニー?HAHAHA〜
(今流行りというか後2年位したら流行るんじゃなかろうか)

CodeIgniterだとライセンス云々が仕事上マンドクセとか、モダンフレームワーク弄りたいけど今更ヘビーなFWを勉強するのは嫌だとかそういう気分な時の救世主候補としてどうよ?

(OSLでも実質影響ないと思うので私はそれほど気にしてはいないです。個人的にはフルオープンすらOK。ただ厳密に調査しないといけない事情のある方には気のかかる要素ではあります。)


1.勉強するっていってもサンプル無いとメンドクセ(;´Д`)y─┛

時給250万の俺的にコマンドラインからソースをダウンロードして→テーブルをコマンドラインでつくって→ソースを書いて→その間に色々覚えて→ソース解析って儀式すら面倒くさい。(誰か雇ってください)

というわけで、手っ取り早くDB連携しながら動くサンプルソースが無いか検索してみました。

https://github.com/abdelm/stationwagon

Stationwagon is full of examples and is updated regularly with the latest Fuel changes.

There are a lot of examples on these classes: - Orm - Auth - Pagination - Validation - and more!


俺訳:
ステーションワゴンはサンプルコード集だにょ。
FuelPHPに新機能が追加されたらそいつも順次実装していくにょ。
ORM-認証-ページネーション-バリデーションとかのサンプルがイパーイあるでよ。

って事で勉強用のブログシステム風サンプルソースみたいです。(そのまま設置して公開!みたいな実用性はないので注意)
パッと見はこんな感じ:

こういうのはとりあえず動くソースを壊しながら勉強するのが一番近道&ものぐさな俺に最適。
基本の登録・更新・削除・ユーザー追加・ログイン・カテゴリー作成などの基本動作確認の1つのサンプルとしてはまあ良いのでは?(フレームワーク内のソースの関係を確認する初歩の初歩の手習い用途です。例外処理等がたいして入ってないのでそのまま公開して使う目的では決してないです。ご注意を。)

あとはドキュメントで見かけたサンプルコードをこいつにぺたぺた貼って実験していけばお砂場にはなるかと。
(このサンプルソースのコードの品質は知りません、勉強用サンドボックスを一から作るのを短縮する用途です。あしからず)

2.ダウンロード〜インストール

0.環境
名前空間使ってるのでPHP5.3以降じゃないと動かないアルネ
Ubuntu 11.04-Apache/2.2.17-PHP 5.3.5-MySQL5.1.54の一般的な開発環境です。それ以外はシラネ
あとmod_rewriteとかその辺は適当にやってくりゃれ。鯖弄るのでルート環境必須。手元の環境でやるべし

1.ダウンロード
git cloneとかスマートな方法じゃなくてもZipでクレでおk
https://github.com/abdelm/stationwagon/downloads

2.インストール
適当なディレクトリに展開

(ここでは/var/vhosts/stationwagon.pizw.com/stationwagon/ )

pizw.comは俺所有ドメインWindowsのhostsファイル(C:\Windows\System32\drivers\etc\hosts や、Linuxの/etc/hostsに192.168.xx.xx stationwagon.pizw.com 等々として名前解決させてます。

(ローカルネットワーク環境で繋がりさえすればstationwagon.example.comでも127.0.0.1でもなんでもいい。)

3.DB作成&テーブルインポート
database.sqlは展開したソース直下にあります。

# mysqladmin create stationwagon
# mysql -uroot stationwagon < database.sql
# mysql -uroot stationwagon
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3380
Server version: 5.1.54-1ubuntu4-log (Ubuntu)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show tables;
+------------------------+
| Tables_in_stationwagon |
+------------------------+
| sw_articles            |
| sw_categories          |
| sw_users               |
+------------------------+
3 rows in set (0.00 sec)

mysql>

なんかテーブルが3つできてますね。
mysqlのroot権限がいやならユーザー作って好きに汁。

4./etc/apache2/sites-available の設定
/etc/apache2/sites-available/stationwagon.pizw.com(任意の接続先バーチャルホスト鯖名) の作成

<VirtualHost *:80>
  ServerName stationwagon.pizw.com
  ServerAdmin webmaster@localhost
  DocumentRoot /var/vhosts/stationwagon.pizw.com/stationwagon/public/
  <Directory /var/vhosts/stationwagon.pizw.com/stationwagon/public/>
    Options -Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all

    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php/$1 [L]
  </Directory>
  ErrorLog /var/log/apache2/stationwagon-error.log
  LogLevel warn
  CustomLog /var/log/apache2/stationwagon-access.log combined
</VirtualHost>

/var/vhosts/stationwagon.pizw.com/stationwagon のところは適当に書き換えてちょ

5./etc/apache2/sites-enabled の設定

# cd /etc/apache2/sites-enabled
# ln -s ../sites-available/stationwagon.pizw.com(さっき作ったファイル) ./
# /etc/init.d/apache2 graceful

さてこれでつながるようになった。

6.FuelPHPソース内の一部設定ファイル書き換え
一部設定の調整
fuel/app/config/development/db.php
'table_prefix' => 'sw_', を以下の様に追加。

<?php
/**
 * The development database settings.
 */

return array(

  'default' => array(
    'type'        => 'pdo',
    'connection'  => array(
      'dsn'        => 'mysql:host=localhost;dbname=stationwagon',
      'username'   => 'root',
      'password'   => '',
    ),
    'identifier'   => '`',
    'table_prefix' => 'sw_',
    'charset'      => 'utf8',
    'caching'      => false,
    'profiling'    => false,
  ),
);

?>

作られたテーブル名が sw_articles,sw_categories,sw_users だけどソースではsw_無しの(articles,categories,users)前提で書かれているので云々

ちなみに上手く動かないと、開発モードでは:

こんな美麗なdebug_backtrace画面が出る。

リリースモードではこんなエラー画面:

.htaccessに SetEnv FUEL_ENV production を追記するとリリースモードで動く親切設計。
このへんもCodeIgniterだとなんかオレオレハックしてた過去の記憶が…
あと、

  1. fuel/app/config/development/db.php
  2. fuel/app/config/db.php

と二種類同じような設定ファイルがあるけれど、開発モードだと1が存在すると2で仕込んだ標準設定がオーバライドされるようだ。地味だがなにげに嬉しい。( fuel/app/config/production/db.php が存在するとこちらを優先)


3.動作確認

CMS風のサインアップ・ログイン・登録・更新・削除・一覧機能・カテゴリ機能があるようです。(なぜか作成されたブログを外部から見る機能が無い気がするwまだ中身解析してないので詳細よくわからん)
サインアップ(users/signup)周りの動きはこの辺( https://github.com/abdelm/stationwagon/tree/develop/fuel/app/classes/controller/users.php )を崩せば解るか:

Auth::の挙動確認に使える?(users/login):


バリデーションやDBへのINSERT-UPDATE-DELETE周りはこの辺(https://github.com/abdelm/stationwagon/tree/develop/fuel/app/classes/controller/articles.php )か:

DBからのSELECTや一覧作成周りはこの辺(articles,categories) (https://github.com/abdelm/stationwagon/tree/develop/fuel/app/classes/controller/categories.php )か:


あとはドキュメント (http://docs.fuelphp.com/ )でも見ながらソースを解析して色々試しながら遊んで行きましょー。


4.ファーストインプレッション

ドキュメントとコアのソースを眺めつつ、雰囲気でモノを語ってますが、CodeIgniterで物足りないと感じてた部分が最初から補完されている感じです。
今後仕事でも使用できるかちびちびお試し実験していく予定です。

気に入ったのは

  1. 静的クラスメソッドの呼び出しがメイン($this->load->うんたらしなくてよい)、
  2. HMVC,CSRF,ORM,MongoDB,Auth,REST機能入り
  3. 名前空間使用で整理整頓好きに優しい
  4. vendor配下に外部ソース設置できそう(ここにZend Frameworkを突っ込んでキメラ化できるか?)
  5. Session方式をクッキー・ファイル・DB・memcached等から色々選べる
  6. 細かいけどvalidatorの書き方が直感的 例: $val->add('password', 'Your password')->add_rule('required')
  7. 新しいフレームワークは既存フレームワークよりソースの取り回しが賢くなっている。便利さがじわじわくる。


MVCフレームワークって突き詰めていくとどれも似たような感じに収束してくるけど、
後から出てくるものの魅力は
「標準でアレが欲しいよな→作るか」が、「最初から考慮された状態」で組み込まれてる事だと思う。
最初の頃から標準であるべきものの概念は着実に変化している。まさにドッグイヤーですわ(キリッ。


使い慣れたCodeIgniterは安牌でとても良いけれど、新しい燃料で刺激に燃えながら仕事するのもいいんじゃね?


ではでは!

参考:

FuelPHP:
http://fuelphp.com/

PHP フレームワークの「FuelPHP」がスゴすぎる - A Day in Serenity @ Kenji :
http://d.hatena.ne.jp/Kenji_s/20111117/1321519058