RitoLabo

Laravel5.5から5.6へアップグレードする

  • 公開:
  • 更新:
  • カテゴリ: PHP Laravel
  • タグ: PHP,Laravel,composer,5.5,5.6,Upgrade

2018年2月7日にLaravel5.6がリリースされました。

前バージョンの5.5に関してはLTS(Long Term Support)ではありましたが、PHP7.2やSymfony4の登場によって、5.6ではそこそこの変更点があります。

今回は、Laravel 5.5 から 5.6 へのアップグレードを行います。

アジェンダ
  1. 検証環境
  2. サーバ要件
  3. 依存パッケージのアップデート
  4. aravel 5.6 アップグレード
  5. 設定ファイル・設定値の変更
    1. プロキシ設定の変更
    2. ハッシュ設定ファイルの作成
    3. ログ設定ファイルの作成
    4. 不要設定値の削除
  6. 動作確認

検証環境

今回の検証環境は以下の通りです。

  • Linux CentOS 7
  • Apache 2.4
  • MySQL 5.7
  • PHP 7.2

尚、Laravelのルートディレクトリを「laravel/」とします。

サーバ要件

5.6へのアップグレードで変更、及び追加で必要となったサーバ要件は以下になります。

  • PHP >= 7.1.3
  • Ctype PHP Extension
  • JSON PHP Extension

PHPのバージョンが足りない場合はアップデートもしくはアップグレードを行う必要があります。

CtypeとJSONのエクステンションについては、古過ぎないPHPであれば標準で入っています。

JSON
PHP 5 >= 5.4.0, PHP 7
Ctype
PHP 4 >= 4.0.4, PHP 5, PHP 7

PHPのアップグレード、拡張モジュールのインストールについては以下を参考にしてください。

依存パッケージのアップデート

次に、依存パッケージをアップデートしていきます。主な変更点は以下の通りです。

php
7.0.0 → 7.1.3
laravel/framework
5.5.* → 5.6.*
fideloper/proxy
~3.3 → ~4.0
phpunit/phpunit
~6.0 → ~7.0
scriptsプロパティ
php artisan optimizeセクションを削除
minimum-stability
minimum-stability: dev を追記
prefer-stable
prefer-stable: true を追記

以下に関してはデフォルトのものではないので必要に応じて記述してください。

olssonm/l5-very-basic-auth
Basic認証をかける為のライブラリ
4.* → 5.*
renatomarinho/laravel-page-speed
HTMLなどをminifyするためのライブラリ
5.6に対するアップデートがまだアナウンスされていないのでひとまず^1.8で据え置き
league/flysystem-aws-s3-v3
ファイルストレージを使う為のライブラリ
~1.0 で据え置き
laravel/socialite
SNSログインを使う為のライブラリ
^3.0 で据え置き

上記を踏まえ、composer.json を以下のように変更します。

laravel/composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
- "php": ">=7.0.0",
+ "php": ">=7.1.3",
"aws/aws-sdk-php": "~3.0",
"doctrine/dbal": "^2.6",
- "fideloper/proxy": "~3.3",
+ "fideloper/proxy": "~4.0",
"guzzlehttp/guzzle": "^6.3",
- "laravel/framework": "5.5.*",
+ "laravel/framework": "5.6.*",
"laravel/tinker": "~1.0",
"predis/predis": "^1.1",
- "olssonm/l5-very-basic-auth": "4.*",
+ "olssonm/l5-very-basic-auth": "5.*",
"renatomarinho/laravel-page-speed": "^1.8",
"league/flysystem-aws-s3-v3": "~1.0",
"laravel/socialite": "^3.0"
},
"require-dev": {
"filp/whoops": "~2.0",
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"nunomaduro/collision": "~2.0",
- "phpunit/phpunit": "~6.0"
+ "phpunit/phpunit": "~7.0"
},
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"extra": {
"laravel": {
"dont-discover": [
]
}
},
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
- "post-install-cmd": [
- "Illuminate\\Foundation\\ComposerScripts::postInstall",
- "php artisan optimize"
- ],
- "post-update-cmd": [
- "Illuminate\\Foundation\\ComposerScripts::postUpdate",
- "php artisan optimize"
- ],
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
}
,
+ "minimum-stability": "dev",
+ "prefer-stable": true
}

