Rails gem 'devise' のmigrateエラー

## devise導入後のmigrateエラー
エラー文章
`BLOB/TEXT column 'profile' can't have a default value`

###1.実行環境

```bash
Ruby 2.6.5
Rails 6.0.0
DB mysql
```

### 2.エラーまでの実際の処理手順
1.railsのGemにdeviseを記述 `gem 'devise'`
2.ターミナルで実行`bundle install`
3.devise関係のファイルを生成。ターミナルで実行`rails g devise:install`
4.ユーザーモデルの作成。ターミナルで実行`rails g devise user`
5.テーブル設計のため、migrationファイルに追加カラムを記述

```ruby:20210513023545_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      t.string :name,               null: false, default: ""
      t.text :profile,              null: false, default: ""
      t.text :occupation,           null: false, default: ""
      t.text :position,             null: false, default: ""
```

6.アプリケーションコントローラーに追加カラムのストロングパラメーターを記述。
deviseの場合は`devise_parameter_sanitizerメソッド`を使用する。
メソッド名は`configure_paramitted_parameters`にするのが通例だが、別名でも可。
これにより、deviseからの新規登録やログイン時のリクエストでパラメーターを受け取れるようになる。
※emailとパスワードはデフォルトで設定されるので記述不要。

```ruby:application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :profile, :occupation, :position])
  end
end
```

7.migrateを実行
<b>ここでエラーになる！</b>

```bash
 % rails db:migrate
== 20210513005253 DeviseCreateUsers: migrating ================================
-- create_table(:users)
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: BLOB/TEXT column 'profile' can't have a default value
```

### 3.エラー理由はなに？
ここまでの流れでなぜエラーになるのかが分かりません。
なぜなら、ほぼ同じ流れで別のアプリのユーザーログイン機能を実装したからです。
ここで疑わしいのはエラー文の一番下。
`Mysql2::Error: BLOB/TEXT column 'profile' can't have a default value`
`profile`
しかし、見直しても変なところが見つかりません。

### 4.Google先生に聞く！
すると、こんな記事が見つかりました。

https://qiita.com/arata_t_n/items/4bd376870549a9970323

そう<b>deviseのデフォルト</b>にエラー理由があったようです。
もう一つ参考記事

https://qiita.com/nekononeko_53/items/9bed1d6bee69f87985c7

どうやらバージョンが変わるにつれて過去の記述の方法だとエラーになってしまうらしい。
今回で言うと<b>text型のカラム</b>にdefaultを設定するのはエラーだそうです。
そこで、追加カラム分の`default: “”`を削除します。

```ruby:20210513023545_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      t.string :name,               null: false, default: ""
      t.text :profile,              null: false
      t.text :occupation,           null: false
      t.text :position,             null: false
```

これでmigrateを実行しますが・・・
<b>エラー</b>になりました！

### 5.deviseのprivateメソッド
続いてのエラーを探るとprivateメソッドにも問題があるようです。
これもバージョン変更によるものなのか、
デフォルトで設定されるはずの”password”もprivateメソッドに記述することでエラーが解消できました。

```ruby:application_controller.rb
  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:password, :password_confirmation, :name, :profile, :occupation, :position])
  end
```

これで無事に
`rails db:migrate`
が実行され、データベースに追加カラムも含めたUsersテーブルができました。


### 6.devise導入時のエラーポイント
・text型のカラムにdefaultの設定をするとエラーになるかも！
・privateメソッドの記述ではデフォルトのはずのpasswordも追加記述をする必要があるかも！