はじめに
はじめまして!
プログラミング初心者のかずきです。
現在、プログラミングスクールRUNTEQに通っています。
記事を書くことで、自分自身の理解を深め、学習の軌跡を残すために始めました。
まだまだ初学者ですので、内容に間違いがあることもあるかと思います。その際はぜひ、コメントなどでご指摘いただけますと幸いです!
deviseとは?
deviseとは、認証機能をより簡単に実装することができるRuby on Rails専用のgem(ツール)です。
認証機能とは、インターネットの上のシステムにアクセスする際のユーザー本人であることを確認する仕組みです。
今回はGitHubのdeviseを参考にしてDocker環境でdeviseを導入していきます。
前提条件
Ruby on Rails 7.2.3
Ruby 3.4.8
Docker環境
導入方法
gem deviseインストール
deviseをインストールするコマンドを実行
実行場所:ターミナル
docker compose exec web bundle add devise
*以降、ローカル開発の方は"docker compose exec web"を消してください
これによりdeviseがインストールされ、GemfileとGemfile.lockにdeviseの内容が自動で記述されます。
設定ファイル生成
deviseの設定ファイルを生成するコマンドを実行
実行場所:ターミナル
docker compose exec web rails generate devise:install
これにより以下のファイルが生成されます
- config/initializers/devise.rb
- config/locales/devise.en.yml
mailerのデフォルト設定
mailerのデフォルトURLを設定します
実行場所:config/environments/development.rb(すでに記載されているかもしれません)
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
何をしているのでしょうか?
簡単に言うと、
「Railsがメールを送る際に『*ドメイン』と『**ポート』はこれで送ってね」の設定を記述しています
*ドメイン:URLの住所です。Qiitaを例に挙げると「https://qiita.com/」の太文字部分です。hostがドメインになっています。
**ポート:URLの住所の中の部屋番号です。Railsの環境開発では3000がデフォルトになっています。
deviseはログイン・ログアウトの他にパスワードを忘れた時のリセット機能もセットになっています。
パスワードを忘れた場合を想像してください。
"忘れた場合はこちら"のリンクを踏んで自分のメールアドレスを入力してメールを送信しますよね?
これによりアプリ側から自分のメールアドレス宛に送付されます。
メール内容には「このURLを使ってWebアプリに入ってパスワードをリセットしてね」というメールが送られてきます。
その際に同じwebアプリに帰ってくるためのドメインとポートを上記設定で指定しているということです。
上記を設定したら、サーバーを再起動してください。
docker compose restart
モデル周りの生成
モデル周りを作成します。今回はUsersテーブルを作成します。
実行場所:ターミナル
docker compose exec web rails generate devise user
これにより以下のファイルが自動生成されます
- db/migrate/20xxxxxxxxxxxx_devise_create_users.rb
- app/models/user.rb
- test/models/user_test.rb
- test/fixtures/users.yml
また、以下のルーティングが自動記述されます。
devise_for :users
マイグレーションファイル実行
マイグレーションファイルに書かれた命令を実行します。
実行場所:ターミナル
docker compose exec web rails db:migrate
これによりデータベースの中に実際のテーブルを作成します。
もし表示されなかったら、もう一度サーバーを再起動してみてください。
終わりに
言語化って難しいです。相手にどう伝わるかはコミュニケーションをとる上で大切なことなので少し鍛えられました。
また、一度devise機能実装を行ったのちに忘れないようにと本記事を執筆しましたが、実際にここなんでだろう?と疑問が出てきて良い勉強になりました。
今後も続けていければと思いますのでよろしくお願いいたします。
