EC2にLaravelプロジェクトをデプロイしていく中で、artisanが実行できなくなった時にやること

## 背景
 Mac環境でLaravelプロジェクトをAWSのEC2にデプロイしようとしたところ、`php artisan key:generate`が`PHP Fatal errar`で返ってきてしまいました。
 しかし何日かの奮闘の末、解決することが出来たので、同じ悩みを持つ方の手助けに少しでもなればと思いその解決方法を共有させていただきます。
## 結論：バージョンとcomposer.json
このエラーは
1. composer.jsonの中身がおかしかったこと
2. ローカルのものとEC2上のものでバージョンが違っていたこと
の2点が原因でした。したがってまずcomposer.jsonの中身を書き換えるところから説明していきます。

## composer.jsonの中身を書き換える
重要なcomposerのファイルは2種類あります。このエラーで悩まれている方なら２つとも既に存在しているファイルです。
**composer.json**
- composer installを実行する際にはこのjsonファイルの定義を元にパッケージのダウンロードを行う
- composer updateでjsonの定義を元に各バージョンのライブラリををアップデートする。
**composer.lock**
- composer installでlockに書き出されて各バージョンのライブラリをダウンロードする。
> 引用　https://qiita.com/a-nishimura/items/8c71085183e0b8a53f6a

 したがって`composer　install`において、composer.jsonの定義がとても重要になります。しかし私の場合、このjsonファイルが2行しか書かれていませんでした。
 確認及び書き換えは`vim composer.json`で行うことが出来ます。内容を確認した後、jsonファイルを以下の内容に書き換えましょう。

    {
      "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.2.5|^8.0",
        "fideloper/proxy": "^4.4",
        "laravel/framework": "^6.20",
        "laravel/tinker": "^2.5"
    },
    "require-dev": {
        "barryvdh/laravel-debugbar": "^3.3",
        "facade/ignition": "^1.16.4",
        "fakerphp/faker": "^1.9.1",
        "laravel/ui": "^1.2",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^3.0",
        "phpunit/phpunit": "^8.5.8|^9.3.3"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
この段階では、まだcomposerのインストールは行いません。
次にバージョン合わせです。

## バージョンを合わせる
 私の場合、ローカルがPHP7.3、EC2がPHP7.2でした。ということはEC2上でPHPのバージョンを7.2から7.3へと上げなければなりません。以下にそのやり方を記述していきます。
まずPHPのバージョンを確認していきましょう。
`php -v`
次にバージョンを7.2から7.3へ上げていきます。

```c

sudo amazon-linux-extras disable php7.2
sudo amazon-linux-extras disable lamp-mariadb10.2-php7.2
sudo amazon-linux-extras enable php7.3
sudo yum install php-cli php-pdo php-fpm php-json php-mysqlnd
sudo yum install php-mbstring
sudo yum install php-dom
```
> 参考：https://forums.aws.amazon.com/thread.jspa?messageID=908568

## composerをインストールする
これで最後です。
`composer install`

## 最後に
ここまでお疲れ様でした。最後に、私がこの方法に行き着くまでに試したコマンドを以下に載せようと思います。ただし、lamp-maraiadb10.2をdisableにしていることには留意してください。
```composer update
composer update —no-scripts
composer dump-autoload```
これらが上手くいかなかったのは、前述の通り大元のcomposer.jsonを書き替えてなかったからだと思います。