CodeIgniterのライセンス変更が話題になったのが、昨年の10月のこと。あれからちょうど1年が過ぎて、最近はライセンス問題のことがあまり語られなくなりました。まあ、CodeIgniterのライセンスを保有するElis Labo社がこれを決断した以上、不満のある人は黙って去って行くしかないのかもしれませんが。
ところで、以前書いた投稿「ライセンス問題で発火したCodeIgniterとOSL3.0」の最後で挙げた、ポストCodeIgniterの候補、KohanaとFuelPHPというふたつのPHPフレームワークのうち、FuelPHPがこのところ元気が良いようです。最近は日本語の書籍も販売され、各地で勉強会が頻繁に開かれるようになりました。
一方、海の向こうのアメリカに目を向けると、FuelPHP以上に勢いのあるフレームワークがあります。それは、Laravelという名のPHPフレームワークです。
Laravelは、FuelPHPやKohanaのような、CodeIgniterの開発者がフォークして作り出されたフレームワークではありません。Laravelの開発者であるTaylor Otwellは、マイクロソフトの.NETの開発に関わっていたという経歴の持ち主で、自身のブログのなかでは、CodeIgniterやFuelPHPを意識した発言も目立ちますが、Laravel自体の仕上がりは、CodeIgniterライクというより、現行のフレームワークのいいとこ取りという感じです。
というわけで、何だか面白そうじゃないかという気がしたので、さっそくUbuntuローカル環境にインストールして遊んでみました。
Laravelのインストール
現時点で、Laravelの日本語公式サイトというものは存在しないようです。従って、ユーザー会もなければ勉強会もないという状態ですが、公式ドキュメントだけは日本語化されていました。
上記の公式ドキュメントによれば、Laravelは、PHP 5.3以上で動作するとのこと。それ以外に厳しいサーバー要件はないので、たぶん、一般的なレンタルサーバーなら動作すると思います。Ubuntuローカル環境(さくらのVPSなどでも同じ)などでお試しする場合は、mcryptをインストールする必要があります。mcryptは、暗号化やハッシュ生成に使用されるライブラリで、phpMyAdminをセットアップする際などにも使われます。まだインストールしていないなら、端末で次のコマンドを実行します。
sudo apt-get install php5-mcrypt
続いて、Laravelの公式サイトに行って、最新版をダウンロードします。
ダウンロードしたファイルを展開し、publicフォルダ内の書類にアクセスできるようにセットアップします。
今回は、Ubuntuローカル環境なので、/home/hoge下にlaravel-testフォルダを作り、そこにダウンロードして展開したファイルのすべてコピーしました。
ドキュメントルートの/var/www内に行き、lnコマンドを実行して、publicフォルダにシンボリックリンクを貼ります。
ln -s /home/hoge/laravel-test laravel-test
ブラウザからlocalhost/laravel-testでアクセスすると、strageフォルダ内のviewフォルダに書き込み権限がないという旨のエラーメッセージが出るかもしれません。その場合は、このフォルダをchmodコマンドなどで755から757又は777に修正します。
Laravelのルーティング機能
もう一度、ブラウザからlocalhost/laravel-testにアクセスして、上記のような画面が表示されたら、インストールは成功です。
英語で表示されているので少々判りにくいですが、最初の見出しの直下には、このデフォルトホームページは、/home/hoge/application/routes.phpによって作り出されているという意味のことが書かれています。
実は、このroutes.phpは、Laravelが持つ優れた特色のひとつであるルーティング機能を司っています。Laravelではコントローラーを作成しないで、routes.phpで処理することも可能です。小さなプログラムなら、コントローラーを作らずに、ほとんどの処理をroutes.phpだけで行うことができます。
ただし、このアイデアは、Laravelのオリジナルではなくて、RubyのマイクロフレームワークSinatraから拝借したもののようです。
さらに、Laravelのコアには、Symfonyのコンポーネントが使用されており、この点だけでいえば、Silex(こちらもSinatraから影響を受けたPHPマイクロフレームワーク)と親戚ということになるかもしれません。
バンドルとartisanコマンドによる機能拡張
このようにLaravelには、マイクロフレームワークに近い発想があるようですが、より多くの機能を求める人には、バンドルと呼ばれる拡張機能が用意されています。
Ruby and RailsのgenerateやFuelPHPのOilと同じような機能を持つBobやCodeIgniterのショッピングカートライブラリをLaravelに取り込んでくれるLara Cartなど、公式サイトには現在、200近いバンドルが登録されており、その数は日に日に増えています。
これらのバンドルはartisanコマンドによってインストールできます。例えば、Lara Cartの場合だと、applicationフォルダ内で、次のようにartisanコマンドを実行します。
php artisan bundle:install lara-cart
インストールが終わったら、bundles.phpに次の設定を追加して、自動的にロードされるようにします。
return array(
'lara-cart' => array( 'auto' => true )
);
なお、artisanコマンドは、バンドルのインストールだけなく、Application keyの生成やデータベースのマイグレーションなどでも利用されます。
簡潔なコーディングスタイルと可読性
次に、前述のLara Cartをインストールした状態で、カートに商品を追加するプログラムを書く場合、CodeIgniterとLaravelとでどう違うか比べてみました。
【CodeIgniterの場合】
$item = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' > array('Size' => 'L', 'Color' => 'Red')
);
$this->cart->insert($item);
【Laravelの場合】
$item = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' > array('Size' => 'L', 'Color' => 'Red')
);
Cart::add( $item );
結局、両者の違いは最後の一行だけということになります。そして、ここがLaravelのこだわる簡潔で可読性の高いコーディングスタイルでもあります。コーディングスタイルは好みの問題もあるし、たった一行では何も分からないかもしれませんが、簡潔なコーディングスタイルは可読性を高めるということは間違いがないでしょう。
ポストCodeIgniterの候補としてのLaravel
この他、Laravel版のアクティブレコードEloquent ORMも直感的なデータベース操作を可能にしてくれるようですし、Redisサーバーの利用やクラスのオートロードなど、Laravelには先進的な機能が詰まっています。
ドキュメントの充実ということにも、laravelは特別のこだわりを持っているようで、この点でもCodeIgniterに負けていません。
ただ、Laravelが、ポストCodeIgniterの最有力候補かと問われると、現時点ではそういうレベルには達していない(進化の速度は半端ではないですが)と答えざるを得ません。
それに、CodeIgniterとLaravelとでは、目指しているゴールが違います。CodeIgniterが無駄なもの一切を削ぎ落として、パフォーマンスを追求してきたのは、どこまでもビジネスフィールドでの勝利を目指してのことです。一方のLaravelは、パーソナルユーザーに、先進的で快適なプログラミング環境を提供することを当面の目標としているようです。
だから、自分用の小さなWebアプリを作って楽しむなら、Laravelはお薦めですが、クライアントのWebサイトを構築する場合には、少々退屈でも、多少時代遅れな点があっても、ビジネス分野で実績のあるフレームワーク(もちろんそれがCodeIgniterとは限りませんが)を推薦するのは当然のことでしょう。
それでも、例えばLinuxやWordPressのように、スタートは個人のお楽しみツールでも、いつの間にか、ビジネスユースでの勝者になっていたというケースもあります。そこがオープンソースの面白いところでもあるのです。
ということで、まあ、難しいことはあまり考えないで、取り敢えずインストールして、Laravelを楽しんでみてはどうでしょうか。