[Rails]deviseの導入手順

ユーザー管理機能を簡単に実装できる`devise`というGem
初めて学んだ時は理解できず難しいと感じてたけど、使ってるうちに理解できてきて便利さに感動！
なので備忘録として記事にしときます。

# deviseの導入手順
### ①Gemfileを下記のように編集

```ruby:Gemfile
#最後の行に追記
gem 'devise'
```

### ②下記のコマンドを実行してdeviseをインストール

```zsh:ターミナル
% bundle install
```
:::note warn
インストールしたGemの反映するタイミングはサーバー起動時なので、ローカルサーバーを起動しているのであれば再起動
:::

### ③以下のコマンドを実行して設定ファイルを作成
追加したdeviseの「設定関連に使用するファイル」を自動で生成するコマンド
deviseを追加したらとりあえず1度実行しておく、くらいの認識で



```zsh:ターミナル
% rails g devise:install
```

<details><summary>このようなログが流れれば成功！</summary><div>

```zsh
　　　　　　　　　　　　create  config/initializers/devise.rb
      create  config/locales/devise.en.yml
===============================================================================

Depending on your application's configuration some manual setup may be required:

  1. Ensure you have defined default url options in your environments files. Here
     is an example of default_url_options appropriate for a development environment
     in config/environments/development.rb:

       config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

     In production, :host should be set to the actual host of your application.

     * Required for all applications. *

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root to: "home#index"

     * Not required for API-only Applications *

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>

     * Not required for API-only Applications *

  4. You can copy Devise views (for customization) to your app by running:

       rails g devise:views

     * Not required *

===============================================================================

```
</div></details>

### ④deviseのUserモデル作成
作成には通常のモデルの作成方法(rils g model ○○)ではなく、deviseのモデル作成用コマンドでUserモデルを作成
以下のコマンドで実行

```zsh:ターミナル
% rails g devise user
```

<details><summary>このようなログが流れれば成功！</summary><div>

```zsh
      invoke  active_record
      create    db/migrate/20200309082300_devise_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      insert    app/models/user.rb
       route  devise_for :users
```
</div></details>

ログを見てみるとユーザーに関するモデルやマイグレーションも自動生成されていることがわかる
また、routes.rbに以下のルーティングが自動的に追記される

```ruby:config/routes.rb
Rails.application.routes.draw do
   devise_for :users #　追記されている
end
```

マイグーションファイルを確認してみると以下のようになっている

```ruby:db/migrate/20XXXXXXXXX_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: ""

     ## Recoverable
     t.string   :reset_password_token
     t.datetime :reset_password_sent_at

     ## Rememberable
     t.datetime :remember_created_at

     # 省略

     t.timestamps null: false
   end

   add_index :users, :email,                unique: true
   add_index :users, :reset_password_token, unique: true
   # add_index :users, :confirmation_token,   unique: true
   # add_index :users, :unlock_token,         unique: true
 end
end
```

デフォルトでメールアドレスやパスワードのカラムを作成する記述があることがわかる
他のカラム（ユーザー名など）を追加したい場合は自身で追記する必要があり、
自身で追加したカラムには別にストロングパラーメーターを使えるようにする記述が必要
　
テーブルの設計が確認できたら、**rails db:migrate**コマンドでマイグレーションを実行してuserテーブルを作成する。
　
以上がRailsにおけるdevise導入方法です
これだけでユーザー管理機能が実装できるとか便利すぎ！
　

※補足等ありましたらコメントいただけると幸いです