Symfony Advent Calendar 2018 24日目の記事です。(ちょっと遅くなってしまいました)

はじめに

Symfony2系はサポート終了しました。(2.8のセキュリティサポートはあと1年ぐらいあります)
でも、Symfony2で作られたプロジェクトは生きていて、そんなに簡単にSymfony3, Symfony4の新しい構造のプロジェクトに移行はできません。

そこにSymfony経験のない新入社員が来たら…どうします?

フロントエンド界隈の変化ほどじゃないですが、Symfony2→Symfony3→Symfony4はデフォルトのプロジェクト構造にかなり変化があります。
実際にSymfonyを使って開発する人にとっては書く内容は大して変わってないですし、もともとSymfony2で開発していた人がSymfony3, Symfony4に移行するのはそれほど難しくありません。なんといってもSymfonyは2→4の間に複雑さを除く方向に進化したので。

しかし、Symfony未経験の人がチュートリアルとしてSymfony3やSymfony4に入門して、その後にSymfony2の構造で動いているプロジェクトを触るのは、難しいのではないかと思っています。
不要なものとして後に切り捨てられた複雑性を必要とする世界に、不要な世界から戻らされることになります。

そこで、なんとかして 新人さんにはSymfony3.4を使うけどSymfony2.8と同じ構造でSymfonyに入門してほしい と思い、方法を考えました。

Symfonyのバージョンは3.4だけど構造はSymfony2スタイルのプロジェクトを作る

結論から言うと、方法とは、 Symfony2.8のプロジェクトを作ってSymfony3.4にバージョンアップする です。

Symfony2.8のプロジェクトを作る

symfony/framework-standard-edition を使い、まずは2.8を指定してプロジェクトを作ります。

$ composer create-project symfony/framework-standard-edition:"~2.8" myproject

Symfony2.8→Symfony3.4バージョンアップの準備

myproject にできあがるのは、ただのSymfony2.8の空のプロジェクトです。
これをSymfony3.4にバージョンアップしたいのですが、そのためには準備が必要です。

PHPのバージョン変更

composer.json上で require.phpconfig.platform.php を修正して、依存するPHPのバージョンを変更します。
Symfony3.4のcomposer.json を見る限り5.5.9以上、7.0.8以上なら大丈夫そうです。
※ 私の手元の環境で一番古いのがPHP7.1.11だったので、仮で 7.1 にしてあります。

# composer.json
"require": {
- "php": ">=5.3.9"
+ "php": ">=7.1",
// ...
},
# composer.json
"config": {
  "platform": {
-     "php": "5.6"
+     "php": "7.1",
  }
// ...
},

sensio/distribution-bundleのバージョン変更 4.x→5.x

sensio/distribution-bundle の4.xはSymfony3に対応していないので、5.xに上げます。

$ composer reqiure sensio/distribution-bundle:"~5.0"

Symfony2.8→Symfony3.4バージョンアップ

いよいよSymfonyをバージョンアップします。composer.jsonを編集してからcomposer updateすればOKです。

# composer.json
- "symfony/symfony": "2.8.*",
+ "symfony/symfony": "3.4.*",
$ composer update symfony/symfony

これで完成です!

まとめ

巨大なプロジェクトをどのようにSymfony4に適合させていくか、まだまだ検討中です。
Symfony3.4でしばらく時間を稼ぎたいところです。

サンプルプロジェクト https://github.com/77web/Symfony-update-test