20200924_アウトプット(devise基本)
deviseの基本
deviseとは
ユーザー登録管理機能を簡単に実装するためのgemです。
今回は「新規登録」「ログイン」機能の(本当に基本部分だけの)deviseを作成します。
前提として、
です。
おさらい(ライブラリとRubyGemsとGemって何?)
ライブラリとは、プログラミングにおける拡張機能です。複雑なプログラムが1つのセットになっていて、インストールすることで簡単に実装できるようになります。
RubyGemsとは、Rubyのライブラリを管理するシステムです。RubyのライブラリのほとんどはRubyGemsに集められています。
そして、Gemとは、RubyGemsに集まった、たくさんのGemの一つ一つを指します。今回のdeviseはその中の便利な一つの拡張機能なのです。
その1:Gemfileに記入しよう!
使用するには、Gemfileに記入しましょう。 (一番下に書き足す!)
その2:Gemfileの更新をしよう!(Gemfile.lock)
Gemfileに記入したあとは、バンドルインストールをします。
バンドルインストールとは、gemに追記した後に、実行すると、そのgemに必要な機能を依存関係を解決した状況で一気にインストールしてくれます。
また、どのようなバージョンでインストールしたかをGemfile.lockに記録してくれます。(素晴らしい!)
なお、追加したGemをアプリケーションに反映させるには、下記コマンド後に、サーバーを再起動する必要があります。
その3:このアプリケーションで使用できるようにdeviseインストールしよう!
実は、その2の処理だけではこのアプリケーションで使える状況になっていません。
以下を実行して、アプリケーション内に取り入れましょう。(コロン忘れずに!)
その4:モデルを作成しよう!
ここでdeviseならではの注意点です。
普段であれば、「rails g model user」と実行したいところですが、devise機能を自動生成するには、以下のようなコマンドを実行します。
以下のコマンドを実行することで、主に「モデル」「マイグレーションファイル」「ルーティング」が作られます。(ログイン機能なども生成されます)
その5:テーブルを作成しよう!
その4のおかげで、マイグレーションファイルが生成されます。
そして、その中身にはデフォルトで「Email」と「Password」のカラムをすでに記載してくれています!
今回はそのままカラム追加せず、マイグレートします。
上記を実行すると、カラムが追加されます。(シークエルプロを確認してみてください。)
ここでおさらい (テーブル・カラム・レコード・マイグレーションって何?)
テーブルとは、データベースにある1つのカタマリ(単位)です。
テーブルを作成するには、「カラム」といって、エクセルで言うと「見出し」を設定します。(今回で言うと、EmailとPasswordです。)
「カラム」を設定することで、カラムに対応したデータがそこに入っていきます。
(その1行のことをレコードといいます。)
「カラム」について書く場所が「マイグレーションファイル」です。
「カラム」の設定が終わったら「マイグレート」することで、シークエルプロ(パンケーキ)に見出しが設定されます。
その6:devise用のビューを作成しよう!
さて、indexというホーム画面があったとして、そこに「新規登録」「ログイン」というボタンがあった時、そこをクリックすると、「新規登録」には、Emailとpasswordを入れる欄があって‥と押した先にページが広がっていますよね。
deviseをインストールした時には、裏側でそのページを作ってくれるものの、もしその見た目をカスタマイズしたい場合には、自分でターミナルの実行をします。
上記を実行することで、views内に「devise」というディレクトリ(フォルダ)が現れます。その中に、今回でいうと「新規登録」「ログイン」にあたるファイルがありますので、それを編集すれば、見た目をカスタマイズできます!(今回はしません)
です。2つとも、ディレクトリ名は異なるものの、ファイル名は一緒なので、間違えないように気をつけましょう!
ここでおさらい (registrationsとsessionsの違いって何?)
結論からいうと、テーブルに保存されるかどうかです。
- 新規登録=registrations(レジストレーションズ)は、ユーザーテーブルに保存される(つまり、新規登録者としてレコードが追加されていく)
- ログイン=sessions(セッションズ)は、ユーザーテーブルに保存されない(元々ある情報にログインしているだけなので、レコード追加されない)
また、それぞれのルーティングは以下のような意味があります。
- registrations#new(ユーザー登録へのパス)
- registrations#create(ユーザー登録の処理=保存される)
- registrations#destroy(ユーザー登録の削除の処理=データベースから削除)
- sessions#new(ログインページへのパス)
- sessions#create(ログインの処理)
- sessions#destroy(ログアウトの処理)
その7:最後に、deviseならではのヘルパーメソッドを使ってみよう!
deviseならではのヘルパーメソッドとして、「user_signed_in?」があります。
(補足)今回は、モデル名が「user」なので、「use~」から始まっています。始め部分はモデル名にします。
これは、ログインしているかどうか判断してくれるメソッドです。
以下であれば、
- ログインしていたら「ログアウト」のリンクを表示
- ログインしていなかったら「新規登録」と「ログイン」のリンクが表示
されるように設定できます。
その他のポイントとしては、
- リンク先は「rails routes」で確認
- ログアウトの時は、「delete」メソッドを指定する。
です。
こんな形で表示されます!(完成)
まとめ
今回は、deviseについて理解しました。
上記で解説してきましたが、よりざっくりまとめると、
- gemの導入(Gemfileの記入、バンドルインストール)
- deviseの導入(rails g devise:install)
- モデルの作成(rails g devise user)
- テーブルの作成(rails db:migrate)
- ビューの作成(rails g devise:views)
- ヘルパーメソッドの使用(use_signed_in?)
について理解しました。
今まで、RailsのMVCとdeviseのMVCがこんがらがっていたので、頭の整理が出来てよかったです!(かなり、すっきり!)
ベースが理解できたので、これを元にカラムを追加したり、他のヘルパーメソッドをビューに取り入れてみたり、活用していきます。
理解が浅いところ(つみ残し)
- ヘルパーメソッド(フォーム)→解決!(deviseのことをちゃんと理解していなかったことが判明。)
- ハッシュ・シンボルの概念
- タグ・セレクタ・id
- ログアウトの時だけ、「httpメソッド」が「delete」されること。
感想
このdeviseがHTMLにおけるフォームと混ざり、railsのMVCと混ざり、よく理解できていなかったので、どこまでがRailsの役割で、どこからがdeviseなのか理解できてよかったです!
今日は筋トレした後に勉強しました。
いつもより集中できた気がします。