2
2

More than 3 years have passed since last update.

Ruby on Rails にdeviseを使ってログイン機能を導入する

Last updated at Posted at 2020-01-04

書きつくされているRuby on Railsにdeviseを導入する記事ですが、ひとそれぞれ目的が微妙に違うのか躓いてしまいます。

そこで僕の無知から来るミスも含めて共有し、同じ過ちを皆様に犯さないでいただけるのなら記事を書いたかいがあります。
また、よりよい方法があると思いますが、ご参考にしていただければと思います。

それではいきましょう!

環境

・macOS
・Ruby 2.7.0
・Ruby on Rails 6.0.2

もくじ

1.Railsのプロジェクトを作成する
2.簡単な画面遷移を作る
3.ログイン機能を実装する(ここでdeviseが登場)

1.Railsのプロジェクトを作成する

まずはアプリを開発するディレクトリを作成する。

$ mkdir app_name
$ cd app_name 

その後のプロジェクトの作成方法は以下を参照してください。
https://qiita.com/tom-ohiro/items/0030999b838bfe05006d

2.簡単な画面遷移を作る(トップページの作成)

この工程があったために勝手に混乱することに。
まずはユーザーコントローラを作って、トップページを作成。
以下のコマンドでusers_controller.rbなどのファイル、ディレクトリが作成される。

$ rails g controller users
app/controllers/users_controller.rb
    def index
    end

ルートを設定する。

config/routes.rb
get  '/'  => 'users#index'

表示ページを作成する。inde.html.erbは新規ファイルを自分で作成する。

app/view/users/index.html.erb
Hello world! とプログラマっぽく書く

以下を実行してサーバーを起動する。

$ rails s

http://localhost:3000/
にアクセスするとトップページが表示される。

3.deviseを用いてログイン機能を実装する

ここからが本番。
コマンドの順番を間違えると初学者には非常に厄介に感じられるので、よく注意して進んでください。

1.Gemfileに以下を記入

gem 'devise'

2.以下のコマンドをターミナルで実行
順番を間違えないようにゆっくりやりましょう。

$ bundle install

以下のような画面が表示される。
スクリーンショット 2020-01-04 22.18.20.png

僕は以下のコマンドを忘れていて非常に困った。。。皆様ご注意ください。

$ rails g devise:install

うまくいくとこんな感じの画面が表示される。
スクリーンショット 2020-01-04 22.21.13.png

こちらの設定は1,2だけ別途やっておけば大丈夫。
1.はメールを送るときの設定の話。以下の記述を追記してください。
まぁ書いてあるとおりにやるだけなんですが、英語で表示されているだけでうわってなってしまいますよね。
これからこんな画面の連続なので、頑張って読みに行くようにしてみましょう。
読んで見ればこんなこと解説するまでもねーじゃねえかって思うようなことなんです。
でも、はじめのとっつきにくさは半端ないので少しでもハードルが下がればと思い解説させていただきました。

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

2.はトップページの表示の話。
以下の記述は上の方で書いた内容と同じことなので、以下の内容を上書きしていただければ大丈夫です。

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

次に以下のコマンドをターミナルで実行します。
これでログイン画面や新規登録画面などを用意してくれます。

$ rails g devise:views

続いてUserモデルの作成です。
migrationファイルなどが作成されます。
初めての場合は特にmigrationファイルの編集なしで連続して以下のコマンドを入力しても大丈夫でしょう。
あとから保存内容を変えることもできますし、今のうちに編集していただいてももちろん大丈夫です。

$ rails g devise User
$ rake db:migrate

続いて以下の画面。
僕はここで非常に困ってしまいました。
すでにusers_controllersを作ってしまっているので、名前がかぶってしまうのではないか?
ということでコントローラを消すという作業をしてしまいました。
deviceでよく使うusers_controllerと混同してしまいますが、実行しても問題ありません。今後は先を見越して先にdeviceの導入からしたほうがいいでしょう。

$ rails g devise:controllers users

以下の記述はログインする前にページにアクセスしようとすると、ログイン画面に遷移させるというものです。

app/controllers/application_controller.rb
  before_action :authenticate_user!

これでdeviceの導入は完了です。
トップページにアクセスしようとするとログイン画面に遷移すると思います。

おわりに

deviceはとっても便利な機能である一方でわけわからなくても使えてしまうgemでもあります。
便利さと引き換えに使いこなしまでのレベルになるにはもう何段階かレベルアップする必要がありますが、まずは使える技を少しずつ増やして自信をつけることが大切だと思います。
共に頑張っていきましょう。
もし、この方法でうまくいかないとか、このやり方はおかしい。このやり方の方が適当ではないかと言う場合はコメントいただけると大変うれしく思います。
最後までお読みいただきありがとうございました。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2