PHP5.6→7系、Laravel5.4→5.5への移行アップデートでざっくりやったこと


## なぜバージョンアップするのか
PHP7の高速化の恩恵にも預かりたいですが、PHP5.6のサポートが2018年いっぱいで切れるということが一番大きいです。
Laravelへの移行はPHPのバージョンアップに伴ってというところですが、5.5がLTSなので早いとこそれに変えておきたいという面もあります。

大まかに下記のような手順でバージョンアップを進めていきたいと思います。

1. 現在のコードをPHP7にしても文法的にエラーがないか確認
2. 実際に開発環境をPHP7にして確認
3. Laravel5.5用にプロジェクトをアップデート

## 1. 現在のコードをPHP7にしても文法的にエラーがないか確認
### 文法チェックツールでコマンドラインからサクッと確認
[sstalle/php7cc: PHP 7 Compatibility Checker](https://github.com/sstalle/php7cc)

php7ccはphp5系（5.3〜5.6）からphp7への移行をサポートしてくれるコマンドラインツールで、移行プロジェクトの文法的なエラーやWarningを教えてくれる。
ただし、現在すでにphp7ccは開発サポートされていないので、[phan](https://github.com/phan/phan)や[phpstan](https://github.com/phpstan/phpstan)などの別の代替サポートツールを使うのもいいかも。

#### 使い方
```bash
# インストール
$ composer global require sstalle/php7cc

# パスを通す
$ export PATH="$PATH:$HOME/.composer/vendor/bin"

# カレントディレクトリ配下をvendor配下を除いて全て文法チェック。結果はjson形式で表示
$ php7cc --except=vendor -o json ./ > result.json
```

ここで文法的エラーが出るようであれば修正の必要あり。
php7の変更点のマニュアルなどを参考に修正します。
[PHP: 下位互換性のない変更点 - Manual](http://php.net/manual/ja/migration70.incompatible.php)


## 2. 実際に開発環境をPHP7にして確認
### php7.xのバージョン選定
実際php7系をインストールする段階なので、7系のどのマイナーバージョンを使用するか決める必要があります。

2018/4/30現在の最新版は7.2で、速度も7.1から改善しているらしいです。
ある程度世間で使われたバージョンの方が好ましい場合もあったりいろいろですが、下記記事などによると7.1の恩恵は大きそうなので、少なくとも7.0よりは7.1を検討した方が良さそうです。今回は7.1をインストールしてみたいと思います。
[それでもphp 7.1以降を使うべき7つの理由 - Qiita](https://qiita.com/zeriyoshi/items/a2648c35e5f3c87b2d59)

### php7.1のインストール方法
CentOS7系の標準リポジトリのPHPバージョンは5.4で、標準リポジトリに7系は入っていないので、epel、remiを追加する必要があります。
最初からepel、remiといったリポジトリが入ってる場合もあるので、`yum repolist`で確認します。

参考：[CentOS6／CentOS7にPHP5.6／PHP7をyumでインストール - Qiita](https://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e)

```bash
# epelを追加
$ yum install -y epel-release

# remiを追加
$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# php7.1、その他Laravel5.5の要件となるモジュールをインストール
$ yum install -y --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-xml

# php7.1のインストールを確認
$ php -v
PHP 7.1.17 (cli) (built: Apr 25 2018 08:30:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

# Laravel5.5の要件のphpモジュールの確認
$ php -m
mbstring
openssl
PDO
tokenizer
xml
（他略）
```

実際にPHP7.1がインストールできたので、この段階で一度Laravelアプリケーションでのテストやブラウザ確認を行ってもいいかもしれません。

## 3. Laravel5.5用にプロジェクトをアップデート
### アップグレードガイドを読む
PHP7.1では最新版のLaravel5.6にアップグレードすることができますが、今回はLTSの5.5にアップグレードしていきます。
丁寧にアップグレードガイドが用意されているので読んでおきます。5.4からの変更点は大したものはなく、工数1時間程度らしいです。（これが5.1からのアップグレードとかだと大変なので、Laravelは細かくマイナーバージョンアップした方がいいかもしれないです）
[アップグレードガイド 5.5 Laravel](https://readouble.com/laravel/5.5/ja/upgrade.html)

### composer.jsonをアップデート

5.4からは大きな変更点はそんなにないので、composer.jsonの変更点だけですむ場合も多いのではないでしょうか。composer.jsonは基本的にはlaravelのgithubの5.5ブランチの通りに書いていけばいいのではないかと思いますが、自分で変更を加えた点についてはその限りではないので注意。
[laravel/composer.json at 5.5 · laravel/laravel](https://github.com/laravel/laravel/blob/5.5/composer.json)

追加で入れているライブラリがあればPacakgistも確認して、使用するPHPバージョンに適した記述でcomposer.jsonを修正します。
[laravel/laravel - Packagist](https://packagist.org/packages/laravel/laravel#v5.5.28)

バージョニングの指定の仕方をよく忘れるので引用。

|指定|対象となるバージョン|
|---|---|
|1.*|1.x.x|
|1.2.*|1.2.x|
|~1.1|1.1以上、2未満|
|~1.1.5	|1.1.5以上、1.2未満|
|^1.1|1.1以上、2未満|
|^1.1.5	|1.1.5以上、2未満|
|>=1.2|1.2以上|
|~2.0,>=2.6|2.0以上3未満 かつ 2.6以上|
|>=2.0｜3.0-beta|2.0以上 または 3.0beta版|

[[初心者向け] composerのバージョン指定方法 | QUARTETCOM TECH BLOG](http://tech.quartetcom.co.jp/2015/01/19/composer-practices/)

以上！