Fork me on GitHub

役立ちぬ開発史、それはただのブログ

覚えておくといい、ブログの時代は終わる。いつかその内、きっとたぶん…

2日間で覚えたFuelphp-v1.7の使い方

| Comments

はじめに

DMTCという二泊三日の合宿形式の学生開発イベントの学生の技術メンターとして、参加してきました。運営側がフレームワークはFuelphpを事前におすすめしていたこともあり、イベント当日に参加したグループのほとんどがFuelphpを触ることを希望しました。 自称PHPerとして、存在はもちろん知っており、その人気ぶりについても存じておりました。しかし、気にはなっていましたが、日本だけでしか流行っていないことやLaravelやPhalconの存在が気になり、触って使おうとは今まで全く思いませんでした。 合宿の前にそれを告げられ、ようやく重い腰をあげてFuelPHPを触る事にしました。
合宿前に覚えたことと、合宿の最中に起きた問題をハサみながら書いていくので、時系列はバラバラです。

インストール

仮想環境でVagrantなどを使ってくれたらすごく嬉かったのですが、イベントには初心者の人も多かったのでローカルに持たせました。その時に工夫したこと、特にWindowsが詰まった。MacとLinuxの良さが身に染みた経験にもなりました。

  • MacでMAMPの場合

まず、MAMPを入れましょう。 MAMPのインストールや設定は、MAMPの使い方と設定 を参考にすれば、一通りは大丈夫だと思います。 MAMPを導入したら、ターミナルを開いて、MAMPのhtdocsに行き、以下のコマンドを打ちましょう。

1
2
curl get.fuelphp.com/oil | sh
oil create PROJECT_NAME

MAMPを起動して、publicの中を確認するとWelcomeの画面が出てくるはずです。

oilコマンドを実行して、以下のエラー文が出てきたら、

1
Error - date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in COREPATH/classes/fuel.php on line 161

'PROJECT_NAME/fuel/app/config/config.php'を開き、

1
2
3
// 97行目を以下のように変更
- // 'default_timezone'   => null,
+ 'default_timezone'   => 'Asia/Tokyo',

これで、エラーは消えます。

  • WindowsでXAMPPの場合

まず、XAMPPを入れましょう。 XAMPPのインストールと設定は、XAMPPの使い方と設定を参考にすれば、一通りは大丈夫だと思います。

XAMPPのhtdocsフォルダの中に、http://fuelphp.com/からzipファイルをダウンロードして解凍します。
fuelphpのフォルダの中に移動して、php composer.phar update のコマンドを実行します。
XAMPPを起動すると、publicの中を確認するとWelcomeの画面が出てくるはずです。

イベントの時はXAMPPを用意してこなかった人もいました。その場でXAMPPを入れてもらいましたが、Windowsにはデフォルトでphpが入っていないらしく、php composer.phar updateを使えませんでした。
いちいちXAMPPを設定している時間がもったいなかったので、その時は、XAMPPにあるshellを使い、phpコマンドを実行するとcomposerを使うことが出来ました。

前バージョン(v1.6)との違い

パッと見、大きい変化はありません!
特にこのイベントでは、fuelをゴリゴリと使いこなすことはなかったので、関係するような目立つ変更点はbootstrapが3.0になった事だけでしょう。

  • Authパッケージの多数のバグ、特にOpAuthやOrmauthドライバに関するものが修正
  • Ormパッケージの多数のバグ、特にModelSoftとModelNestedsetに関するものが修正
  • Twitter Bootstrapは3.0にアップグレード
  • リバースルーティングで正規表現のルートを使用
  • DBは、アプリケーションから完全に透過的なマスター/スレーブ設定をサポート
  • CSRFトークンの隠しフィールドをフォームに追加するためのForm::csrf()メソッドが追加
  • Langクラスに、言語データをデータベーステーブルに格納するドライバが追加
  • Pagination::render()にレンダリングされたHTMLではなく、生のページネーションデータを返すオプションが追加
  • Validation Errorオブジェクトから、すべてのまたは個々のエラーメッセージを取得するValidation::geterrormessage()が追加

詳細については、Changelog v1.7を見ると良いです。

テンプレートエンジン

twigを普段利用しているので、どうすれば使えるのかなぁ〜っと思っていたら、composerに書けば大丈夫みたいです。
以下のように書くと、twigの他に、mustache、smarty、mthamlが使えるようになります。必要なければ、要るやつだけ書けばいいでしょう。

1
2
3
4
5
6
7
# requireの中に追加
"require": {
    "mustache/mustache" : "*",
    "smarty/smarty" : "*",
    "twig/twig" : "*",
    "mthaml/mthaml": "*"
}

php composer.phar updateを実行したら、使えるようになりました。
fuelphpがv1.6からcomposerを導入したので、色々なことが随分楽になってるのではないかと思います。

RESTコントローラー