Laravel 5.6 アップグレード

それではここから、実際にアップグレードを行っていきます。まずは現在のバージョンを確認します。

# Laravelルートディレクトリへ移動する
cd /path/to/laravel

# Laravelのバージョンを確認する
[demo@localhost laravel]# php artisan
Laravel Framework
5.5.33

アップグレード前のバージョンは5.3.33です。

それでは、5.6へアップグレードします。laravelルートディレクトリへ移動し、以下のcomposerコマンドを叩きます。

# Laravelルートディレクトリへ移動する
cd /path/to/laravel

# Laravelのアップグレードを行う
composer update

# 実行結果
[demo@localhost laravel]# composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 8 installs, 18 updates, 2 removals

- Removing
symfony/polyfill-php70 (v1.7.0)
- Removing
mtdowling/cron-expression (v1.2.1)
- Updating
symfony/http-foundation (v3.4.4 => v4.0.4): Loading from cache
- Updating
symfony/debug (v3.4.4 => v4.0.4): Loading from cache
- Installing
symfony/polyfill-php72 (v1.7.0): Loading from cache
- Updating
symfony/var-dumper (v3.4.4 => v4.0.4): Loading from cache
- Updating
symfony/routing (v3.4.4 => v4.0.4): Loading from cache
- Updating
symfony/process (v3.4.4 => v4.0.4): Loading from cache
- Updating
symfony/http-kernel (v3.4.4 => v4.0.4): Loading from cache
- Updating
symfony/finder (v3.4.4 => v4.0.4): Loading from cache
- Updating
symfony/console (v3.4.4 => v4.0.4): Loading from cache
- Installing
dragonmantank/cron-expression (v2.0.0): Loading from cache
- Updating
laravel/framework (v5.5.33 => v5.6.5): Downloading (100%)
- Updating
fideloper/proxy (3.3.4 => 4.0.0): Loading from cache
- Updating
sebastian/diff (2.0.1 => 3.0.0): Loading from cache
- Updating
phpunit/phpunit-mock-objects (5.0.6 => 6.0.1): Loading from cache
- Updating
phpunit/php-timer (1.0.9 => 2.0.0): Loading from cache
- Updating
phpunit/php-token-stream (2.0.2 => 3.0.0): Loading from cache
- Updating
phpunit/php-code-coverage (5.3.0 => 6.0.1): Loading from cache
- Updating
phpspec/prophecy (1.7.3 => 1.7.5): Downloading (100%)
- Updating
phpunit/phpunit (6.5.6 => 7.0.1): Loading from cache
- Installing
nunomaduro/collision (v2.0.0): Downloading (100%)
- Installing
renatomarinho/laravel-page-speed (1.8.7): Downloading (100%)
- Installing
olssonm/l5-very-basic-auth (v5.0): Downloading (100%)
- Updating
aws/aws-sdk-php (3.52.2 => 3.52.16): Downloading (100%)
- Installing
league/flysystem-aws-s3-v3 (1.0.18): Downloading (100%)
- Installing
league/oauth1-client (1.7.0): Downloading (100%)
- Installing
laravel/socialite (v3.0.9): Downloading (100%)
Writing lock file
Generating optimized autoload files

> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/socialite
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Discovered Package: olssonm/l5-very-basic-auth
Discovered Package: renatomarinho/laravel-page-speed
Package manifest generated successfully.

ネットワーク環境によっては数分程度かかるので気長に待ちましょう。

アップグレードが終わったら、artisanコマンドを叩いてバージョンを確認します。

