書き置き。

ほぼ勉強の記録みたいなもんです。

PHPでちょっとしたものを作るときに便利な軽量フレームワークと軽量ORM

この記事は PHP Advent Calendar 2013 8日目の担当記事です。
昨日は brtriver さんの "PHP Fatal error: Allowed memory size of xxx" で落ちる前にできること という記事でした。

はじめに

今日は、Slim という軽量フレームワークと Idiorm & Paris という 軽量ORM という軽軽コンビの紹介です。

composerがインストールされていない場合はこちらを参考に、インストールしておいて下さい。

サンプルコードの想定環境は

  • PHP5.3.0 以上
  • MySQL 5.*

です。

※ データベースはPostgreSQLSQLite等、PDOが対応していれば利用可能です。
※ Slim 2.3.*では mcrypt extension がなければcomposer経由でインストール出来ませんでしたが、2.4系でその制限はなくなっています。

Slim Framework

Slim は "Sinatra風" と呼ばれるマイクロフレームワークで、 MIT License で公開されています。
作者の Josh Lockhart (codeguy) さんは、PHP The Right Way. (日本語訳) の著者でもあります。

サンプル

<?php
$app = new \Slim\Slim();

$app->get('/id/:id', function ($id) use ($app) {
    $data = ORM::for_table('person')->find_one($id);
    $app->setData('data', $data);
    $app->render('detail.php');
});

$app->run();

どのな機能があるのかを把握したいという方は本家ドキュメントサイトを見るのが手っ取り早いです。
1ページにすべて凝縮されているので、これを眺めるだけでOK という手軽さが良いです。
ただしドキュメントは最新のバージョンに追従できてないので差分はgithubでコミット内容を確認しています。

Idiorm & Paris

BSD license ライセンスで公開されています。 PHP5.2.0以上、PDOに対応しています。

Idiorm がいわゆるORM部分で、さらにActive Record 的な機能を使えるようにしたものが Paris という構成になっています。
リポジトリやドキュメントもそれぞれ独立していて、Active Record が不要であれば Idiorm だけでも利用可能です。

find_one()、find_many() や save()、delete()、くらい覚えると結構戦えます。
"軽量"といっても、トランザクションや複数接続も使えます。

PSR-1 (日本語訳) で提唱されている camelCase記法のメソッド名にも対応していて、どちらでも使えます。
いまのところ、IDEにはデフォルトのスネークケース記法のほうが優しいようです。

<?php
// documented and default style
$person = ORM::for_table('person')->where('name', 'Fred Bloggs')->find_one();

// PSR-1 compliant style
$person = ORM::forTable('person')->where('name', 'Fred Bloggs')->findOne();

作者の Jamie Matthews j4mie さんは、Slim の CONTRIBUTORS として Slim のサイトにも掲載されていました。

サンプルコード

Slim と Idiorm を使ったサンプルコードをBitbucketに置きました。
これらの使い方がわかるように、というところを重視して、シンプルなCRUD操作をするだけのものにしました。 かわりに画面の見た目などは犠牲になっています。

使いドコロ

  • 数ページ程度の構成 + 複雑ではないDBアクセス(CRUD程度) のサイト・ツール
  • OAuth等の認証 + 外部サイトのAPIにアクセスしてデータを表示

を作るのに適しているのではないか、と思って使っています。

簡単なものだとフレームワークを使わずに素のPHPで作っても大丈夫、と思いがちですが、作り始めると意外必要になる処理が多くてうんざり なんて経験はありませんか?
そんな時にはこんな軽いフレームワークがあることを思い出してみてください。

これらを使って私はこのようなものを作りました。長くなってしまったので詳しくはまた今度紹介しようと思います。

  • Trello API からカードの情報を取り出して チャットやRedmine等にログをコピペするためのツール (Slim x Trello API)
  • スマートフォンアプリをアップロードしてブラウザ経由で端末にインストールするツール (Slim x Idiorm)
  • Backbone.js を勉強しながら作成中のサイトの サーバー側機能 (Slim x Idiorm x Facebook API x Backbone.js)

PHP Advent Calendar 2013、明日は nntsugu@github さんの PhalconPHPのお気に入りポイント のお話のようです。お楽しみに!