Laravel 6.x を Laravel 7.x にアップグレードする

#やりたいこと
Laravel 6.xをつかってるがLaravel8.xも出たし、そろそろアップグレードしようと思いやってみた手順です
さすがに、でてすぐの8だと、サードパーティパッケージがまだ対応していないのが多いので7.xにします

自分がやったことをつらつらメモです

#PHPのバージョン

PHPのバージョンが`7.25`が必須になりました
Laravel6の時点で`7.2`が必要でした
今回自分は非対象でした

#パッケージ [影響高]
`composer.json`の下記パッケージを書き換えます

>
laravel/frameworkを^7.0へ
nunomaduro/collisionを^4.1へ
phpunit/phpunitを^8.5へ
laravel/tinkerを^2.0へ
facade/ignitionを^2.0へ

また、自身が使っているパッケージが7.xに対応しているか確認します

 - 一つ一つ確認する
 - とりあえず最新化してみる
 - とりあえず`composer update`したら対象のパッケージで死ぬの見てから判断
 - 一旦`composer.json`から削除し、再度追加
 
等関連パッケージも同様に対応させます

確認の仕方は[Packagist](https://packagist.org/)で依存パッケージにilluminateとかが`^7 `のやつだったり、
パッケージのGithubのリポジトリのreadmeを見るか、載ってなかったらissueで`7`で検索すると`Laravel 7.x support`とか出てくるのでそこから判断します

終わり次第

```
composer udpate
```

エラーで止まったら、対象のパッケージを確認してください


```
Your requirements could not be resolved to an installable set of packages.
  Problem 1
    - Conclusion: remove パッケージ名
    - Conclusion: don't install laravel/framework v7.28.4
```

ちなみに、

https://github.com/nunomaduro/phpinsights/issues/368

#Handlerクラスの修正 [影響高]
`app/Exceptions/Handler.php`の`Exception`を`Throwable`に変更します

インポート箇所を修正し
`report`、`render`メソッドの引数を修正
`shouldntReport`と`renderForConsole`はオーバーライドしている場合修正します

```php
use Throwable;

public function report(Throwable $exception);
public function shouldReport(Throwable $exception);
public function render($request, Throwable $exception);
public function renderForConsole($output, Throwable $exception);
```

<details><summary>修正後コード</summary>
<div>
```php:app/Exceptions/Handler.php
<?php

namespace App\Exceptions;

use Throwable;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.
     *
     * @param \Throwable $exception
     *
     * @throws \Throwable
     */
    public function report(Throwable $exception): void
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Throwable               $exception
     * @throws \Throwable
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function render($request, Throwable $exception)
    {
        return parent::render($request, $exception);
    }
}
```
</div>
</details>

#session.phpの修正 [影響高]

config/session.phpの

`'secure' => env('SESSION_SECURE_COOKIE', false),`の
`false`を`null`に変更

```php:config/session.php
'secure' => env('SESSION_SECURE_COOKIE', null),
```

#コマンドの修正 [影響高]

>Artisanの裏で動作しているSymfony Consoleはすべてのコマンドが整数値を返すことを期待しています。そのため値を返すすべてのコマンドは確実に整数を返してください。

`php artisan make:command`等で作るArtisanコマンド
`app/Console/Commands/`内のコマンドのうち、返り値を与えているコマンドは
整数で返すようにしないといけないそうです

自分のコマンドは返り値をもたせてない(`void`)なので特に修正不要でした

```php:app/Console/Commands/HogeCommand.php
public function handle()
{
    // 以前
    //return true;

    // 以後
    return 0;
}
```

#laravels/uiのアップグレード [影響高]

Laravelの認証スカフォールドを使用する場合対象です
Laravel6だと^1.0の`requre-dev`でしたが
Laravel7だとrequireに移動する必要があります。

```
composer require laravel/ui "^2.0"
```

#Bladeコンポーネントと"Blade x"

AppServiceProviderに`use Illuminate\Support\Facades\Blade;`と
` Blade::withoutComponentTags();`を追加

```php:AppServiceProvider
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Blade::withoutComponentTags();
    }
}
```

#アップグレードガイドに載ってない

ジョブの`failed`の引数が`Throwable`になりました

```php:app/Jobs/Hoge.php
public function failed(Throwable $exception)
{
        
}
```

#その他
https://readouble.com/laravel/7.x/ja/upgrade.html