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アプリで自分で実装したデータ取得処理を変更しないといけない場合があるので注視する。
- すでに存在するカラムのタイプ(データ型や有効文字数など)を変更する際の方法を記載する。
- 現在のカラムタイプが下記に記載されているものではないと変更することはできない。
    - bigInteger
    - binary
    - boolean
    - date
    - dateTime
    - dateTimeTz
    - decimal
    - integer
    - json
    - longText
    - mediumText
    - smallInteger
    - string
    - text
    - time
    - unsignedBigInteger
    - unsignedInteger
    - unsignedSmallInteger
    - uuid
- 公式ドキュメントに記載されている内容を元に自分なりにまとめてみる。
    - [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 change_カラムタイプ変更するカラム名_既存カラムタイプ_to_変更後のカラムタイプ_on_所属テーブル名_table --table=所属テーブル名
        ```
    1. アプリ名ディレクトリで下記コマンドを実行してマイグレーションファイルを開く。

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

        ```database/migrations/YYYY_MM_DD_XXXXXX_change_変更する前のカラム名_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->変更したいデータ型('カラム名')->change();
                });
            }
        
            /**
             * Reverse the migrations.
             *
             * @return void
             */
            public function down()
            {
                Schema::table('テーブル名', function (Blueprint $table) {
                    //下記を追記する
                    $table->今までのデータ型('カラム名')->change();
                });
            }
        }
        ```

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名.テーブル名;
        ```

# メモ

- stringからintだとできなかったけどstringからintegerの指定だといけるかも知れん。試してみて

# 参考文献

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