とてもRESTfulでした。
すごく簡単に、xml, json, csv, html, php, serializeのフォーマットで返してくれます。 試しに'PROJECT_NAME/fuel/app/classes/controller/example.php'を作り、以下のコードを書いてみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Controller_Example extends Controller_Rest
{
  public function get_example()
  {
    $example = Input::get('example');
    $test = 'test';

    $this->response(array(
          'example' => $example,
          'test' => $test,
          ));
  }
}

http://localhost/example/example.json?example=hogeにして、アクセスするとjsonで返してくれます。

1
2
3
4
{
example: "hoge",
test: "test"
}

http://localhost/example/example.json?example=hogeでは、phpの配列に入った形で返してくれます。

1
2
3
4
array (
  'example' => 'hoge',
  'test' => 'test',
)

ちなみに、デフォルトの設定はxmlです。

1
2
3
4
<xml>
<example>hoge</example>
<test>test</test>
</xml>

Oil Generate

ormを使うとDB周りがすごい簡単。どこぞのフレームワークのActiveRecordよりも簡単です。
使うには、'PROJECT_NAME/fuel/app/config/config.php'を開き、以下がコメントアウトされているので、外して有効にします。

1
2
3
4
5
'always_load' => array(
    'packages' => array(
        'orm',
    ),
),

PROJECT_NAME/fuel/app/config/db.phpでDBの設定をします。
以下に、ドキュメントのフォーマットでを載せますので、参考に設定しましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// MySQL ドライバの設定
'development' => array(
    'type'           => 'mysqli',
    'connection'     => array(
        'hostname'       => 'localhost',
        'port'           => '3306',
        'database'       => 'fuel_db',
        'username'       => 'your_username',
        'password'       => 'y0uR_p@ssW0rd',
        'persistent'     => false,
        'compress'       => false,
    ),
    'identifier'     => '`',
    'table_prefix'   => '',
    'charset'        => 'utf8',
    'enable_cache'   => true,
    'profiling'      => false,
    'readonly'       => false,
),

// PDO ドライバで PostgreSQL を使う設定
'production' => array(
    'type'           => 'pdo',
    'connection'     => array(
        'dsn'            => 'pgsql:host=localhost;dbname=fuel_db',
        'username'       => 'your_username',
        'password'       => 'y0uR_p@ssW0rd',
        'persistent'     => false,
        'compress'       => false,
    ),
    'identifier'     => '"',
    'table_prefix'   => '',
    'charset'        => 'utf8',
    'enable_cache'   => true,
    'profiling'      => false,
    'readonly'       => array('slave1', 'slave2', 'slave3'),
),

'slave1' => array(
    // 本番環境の読み込み専用スレーブDB 1台目の設定
),

'slave2' => array(
    // 本番環境の読み込み専用スレーブDB 2台目の設定
),

'slave3' => array(
    // 本番環境の読み込み専用スレーブDB 3台目の設定
),

oilコマンドで、modelとmigreationを作成してくれます。
以下は、ドキュメントのサンプルコマンド。

1
2
3
php oil g model post title:varchar[50] body:text user_id:int
  Created model: APPPATH/classes/model/post.php
  Created migration: APPPATH/migrations/001_create_posts.php

migreationのディレクトリに移動して、以下のコマンドを実行すると、テーブルを作成してくれます。

1
2
3
php oil refine migrate
# 最新のファイルをrefineするとき
php oil refine migrate:current

おわりに

今回は触りの所をやっただけですが、Fuelは意外と使いやすいなと感じました。
CakePHPに比べて、制約が柔軟なのは気に入ってます。逆に柔軟だと皆が好き勝手できちゃうので、大人数で開発する時には向かないのかなっとも思いました。ちゃんと命名規約とかを持ってるので、何でもかんでも自由って理由ではないですが。
本当は色々な点で、大規模開発に向かないのかもしれませんが、そこまで詳しくは無いので、個人的な感想です。symfonyは大規模ですが、CakePHPは小中規模と言われているので、比較が間違ってるのかもしれませんが。でも、fuelは小規模向けだと聞くから、規模比較はそんなに間違ってないかな。
今度はHMVCに触れて、Fuelの良さを早く体験したいなと思いつつ、このまま時が流れそうな予感です。Fuelを使い倒したいですが、個人的には特にralavelが気になっているので、どこかで触りたいなぁ。。。
あと、イベントでfuelphpを触るときによく「おすすめ本ありますか?」と聞かれますが、ありません!
というより、情報が古くなり、おすすめできなくなりました。
それが以下にあるものです。古いバージョン(v1.4くらい?)を触るときには役立つと思います。

はじめてのフレームワークとしてのFuelPHP
鈴木憲治
達人出版会
発行日: 2012-07-02
対応フォーマット: EPUB, PDF
参考先:

コマンドラインからPHPを実行 - XAMPPの使い方
FuelPHP 1.7がリリースされました
http://coderecho.com/how-to-activate-twig-in-fuelphp-1-7/
FuelPHP Documentation
PHPの高速フレームワーク FuelPHPを試してみました。入門版サンプルと、MongoDBの設定方法まとめ

Comments