1. Home
  2. PHP
  3. Laravel
  4. Laravel5.5から5.6へアップグレードする

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

  • 公開日
  • 更新日
  • カテゴリ:Laravel
  • タグ:PHP,Laravel,Upgrade
Laravel5.5から5.6へアップグレードする

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

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

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

Contents

  1. 検証環境
  2. サーバ要件
  3. 依存パッケージのアップデート
  4. Laravel 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 であれば標準で入っています。

JSONPHP 5 >= 5.4.0, PHP 7CtypePHP 4 >= 4.0.4, PHP 5, PHP 7PHP のアップグレード、拡張モジュールのインストールについては以下を参考にしてください。

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

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

  • 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

無事に表示されました。

まとめ

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

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

Author

rito

  • Backend Engineer
  • Tokyo, Japan
  • PHP 5 技術者認定上級試験 認定者
  • 統計検定 3 級