Laravel4とSymfony2のクールで熱い関係

英米で人気急上昇中のPHPフレームワークLaravelの次期バージョンLaravel4の開発版が公開されているので、Ubuntu12.10のローカル環境で試してみた。

先ずは、githbuからLaravel4の開発版をダウンロードして、これ解凍する。Laravel4では、パッケージ管理に、composerが採用されることになっているので、curlコマンドを使って、composerをダウンロードする。

$ sudo apt-get install curl
$ curl -s https://getcomposer.org/installer | php

composer.pharというファイルがダウンロードされるので、次のコマンドでLaravel4を最新の状態にアップデートする。

$ sudo apt-get install git
$ php composer.phar update

composer.pharの名前をcomposerに変更して、/usr/binや/usr/local/binなど、コマンドパスが通っているフォルダに移動させれば、以後、どこからでもcomposerコマンドを使えるようになる。

$ composer update

なお、すでにcomposerがインストールされている環境下で、上記コマンドを実施したとき、composerのバージョンが古いという警告が出る場合があるので、そのときは次のコマンドで、composer自体をアップデートしておく。

$ sudo composer self-update

Symfony2コンポーネントとキャメル記法など

アップデートが始まると、http-kernelやroutingなど、お馴染みのsymfonyコンポーネントが次々とインストールされて行くのが分かる。

Laravel4Update

Laravel4では、クラス名やメソッド名が、キャメル記法に変更される。クラス名やメソッド名以外にも、記述法のいくつかが、Symfonyライクなものに変更されている。例えばルーティングの記述などは、次のようになる。

Laravle3の場合

Route::get('post/(:num)', function($id)
{

});

Laravle4の場合

Route::get('post/{id}', function($id)
{

});

さらに、フォルダ構成に目を向けると、ここでもSymfonyライクな変更が目立つ。例えば、applicationフォルダの名称がappフォルダに変更され、bundlesフォルダとstorageフォルダが消えている。そして、vendorフォルダが追加され、larabelのコアフォルダは、このvendorフォルダ内に移動させられている。

盛り上がるLaravelコミュニティ

以上、Laravel4はSymfonyコンポーネントへの依存度が高まることが分かったが、このことは、Laravelユーザーの間で概ね歓迎されているようで、否定的な意見はあまり見かけない。むしろ、Symfonyコンポーネントを利用することにより、Laravelが堅牢でセキュアな本格的なフレームワークへと脱皮できるのではないかという期待が高まっている模様。

実際、CodeIgniterベースのCMSのPyroCMSは昨年、Laravel4ベースへの移行を表明している。その理由を、開発者のPhil Sturgeon自らがユニークなスライドで説明している。

FrameworkEvolution

Symfonyサイドから見たLaravel4

このように、Laravel4への期待が日に日に高まっているLaravelコミュニティだが、Symfonyサイドでは、このことはほとんど話題になっていない。

これは、LaravelがまだまだマイナーなPHPフレームワークに過ぎないということもあるだろうし、今Laravel4が行っていることは、Fabien自らが、Symfonyコンポーネントの一部を利用して生み出したマイクロフレームワークSilexですでに実証済みという認識もあるのかもしれない。

ご存知のように、Symfony2は、もはや単純なMVCフレームワークとは呼びがたい存在になっている。20以上の独立したライブラリーの集合体となっていて、これらは疎密結合のコンポーネントとなっていて、単独又は複数の組み合わせによる利用が可能だ。

こうしたSymfony2のポテンシャルの高さを証明するように、昨年、PHPベースのCMSであるDrupalやeZ Publishが、次期バージョンでSymfony2のコンポーネントの採用することを表明している。

Symfonyサイドから見ると、Laravel4はこうした一連の流れの延長線上にあるのだろうが、このままLaravel4の開発が順調に進み、Laravel人気が英米に止まらず世界的なものに広がっていくならば、Symfonyの哲学を具現化したということになるのかもしれない。

PSR-1準拠という視点

ここまで、Symfonyコンポーネントへの依存度を高めるLaravel4という視点で考えてみたが、最後に、PSR-0/PSR-1準拠という視点もあるということを付け加えさせていただいておく。

PSR-0やPSR-1というのは、PHPの標準コーディング規約を話し合うための任意団体PHP-FIGが定めたPHPのコーディング規約のひとつだ。

PHP-FIGには、PHPの3大フレームワークと呼ばれているCakePHP、Symfony、Zend Frameworkや、ライブラリーのPEAR、人気CMSのDrupal、Joomlaなど、幅広い分野のメンバーが参加している。

Laravel4は、このPHP-FIGが定めるコーディング規約のPSR-0/PSR-1への準拠を目指しており、そのための手段として、Symfonyコンポーネントへの依存度を高めたという見方もできなくはない。

まあ、PSR-0/PSR-1に準拠すると具体的にどういうメリットがあるかは、現時点では計りかねるが、とにかく、理由はどうあれ、ユーザーにとっては、Laravel4が本格的な開発に利用できるフレームワークに進化することは、歓迎すべきだろう。