2014年4月22日火曜日

Symfony2.3へのアップグレード

4/19の土曜日に、Symfony勉強会 #9に参加してきました。#8に引き続き2回目の参加の新参者ですが、毎回参考になる発表が多く、かつ自分のSymfony愛(?)を大幅にupさせてくれる。すてきな勉強会です。

SymfonyはLong Term Support Releaseである2.3がリリースされてほぼ1年経過しました。また、2.2系は2014/5にサポート終了となることから、新規に使い始めるプロジェクトでは、2.4で導入された新機能をどうしても使いたい!というケース以外は2.3を選択することになるかと思います。 いままで〜2.2を使っていた方は2.3にアップグレードすることになります。2.2で非推奨になり、2.3で削除されるクラスやメソッドが存在するので注意が必要です。

UPGRADE-2.2.md

さらに、こちらのFabienの投稿にも有用な情報があります。

New in Symfony 2.2: Logging of deprecated calls

Symfony2.2以降では、非推奨なメソッドを呼んだり、非推奨なクラスのインスタンスを生成したときに、ログにdeprecation.warningとして記録されて、デバッグツールバーでもすぐわかるようになりました。

ここで実際私が体験した2.3へのアップグレードで気づいた点のお話です。 2.1 => 2.2 => 2.3とアップグレードしていったのですが、タイミングの関係で2.2を使用した期間が短かったのです。 2.2での開発や検証時にデバッグツールバーやログでのdeprecationを見落としてしまい、結果として2.3に上げた時点で、非推奨なメソッドを呼び出した時点でメソッドが存在しなくてエラーになってしまいました。

たとえばExecutionContext::addViolationAtPath()などです。 @okapon_ponさんもおっしゃっていましたが、フォームやバリデーションに互換性がなくなる変更が多かった印象です。 まだSymfony2.3にアップグレードしていないプロジェクトは、それなりに対応に時間をとっておいたほうが良いかと思います。

でも、これを乗り越えてしまえば、Fabienが「2.3以降はやむをえない理由以外は後方互換を保ちたい」と言っているように、今後のアップグレードは楽になると思います。