こんにちは。エンジニアの @localdisk です。今回はリリースを間近に控えた Laravel 5.3 に関する変更点の中から特にアップグレードする際に注意しなければならないところを取り上げていきます。
このエントリの内容は 2016/08/01 時点での内容です。今回説明した内容は変更される可能性があります。
- まずはインストール
- Laravel 5.3 は PHP 5.6.4 以上
- ディレクトリ構造の変更
- route ファイルの変更
- 認証用コントローラの変更
- App\Providers\BroadcastServiceProvider
- Laravel と Vue.js
- Laravel-Elixir が 5 → 6 へ
- アップグレード時の注意点
- 次回は
まずはインストール
さて、まずは動かしてみましょう。
$ 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
を実行された際にディレクトリを作成するようになりました。シンプルになっていいんじゃないでしょうか。
route ファイルの変更
プロジェクトルート配下に routes
ディレクトリが新規に作成されました。この下に api.php
と web.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までは AuthController
と PasswordController
が用意されていましたが、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 コマンドを叩いた時の出力結果も随分わかりやすくなりました。個人的にはここが一番うれしいですね。
アップグレード時の注意点
MySQL の strict モードのデフォルト値変更
config/database.php
の mysql
の部分ですが、 strict
が false
から true
にデフォルト値が変わっています。strict
が true
の場合以下の 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_DATE
や NO_ZERO_IN_DATE
は特に要注意です)
HHVM のサポート廃止
おそらくですが、Laravel 5.3 では HHVM のサポートが外されるようです。
既に .travis.yml
から hhvm
は外されています。
次回は
Laravel 5.3 で新たに追加された機能を取り上げる予定です。よろしくお願いします。