これがsymfony 1.1だ
symfony 1.1リリース!
「symfony」というフレームワークを皆さんはご存じでしょうか。
symfonyは最近いろいろなところで開発基盤として採用され、注目されているオープンソースのPHP5専用フレームワークです。symfonyではMVC(Model View Controller)モデルを採用していることはもちろん、多機能であることや、プラグインによる拡張性の高さなどが大きな特徴として挙げられます。
まだフレームワークを使ったことがない方は「また1から覚えなおすの?」と思うかもしれません。しかし、筆者もフレームワークに慣れるまでは苦労しましたが、マニュアルを読みながら覚えていけば意外と簡単ですし、何より開発が格段に楽になったと実感しています。まだ使ってない方はこれを機会に使用することをお勧めします。
本連載では、そのsymfonyで近々リリースされる新バージョン1.1の機能について一足早く紹介したいと思います。現在のsymfonyのバージョンは1.1.0 RC1(2008年5月8日)です。なお、symfony自体のバージョンアップと共に必要なPHPのバージョンも、5.0以上から5.1以上となるので注意しましょう。
まずは、ざっとsymfony 1.1について知るのであれば、symfony本家サイトのwiki(http://trac.symfony-project.com/wiki/Symfony11)がお勧めです。RC1を使用する場合はこのページを必ず読んでおきましょう。なお、新バージョンのマニュアルもsymfony本家サイト(http://www.symfony-project.org/)にありますが、不足している部分もあるので、わからないことがあれば、検索するなりソースコードを読むなりする必要があります。
そこまで時間をとれないという方は、バージョン1.1のリリース後も当分の間1.0を使用してもよいでしょう。リリース直後はsymfony 1.1に未対応なプラグインや、情報が不足している可能性が高いので、リリース直後にいきなり使うのは大変です。バージョン1.0はエンタープライズリリースとしてメンテナンスされるので、当分の間使い続けることに問題はありません。ただ、新しいプラグインは当然1.1用に開発されることが多くなるでしょうし、機能追加もないので、できるだけ早い段階でアップデートしたほうがよいでしょう。
symfonyの概要はひとまずここまでとして、symfony 1.1で新規に開発をする場合にどのような点が問題になるかを見てみましょう。
symfonyコマンドのタスクの大幅変更
新しいバージョンでは、内部実装はたくさんの部分で書き直しや修正がはいっています。プログラムのインタフェースの変更もそれなりにされているので、symfonyコマンドのタスク、設定ファイル、フォームシステムなどたくさんの違いがあります。ですので、symfony 1.0で開発されている方は若干とまどうかもしれません。
「せっかく覚えた内容が無駄になるのか!?」というと、決してそんなことはなく、開発の流れは基本的には同じです。今までのようにプロジェクトアプリケーションモジュールを作成して、設定、モデル、アクション、テンプレートの開発を行っていけば問題ありません。個々の実装方法が今までと若干違うだけです。
一番初めに気づくのは、symfonyコマンドのタスクだと思います。オプションを何も付けずにsymfonyを実行するとsymfony 1.0と1.1では一目瞭然の違いがあります(図1)。
まず、タスクが「:」で分けられ、グルーピングされています。これはコマンドラインの実装がpakeというRubyのrakeをベースにしたビルドツールから、独自のクラスベールのタスクシステムに変更された際にネームスペースが導入されたためです。関数ベースからクラスベースに変更されているので、symfony 1.0用に開発したPakeタスクはsymfony 1.1では使用することができません。関数ベースの実装をクラスベースのタスクに変更しなければならない、ということを覚えておきましょう。
ただし、それほどタスクを自分で追加することもないでしょうし、それほど複雑なものでもないと思います。実際に使うときには、多少タスク名称が変更されているくらいに思っておけば問題ないでしょう。もし使い方がわからないタスクがあっても、新しく追加されたhelpタスクで使用方法を見ることができるので安心です。
例えば、thinkitプロジェクト、frontendアプリケーション、helloWorldモジュールを作成するまでのコマンドの流れはsymfony 1.0と1.1で以下のようになります。
バージョン1.0
$ symfony init-project thinkit(symfony new thinkitでも可)
$ symfony init-app frontend(symfony app thinkitでも可)
$ symfony init-module frontend helloWorld(symfony module frontend helloWorldでも可)
バージョン1.1
$ symfony generate:project thinkit(symfony init-project thinkitでも可)
$ symfony generate:app frontend(symfony init-app frontendでも可)
$ symfony generate:module frontend helloWorld(symfony init-module frontend helloWorldでも可)