リリース直前! Laravel 5.3 の変更点(アップグレード編)

こんにちは。エンジニアの @localdisk です。今回はリリースを間近に控えた Laravel 5.3 に関する変更点の中から特にアップグレードする際に注意しなければならないところを取り上げていきます。

このエントリの内容は 2016/08/01 時点での内容です。今回説明した内容は変更される可能性があります。

まずはインストール

さて、まずは動かしてみましょう。

$ composer create-project laravel/laravel=dev-develop laravel53 --prefer-dist

$ php artisan -V
Laravel Framework version 5.3.0-Dev

でOK。それでは、変更点を探っていきましょう。

Laravel 5.3 は PHP 5.6.4 以上

Laravel 5.2 は PHP 5.5.9 以上でしたが、5.3 では PHP 5.6.4 以上となりました。アップグレードする際は注意してください。PHP 5.5 が EOL を迎えたので、これは順当な判断だと思います。

ディレクトリ構造の変更

app 配下の Events, Jobs , Listners, Policies が削除されました。これらは php artisan make:event|job|listner|policy を実行された際にディレクトリを作成するようになりました。シンプルになっていいんじゃないでしょうか。

f:id:localdisk:20160801154551j:plain

route ファイルの変更

プロジェクトルート配下に routes ディレクトリが新規に作成されました。この下に api.phpweb.php が用意されています。デフォルトで API 用とそれ以外のルートファイルが別れたようですね。アップグレードの際は App\Providers\RouteServiceProvider の修正が必要になると思います。

<?php
class RouteServiceProvider extends ServiceProvider
{
    protected function mapWebRoutes()
    {
        // この辺を変える
        Route::group([
            'namespace' => $this->namespace, 'middleware' => 'web',
        ], function ($router) {
            require base_path('routes/web.php');
        });
    }
    protected function mapApiRoutes()
    {
        // この辺を変える
        Route::group([
            'middleware' => ['api', 'auth:api'],
            'namespace' => $this->namespace,
            'prefix' => 'api',
        ], function ($router) {
            require base_path('routes/api.php');
        });
    }
}

認証用コントローラの変更

用意されていた認証用のコントローラですが、Laravel 5.2までは AuthControllerPasswordController が用意されていましたが、5.3 では

  • ForgotPasswordController
  • LoginController
  • RegisterController
  • ResetPasswordController

と分けられています。この変更によって Route::auth() の内容も変更されていますので気をつけてください。

なお php artisan make:auth コマンド実行時にルート定義ファイル(web.php)に書き込まれるルート定義が Route::auth() から Auth::routes() に変更されていますが、参照しているメソッドは一緒です。

App\Providers\BroadcastServiceProvider

App\Providers\BroadcastServiceProvider が新規に作成されました。今まではイベントの一部分という扱いでしたが、切りだされたようです。

Laravel と Vue.js

package.json に最初から vue.js が同梱されるようになりました。それに合わせて、Exampleに .vue ファイルが含まれています。

Laravel-Elixir が 5 → 6 へ

Laravel-Elixir がバージョンアップしました(正確には少し前から Ver 6 がリリースされています)。今までモジュール管理に使用されているのは Browserify でしたが、Ver 6 からは webpack module bundler がデフォルトになりました。今までのように Browserify が使いたい人は npm install laravel-elixir-browserify-official --save-dev してください。ちなみに npm install laravel-elixir-rollup-official --save-dev すれば rollup.js も使えるようです。

gulp コマンドを叩いた時の出力結果も随分わかりやすくなりました。個人的にはここが一番うれしいですね。

f:id:localdisk:20160801134727j:plain

アップグレード時の注意点

MySQL の strict モードのデフォルト値変更

config/database.phpmysql の部分ですが、 strictfalse から true にデフォルト値が変わっています。stricttrue の場合以下の sql_mode がセットされます。

set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

ちょっと雑なSQLを書いていると、この変更で「ソースを触ってないのに動かない!」という辛いことになるかと思いますので気をつけてください。 (NO_ZERO_DATENO_ZERO_IN_DATE は特に要注意です)

HHVM のサポート廃止

おそらくですが、Laravel 5.3 では HHVM のサポートが外されるようです。

既に .travis.yml から hhvm は外されています。

次回は

Laravel 5.3 で新たに追加された機能を取り上げる予定です。よろしくお願いします。