# Laravelルートディレクトリへ移動する
cd /path/to/laravel

# Laravelのバージョンを確認
php artisan

# 実行結果
[demo@localhost laravel]# php artisan
Laravel Framework
5.6.5

Laravel 5.6.5 にアップグレードされました。

設定ファイル・設定値の変更

アップグレードは完了しましたが、それだけではまだ動作しません。5.5と5,6で変更になった設定に基づいて変更を行っていきます。

プロキシ設定の変更

Laravel5.6でSymfonyのバージョンが3から4に上がった事もあり、設定の変更が必要です。

ミドルウェアのTrustProxiesのメンバ変数を変更します。

laravel/app/Http/Middleware/TrustProxies.php
<?php

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;

class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array
*/
protected $proxies;

/**
* The current proxy header mappings.
*
* @var array
*/

/* ここを削除
protected $headers = [
Request::HEADER_FORWARDED => 'FORWARDED',
Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
];
*/
// ↓ 以下へ変更

protected $headers = Request::HEADER_X_FORWARDED_ALL;
}

ハッシュ設定ファイルの作成

Laravel 5.6 から、ハッシュに関する設定ファイルが独立ファイルに切り出されたので、手動でlaravel/config 配下に hashing.phpを作成し、既存の設定を移します。

laravel/config/hashing.php
<?php

return [

/*
|--------------------------------------------------------------------------
| Default Hash Driver
|--------------------------------------------------------------------------
|
| This option controls the default hash driver that will be used to hash
| passwords for your application. By default, the bcrypt algorithm is
| used; however, you remain free to modify this option if you wish.
|
| Supported: "bcrypt", "argon"
|
*/

'driver' => 'argon',
// または
// 'driver' => 'bcrypt',

];

ここでは設定値として「bcrypt」と「argon」が設定できますが、PHP7.2の場合はbcrypt拡張は削除されているのでargonを指定します。

ログ設定ファイルの作成

5.6からログ設定も独立したので、laravel/config 配下に logging.phpを手動で作成し、既存の設定を移します。

laravel/config/logging.php
<?php

return [

/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this option should match
| one of the channels defined in the "channels" configuration array.
|
*/

'default' => env('LOG_CHANNEL', 'stack'),

/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "custom", "stack"
|
*/

'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
],

'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],

'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 30,
],

'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],

'syslog' => [
'driver' => 'syslog',
'level' => 'debug',
],

'errorlog' => [
'driver' => 'errorlog',
'level' => 'debug',
],
],

];

上記はデイリーで30日間ログを残す設定になっています。

ログ設定ファイルについて詳しくは以下を確認してください。
ログの設定 - Laravel5.6

不要設定値の削除

最後に、5.5以前で設定されていたログの設定値を削除します。以下については全て削除してしまってOKです。

laravel/config/app.php
// これらは全て削除する
/*
|--------------------------------------------------------------------------
| Logging Configuration
|--------------------------------------------------------------------------
|
| Here you may configure the log settings for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Settings: "single", "daily", "syslog", "errorlog"
|
*/

'log' => env('APP_LOG', 'daily'),
'log_max_files' => 30,
'log_level' => env('APP_LOG_LEVEL', 'debug'),

動作確認

全ての作業が完了したので、実際にブラウザからアクセスして確認してみます。Laravelの初期ページをひゅじさせてみます。
http://YOUR-DOMAIN

welcomeページ

無事に表示されました。

まとめ

以上で作業は完了です。PHP7.2やSymfony4の事もあり、いつもより変更する箇所も多少ありましたが、必要な手順を踏めば問題なくアップグレードが行えるので是非試してみてください。

ちなみに既存のアプリケーションをアップグレードする場合には、使っているLaravelの機能によってはこの他にも手を入れる必要がある場合があるので、アップグレードを行う場合にはドキュメントをよく読んでから行うようにしてください。