deviseインストール方法,日本語化

<h2>deviseとは</h2>
DeviseとはRailsで作成したアプリケーションへ簡単に認証機能を実装することができるgem（ライブラリ）の一つです。

ログイン、ログアウト、サインアップなどの機能を自分自身で作成するのは時間がかかりますが、devise（gem）をインストールすることでコードも簡潔に簡単に実装することができます。


Deviseをインストールすることで下記の機能を実装することができます。
<ul>
<li>サインアップ機能</li>
<li>サインイン機能</li>
<li>アカウント編集機能</li>
<li>パスワード変更機能</li>
<li>メール認証機能</li>
<li>アカウント凍結機能</li>
</ul>


<h2>deviseインストール手順</h2>

gemfileに下記を追記してbundle install
(devise-i18nは国際化gemで日本語化することができます。必要のない場合はgemfileに追記する必要はないです。) 

```ruby:gemfile
gem 'devise'
gem 'devise-i18n'
```
bundle install完了後下記コマンドを実行

```ruby:コンソール
$ rails generate devise:install
```

<h2>deviseの設定</h2>
コマンドを実行して、正常に完了したら下記のようになります。
必要に応じてファイル等をい編集してください。

```ruby:コンソール
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 *
```

<h3>1.URLオプションが定義</h3>
コマンドに表示された文面通りにコードを追加。

```ruby:config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
```

<h3>2.root pathの設定</h3>
routes.rbにルーティングの設定。

```ruby:config/routes.rb
root to: "home#index"
```

<h3>3.フラッシュメッセージの設定</h3>
ビューにフラッシュメッセージの表示のためapplication.html.erbに下記コードを追記


```ruby:app/views/layouts/application.html.erb
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
```

<h3>4.devise viewを追加</h3>
deviseのビューを追加するために下記のコマンドを実行。

```ruby:コンソール
rails g devise:views
```

'devise-i18n'を利用してビューを追加する際には下記のコマンドを実行します。

```ruby:コンソール
rails g devise:i18n:views
```

<h3>モデルの作成</h3>

```ruby:コンソール
rails g devise モデル名（user など）
```

<h3>db作成</h3>
dbを作成して、マイグレーションを実行

```ruby:コンソール
$ rails db:create
$ rails db:migrate
```

マイグレーションを実行して、エラーが出ることなくテーブルの作成状況が表示されたら成功です。

<h2>コントローラーの作成</h2>
コントローラーを作成して、そ子にｉｎｄｅｘアクションを用意

```ruby:コンソール
$ rails g controller コントローラー名 index
```

ログインしていない状態でアプリなどにアクセスしたときに、ログイン画面にリダイレクトするように定義します。

```ruby:app/controller
  before_action :authenticate_user!, only: :index

  def index
  end

```
before_actionでindex メソッドが呼び出される前に「authenticate_user!」によってユーザー認証されているかどうかチェックするようにします。


<h2>deviseの機能設定</h2>
devise を利用するとユーザー管理に関する様々な機能を利用することができますが、
インストールしたままの状態だと下記の５つの機能だけを有効にするといった設定になっているはずです。

<table>
<tr>
<td>database_authenticatable</td>
<td>パスワード認証機能</td>
</tr>
<tr>
<td>registerable</td>
<td>ユーザー登録処理機能</td>
</tr>
<tr>
<td>recoverable</td>
<td>パスワードリセットの復元機能</td>
</tr>
<tr>
<td>rememberable</td>
<td>cookieを使用したユーザー記憶情報</td>
</tr>
<tr>
<td>validatable</td>
<td>バリデーション機能</td>
</tr>
</table>


```ruby:app/model/user.rb
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
end

```

デフォルトの状態で有効になっているdevise機能のコードの上、
コメントアウトされている部分に、オプションで設定できる機能について説明されています。

必要に応じて、追加することで使用することができます。

<table>
<tr>
<td>confirmable</td>
<td>登録時メールによる認証機能</td>
</tr>
<tr>
<td>trackable</td>
<td>サインイン回数などをトラックして記録する</td>
</tr>
<tr>
<td>lockable</td>
<td>一定回数認証失敗時のロック機能</td>
</tr>
<tr>
<td>timeoutable</td>
<td>一定時間アクセスのないアカウントのタイムアウト機能</td>
</tr>
<tr>
<td>omniauthable</td>
<td>OAuth認証などSNS連携による認証機能</td>
</tr>
</table>


<h2>参考サイト</h2>
https://github.com/heartcombo/devise