初見で難解だったdeviseを改めてまとめてみた


はじめに

 deviseとの出逢いは最悪でした。そもそもGemという概念すら曖昧で、MVCモデルの流れが少しわかるようになってきた段階でインストールした記憶がある。deviseでは、基本的にコントローラーを触らないので、初見ではなぜ勝手にアクションが実行されているのかが理解できなかった。なので、改めて「これだけ!」というものをまとめた次第。

deviseとは

 deviseはユーザー管理機能のに特化したGem。サインインやログアウトなどの設定が簡単になる。つまり、手動でルーティングの設定やコントローラー…をしなくて済む。ユーザー登録をしてサービスが受けられるアプリケーションなら、導入すると、開発が早くなるというメリットがある。

全体の流れ

  1. Gemfileに追加
  2. deviseをインストール
  3. モデルの作成
  4. テーブルの作成
  5. 新規登録とログインのためのリンク設定
  6. 新規登録のためのビューファイルの作成

今回は新規登録のみを扱う。

1. Gemfileに追加

Gemfile
gem 'devise'

・ファイルの最終行でOK

2. deviseをインストール

ここでは2つのことを行う。


カレントディレクトリが導入したいアプリケーションのディレクトリであることを確認の上、
ターミナルで、

bundle install

 これはGemfileに追記したら、必ず行う。
 必要に応じて、ローカルサーバーを再起動。(control + c→rails s)


同じくターミナルで、

rails g devise:install

 このコマンドが大切。忘れずに!
 このコマンドによって、deviseが使えるようになる。

3. モデルの作成

 今回はユーザー管理機能の実装を想定しているので、モデル名は「user」にする。
同じくターミナルで、

rails g devise user

<難解なポイント>
reilsを初めて勉強していると、モデルを作成するときのコマンドは

rails g model user

と学ぶ。違いを比べてみると、deviseの有無である。
この有無で結果は大きく異なる。

 下のdeviseがないコマンドだと、ただモデルを作成しているだけ。つまり、deviseを活用できていない。devise:modelとすることで、このコマンドだけで、同時にdeviseに関連するルーティングまでも同時に生成される。
 ルーティングを作成する手間が省かれているというわけだ。意外とこれが、学ぶ上で難しい点でもあり、deviseの良さでもある。
(作成されたmodelは「app/models」ディレクトリにある)

4. テーブルの作成

 必要に応じて、マイグレーションファイルにカラムを追加する。今回は割愛。ちなみに、deviseではデフォルトで、emailとpasswordカラムが入っている。これもまた、deviseの有能な点。
ターミナルで。

rails db:migrate

 ここでは、dviseがつかない。考え方としてはマイグレーションファイルは、deviseで作ったファイルだけではなく、他にも存在するから。

5. 新規登録とログインのためのリンク設定

 ビューにリンクをヘルパーメソッドのlink_toでパスを指定することを想定。
ターミナルで、

rails routes

とすると、ルーティングがズラッと並ぶ。(rails routesの見方は割愛)注目すべきは、
sign_up(新規登録)
sign_in(ログイン)
は別物であるということ。
新規登録=registration
ログイン=session
がpathに含まれるということ。

具体的にリンクをビューファイルに記述するなら、下記のようになる。

<%= link_to '新規登録', new_user_registration_path %>
<%= link_to 'ログイン', new_user_session_path %>

とにかく、pathの違いに注意。

6. 新規登録のためのビューファイルの作成

まずは、ビューファイルを生成するコマンドから。
またまた、ターミナルで、

rails g devise:views

 ここも困難なポイント。重要なことは3つ。

1つめは、
先ほどのモデル生成時と同様、「devise」をつけるということ。
deviseをつけることで生成されるビューファイルがdeviseの配下になる。
具体的には、
app/views/devise/registrations/new.html.erb
app/views/devise/sessions/new.html.erb

2つめは、
新規登録用のregistrationsディレクトリとログイン用のsessionsディレクトリに分かれているということ。つまり、新規登録画面のHTMLを編集するファイルとログイン画面のHTMLを編集ファイルが別ということ。

3つめは、
コマンドの最後の単語がviewsと複数形になるということ。2つめで取り上げたようにいくつものビューファイルが生成されるので、複数形と覚えればよい。
 
 ちなみに、デフォルトで新規登録のHTMLファイルもログインのHTMlファイルもコードが書かれている。必要に応じて編集する。(カラムを追加していた場合やデザインに凝る場合など)

ポイント

  • ターミナルでdeviseがつくのはモデルやビューファイルを生成するとき。
  • 新規登録とログインは別物。
  • ルーティングやコントローラーの記述をほぼしなくて済むので、開発が楽になる。

最後に

 長々と読みにくい文章になってしまった。慣れれば便利なGemに感じること間違いない!