Symfony Advent Calendar 2018 1日目の記事です!

今年もSymfony Advent Calendarは深刻な執筆者不足です :cry: まだまだ募集中ですのでよろしくお願いします!

さて、Symfonyには現在リリースされているバージョンがたくさんあります。
今からSymfonyを使ってみたい人は「どのバージョンで始めればいいの?」と混乱しちゃいますよね。Symfony2で開発したシステムを運用している人も「いつ・どのバージョンにアップグレードすればいいの?」とお悩みかと思います。
この記事がそのようなバージョン選択の一助になればと思います。

ずっとSymfonyの最新を追いかけている人はとっくに知っている内容でしょうがお付き合いください。

Symfonyのバージョン種類のおさらい

Symfonyのバージョンには大きく分けて5つの種類があります。

  • 安定版…毎年5月と11月にリリース。サポート期間8ヶ月、サポート期間終了後セキュリティサポート5ヶ月
  • LTS…長期サポートが約束された安定版。サポート期間3年、サポート期間終了後セキュリティサポート1年(つまり最大4年間使える)
  • RC…次の安定版のリリース直前に出るリリース候補バージョン。ほぼ安定版。ごくまれにバグが出ることもある
  • ベータ…次の安定版開発終盤に出てくるバージョン。バグが出ることもある
  • 開発版…現在の安定版に対して新機能追加や、大きく挙動が変わる

2018年12月1日現在の最新のSymfonyバージョン

  • 2.8は2018年11月でもうサポート期間終わり、セキュリティFIXのみ(バグがあってもセキュリティ関係なければ修正されない)
  • 3.4が現在のLTS 2020年11月までサポート、2021年11月までセキュリティFIXあり
  • 4.2は現在の安定版。昨日(11月30日)リリースされたばかり。2020年1月までサポート予定
  • 4.4は次のLTS 2019年11月にリリース予定。2022年11月までサポート

roadmapの見かた

各バージョンのリリース予定やサポート期間の詳細は、Symfony公式サイトにロードマップとして公開されています。 例えば、Symfony3.4のroadmapは https://symfony.com/roadmap/3.4 で見ることができます。

symfony3.4roadmap

3.4は2017年11月にリリースされて、2020年11月までサポートされ、2021年11月までセキュリティサポートが受けられるということが、視覚的にわかりやすく表示されていますね。

ロードマップのページの下部には、現在サポートされているバージョンと、他のバージョンのサポート期間グラフも表示されていて、次にアップグレードするバージョンを選ぶときの参考になります。

symfony_versions

プロジェクトのタイプ別 おすすめのバージョン戦略

すぐ一般公開するWEBサービスを作っている・既に公開済のWEBサービスをアップグレードする

現在のLTS 3.4 で始めて、4.4が出たら更新するのがおすすめです。
3.4→4.xはフレームワークとしての設定やディレクトリ構造が変わっていますが、肝心のアプリケーションコードの書き方の変更点は少なめで、それほど違和感なく移行できるようになっています。

Symfony2.8以下で開発していたWEBサービスも、一気に4.0以上に上げるより一度 3.4 を挟むと良いでしょう。
symfony/assetic-bundleのような、Symfony2時代にはデフォルトで含まれていてSymfony4で使えなくなるBundleもSymfony3.4ならまだギリギリ動きます。 一度Symfony3.4にアップグレードして運用を続け、その間にSymfony4で使えなくなる機能を徐々に新しい仕組みに移行していって、4.4が出たらスムーズに移行できるように準備すべきです。

1年後に公開予定のWEBサービスを作っている・すぐ公開するAPIサーバーを作っている

4.2 で始めてSymfonyのリリースごとに 4.34.4 とアップグレードしてLTSを適用していくのがおすすめです。
4.0〜4.4の間で原則として破壊的な変更は行われないので、スムーズに4.4に移行して、LTSの恩恵を受けることができます。

実験的プロジェクト、Symfonyを触ってみたいだけ

その時点で一番新しいバージョンを使ってみましょう。
実際に公開する予定も必要もないのであれば、安定版を待つ必要はありません(笑)

まとめ

なんだかんだで LTS を強力にオススメする結果となりました。

カルテット開発部ではLisketという1つのプロジェクトを皆で日々開発し続けています。
WEBサービスを一度リリースしてしまうと基盤を大きく変えるのは難しいので、Symfonyの明確なバージョニングやLTSのサポート期間にはずいぶん助けられているなぁと改めて思いました。