Laravel MySQL DBのカラム名を途中で変更する

# 目的

- Laravelにて新規作成後のDBのカラム名の変更方法をまとめる

# 実施環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

- ソフトウェア環境

| 項目 | 情報 | 備考 |
| --- | --- | --- |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08) |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでMySQLをインストールする](https://qiita.com/miriwo/items/ef6a064bc545fbea29d9) |

# 前提情報

- MySQLを使用しているが確認箇所以外はそのほかのRDSでも作業内容は変わらない。
- カラム名を変更するとLaravelアプリで自分で実装したデータ取得処理を変更しないといけない場合があるので注視する。
- すでに存在するカラムの名前を変更する際の方法を記載する。
- 本方法と応用するとカラムタイプなどの変更可能となる。
- 公式ドキュメントに記載されている内容を元に自分なりにまとめてみる。
    - [Laravel 7.x データベース：マイグレーション](https://readouble.com/laravel/7.x/ja/migrations.html)

# 概要

1. ライブラリのインストール
1. マイグレーションファイルの作成と記載
1. マイグレート
1. 確認

# 詳細

1. ライブラリのインストール
    1. アプリ名ディレクトリで下記コマンドを実行してライブラリをインストールする。

        ```terminal
        $ composer require doctrine/dbal
        ```

1. マイグレーションファイルの作成と記載
    1. アプリ名ディレクトリで下記コマンドを実行してマイグレーションファイルを作成する。

        ```terminal
        $ php artisan make:migration rename_変更する前のカラム名_to_変更した後のカラム名_on_所属テーブル名_table --table=所属テーブル名
        ```
    1. アプリ名ディレクトリで下記コマンドを実行してマイグレーションファイルを開く。

        ```terminal
        $ vi database/migrations/YYYY_MM_DD_XXXXXX_rename_変更する前のカラム名_to_変更した後のカラム名_on_所属テーブル名_table.php
        ```
    1. マイグレーションファイルを下記の様に修正する。(`public function up()`にはマイグレーションにより実行したい処理(今回だとカラムのリネーム)処理を記載する。`public function down()`にはロールバックで実行したい(カラムのリネームを直す)処理)

        ```database/migrations/YYYY_MM_DD_XXXXXX_rename_変更する前のカラム名_to_変更した後のカラム名_on_所属テーブル名_table.php
         <?php
        
        use Illuminate\Database\Migrations\Migration;
        use Illuminate\Database\Schema\Blueprint;
        use Illuminate\Support\Facades\Schema;
        
        class Rename変更する前のカラム名To変更した後のカラム名Onテーブル名Table extends Migration
        {
            /**
             * Run the migrations.
             *
             * @return void
             */
            public function up()
            {
                Schema::table('テーブル名', function (Blueprint $table) {
                    //下記を追記する
                    $table->renameColumn('変更する前のカラム名', '変更した後のカラム名');
                });
            }
        
            /**
             * Reverse the migrations.
             *
             * @return void
             */
            public function down()
            {
                Schema::table('テーブル名', function (Blueprint $table) {
                    //下記を追記する
                    $table->renameColumn('変更した後のカラム名', '変更する前のカラム名');
                });
            }
        }
        ```
1. マイグレート
    1. アプリ名ディレクトリで下記コマンドを実行してマイグレートを実行する。

        ```terminal
        $ php artisan migrate
        ```
1. 確認
    1. 下記コマンドを実行してMySQLにターミナルからログインする。(MySQLのパスワードを忘れてしまった方はこちら→[Mac ローカル環境の MySQL 8.0 のrootパスワードを忘れた時のリセット方法](https://qiita.com/miriwo/items/1880e9d2ebcfd3c0e60d))

        ```terminal
        $ mysql -u root -p
        ```
    1. 下記を実行してカラム名が変更されたことを確認する。

        ```sql
        mysql> show columns from DB名.テーブル名;
        ```

# 参考文献

- [Laravel 7.x データベース：マイグレーション](https://readouble.com/laravel/7.x/ja/migrations.html)