Aura for PHP 雑感 (と PHPフレームワークについて徒然)


誰かさんみたいに、●●雑感、という記事を書いてみたかっただけ、というのもあります。

まず Aura について知らない人が居たら、とりあえずこのあたりを参考に:

で、とりあえずこの記事では、Aura の使い方を説明するとかではなくて、それを取り巻く全体的なナニカについて徒然と書いてみようかと思います。

トピック的にはこんなかんじ:

  • 良質で軽量・クリーンなコンポネント群
  • Framework of Framework

良質で軽量・クリーンなコンポネント群

Aura がなにか、と言われたら多分フレームワークではなくコンポネント群である、という感じ。

Aura.Di (Dependency Injection) があり、Aura.Router (URL 解析とアクションの確定) があり、Aura.Dispatcher (アプリケーション実行) があり、Aura.Web (HTTP Request, Response 関連) などがあり、アプリケーション構築に必要なコンポネントが揃っている。

あれ、この感じどこかで、と思った方は多分思い出していると思うけど、そうそう、Symfony2 の Symfony Components

Symfony と Aura を比較して、簡単に例えるなら、ガチムチ Symfony と 細マッチョ Aura、という雰囲気。(適当)
Aura のコードは全体を割りとサクっと読める。

おそらく、Aura のことを (これまで他にあったような) Web Application Framework だと思って挑むと、いったいどのように使ったら良いのか、何から始めたら良いのかわからないと思う。一応チュートリアルはあるものの。

ちなみに、Aura の Web Site には、それ全体のことを「フレームワーク」とはどこでも言っていない Aura は High-quality tools for high-quality applications. であり、それ以下でも以上でもない。
メニューバーに Framework とあるけど、実はそこがミソで、おそらく、巷でイメージされるフレームワークという用語において、ここにおいてあるのは、 Aura.Framework_ProjectAura.Web_Project などのいわゆる フレームワーク っぽいものがあるが、これは簡単に言えば Aura のコンポネントを利用した Web Application Framework のサンプル実装 だと思うと理解が早い。(CLI Frameworkもある)
Aura はフレームワークありきで存在しているのではなく、コンポネントが集まっていて、それを利用した Web Application Framework のサンプル実装もソコにおいてあるよ、という感じ。

Framework of Framework

で、 @koriym さんの BEAR とかもそうなんだけど、最近でいうと、Symfony Component を利用した Laravel とかのように、

  • 良質なコンポネント群を提供する OSS プロジェクト
  • それを利用した Web Application Framework を提供する OSS プロジェクト

という感じに、2つの大きな流れがあるのかな、と。

Perl とかって CPAN のパッケージを組み合わせて Web Application Framework を作ったりしてるイメージなんだけど(最近の状況しらないけど。スイマセン)、最近PHPもそうなってきてるんじゃないかな、と。
PHP でこれまでなぜそれが起こってなかったか、あるいは今更になってなぜこういう流れになってきたのかを考えると、いくつかの要因を思いつくのだけど、

  • PHPは元々言語そのものが、HTTP からのディスパッチとか、パラメーターのやりとりとかをしてくれていたからあまり必要性がなかった
  • PHP 5.3 以降の言語仕様自体の進化によって再利用可能なライブラリを作りやすくなった
  • PSR-0, PSR-4 (PHP-FIG) と composer の台頭

あたりかなと。

第二次PHPフレームワーク大戦争 (symfony1 や CakePHP1 やそれこそ Ethna とかなんとかの時代) の時期に起こった、みんな同じようなコードをたくさんの人がたくさんのフレームワークで再実装している状況が少しなくなって、良い時代になってきた。あれ、何気 PHP-FIG (PHP Framework Interop Group) の狙った通りになってきてるのでは?

まぁもともと(多分)同じような考え方で Zend Framework は存在していたわけだけど、ちょっと時代が早かったのかもしれない。PHP本体の言語仕様の成長や取り巻く環境に合わせて、ライブラリやコミュニティが変化してきた、という感じかな。

ただし、それでいうと、今 Laravel 以外の大きな勢力が無い。CakePHP User や CodeIgniter User たちが割りと Laravel に集結してきてて、コンポネント時代は今のところ Symfony コンポネントとそれを利用した Laravel に軍配が上がっている(個人的な見え方)。
あ、もちろん勝ち負けとかではないけどね。

で、これからどうするべきか

結局のところ、これから何かしらのフレームワークを選びたいとしたら、Laravel。
それが使いづらかったら Aura や Symfony あたりのコンポネントを組み合わせて独自フレームワーク作っちゃえば良いのではないか、という感じもする。使いづらい、というのは、単に書き方だけでなく、重さ、拡張性、メンテンナンス性などの総合的な視点でね。
素の PHP や、例えばこれまで社内で使ってきたライトな独自フレームワークを、Aura や Symfony のコンポネントを使うように rewrite するとか、そのあたりが筋の良い選択になるのではないかね。