【Rails#8】dotenvとdeviseを使ってみた【Gemfile】

【Rails#8】dotenvとdeviseを使ってみた【Gemfile】

コジマです。

【Rails#7】勤怠管理システムを作ってみたい

こちらの続きです。
前回の記事でも書きましたが、Gemfileの使用も覚えたい。と。

【初心者歓迎!】Ruby on Railsもくもく会@新橋
本日はスタテクさん主催のもくもく会に参加し、その成果報告も兼ねています。

Gemfileは調べながら使ってみたいなと思ったものを追加しています。
フロントエンドのGemについてもそのうち追加したいなと思ってます。

#### add gemfiles
# for security
gem 'dotenv-rails', groups: [:development, :test]
# for debug
gem 'pry-rails', '~> 0.3.6'
# for search
gem 'ransack', '~> 1.8', '>= 1.8.8'
# for authenticate
gem 'devise', '~> 4.4', '>= 4.4.3'
# for pagenation
gem 'kaminari', '~> 1.1', '>= 1.1.1'
# for administration
gem 'activeadmin', '~> 1.3'

今回はdotenvdeviseをやっていきます。
githubのREADMEのリンクも貼っておきます。
(そうすると自分があとで復習しやすい)

dotenv

dotenvはその名の通り.envというファイルを作成して、中身を書くだけで環境変数を設定しておけるgemfileです。

https://github.com/bkeepers/dotenv/blob/master/README.md

私がやりたかったのはsecrets.ymlに記載されている秘密鍵を外出しにしたかったのである!
以前なにも知らずにgithubに上げて「これは上げたらアカンで。」とお叱りを受けました。。。

$ touch .env
$ vi .env

を実行し、以下を記入

DEV_KEY_BASE=hogehoge
TEST_KEY_BASE=hugahuga

もちろんsecrets.ymlも修正します。(人に見せて大丈夫な形になったし)

development:
  secret_key_base: <%= ENV["DEV_KEY_BASE"] %>

test:
  secret_key_base: <%= ENV["TEST_KEY_BASE"] %>

ここまでやっても.envをgithubに上げてしまっては元も子もないですね。
.gitignoreしていきます。

# Ignore SecretFile
/.env

こんな感じですね。めでたしめでたし。

devise

deviseはユーザー認証機能をサクッと作れちゃう頼もしいGemfile
今回作成する勤怠管理システムではログインしたら出勤、ログアウトしたら退勤という形でやっていきたいと思っているので
追加することにしました。

https://github.com/plataformatec/devise/blob/master/README.md

$ rails generate devise:install
Running via Spring preloader in process 14734
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml
===============================================================================

Some setup you must do manually if you haven't yet:

  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.

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root to: "home#index"

  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>

  4. You can copy Devise views (for customization) to your app by running:

       rails g devise:views

===============================================================================

なんかメッセージ出てますね。
簡単に書くと
1.デフォルトのURLオプションを設定してるか確認してね。
2.root_url設定してるか確認してね。
3.flashメッセージをapplication.html.erbに設定してるか確認してね。
4.Viewいじりたいならrails g devise:views 実行してね。
って感じですね。

私は先にrails generate devise Userの実行を先にしてしまいました。

$ rails generate devise User
Running via Spring preloader in process 15194
      invoke  active_record
      create    db/migrate/20180428071219_devise_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      insert    app/models/user.rb
       route  devise_for :users

そしたら順番にやって行きますね。

1.デフォルトのURLオプション

config/environments/development.rbに設定するようですね。
私は仮想OS上でアプリ開発しているので、localhost使うとおかしなことになります。
192.168.33.10というIPを振っているので、それに合わせます。

  # adding
  # for devise
  config.action_mailer.default_url_options = { host: '192.168.33.10', port: 3000 }

root_urlの設定

config/routes.rbを設定します。

Rails.application.routes.draw do
  devise_for :users

  root to: "home#top"

  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

deviseをgenerateしたときにできたと思われるやつがいますね。
home#topをroot_urlとしました。

3.flashメッセージ

これはほぼ言われていたことをやりました。

    <!-- for devise -->
    <p class="notice"><%= notice %></p>
    <p class="alert" style="color: red;"><%= alert %></p>

お気持ち程度ですが、エラーメッセージを赤くしましたw

4.viewをいじる

rails g devise:views
これを実行して、viewが作成されたことを確認しましたが、まだ中身をいじっていません。

$ rails g devise:views
Running via Spring preloader in process 16932
      invoke  Devise::Generators::SharedViewsGenerator
      create    app/views/devise/shared
      create    app/views/devise/shared/_links.html.erb
      invoke  form_for
      create    app/views/devise/confirmations
      create    app/views/devise/confirmations/new.html.erb
      create    app/views/devise/passwords
      create    app/views/devise/passwords/edit.html.erb
      create    app/views/devise/passwords/new.html.erb
      create    app/views/devise/registrations
      create    app/views/devise/registrations/edit.html.erb
      create    app/views/devise/registrations/new.html.erb
      create    app/views/devise/sessions
      create    app/views/devise/sessions/new.html.erb
      create    app/views/devise/unlocks
      create    app/views/devise/unlocks/new.html.erb
      invoke  erb
      create    app/views/devise/mailer
      create    app/views/devise/mailer/confirmation_instructions.html.erb
      create    app/views/devise/mailer/email_changed.html.erb
      create    app/views/devise/mailer/password_change.html.erb
      create    app/views/devise/mailer/reset_password_instructions.html.erb
      create    app/views/devise/mailer/unlock_instructions.html.erb

一応ここまで動作を確認できました。
メンテナンスしていきたいです。

deviseを導入する段階でちょっとつまずいてしまったことがあったので、
そこは別の記事で書いていきたいと思います。

今回の成果はここまで。

以上、コジマでした。


Ruby on Railsカテゴリの最新記事