あまブログ

ドキドキ......ドキドキ2択クイ〜〜〜〜〜〜〜ズ!!

【Rails/MySQL】dotenv-railsを使ってデータベースの認証情報を環境変数で管理する

RailsにMySQLを導入する際に、パスワードをdatabase.ymlに直接書くのはいかがなものかと思い、他の方法を調べた結果、dotenv-railsを使って認証情報を環境変数で管理できることがわかりました。

今回は作成済みのRailsアプリケーションにdotenv-railsを導入する手順を紹介します。

1. 開発環境

  • macOS Monterey:12.3.1
  • Ruby:3.1.0
  • Ruby on Rails:6.1.5
  • dotenv-rails:2.7.6
  • MySQL:8.0.28

2. dotenv-railsとは

  • 認証情報などを環境変数で管理するためのgem
  • 起動時にプロジェクトのルートディレクトリにある.envを読み込み、環境変数ENVに設定する
  • dotenv-rails公式レポジトリ

3. 手順

3-1. dotenv-railsのインストール

Gemfileに以下を追記します。

gem 'dotenv-rails'

dotenv-railsをインストールします。

$ bundle install

3-2. database.ymlの修正

database.ymlを以下のように修正します。

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV['DATABASE_DEFAULT_USER'] %>
  password: <%= ENV['DATABASE_DEFAULT_PASSWORD'] %>
  host: <%= ENV['DATABASE_DEFAULT_HOST'] %>
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: <%= ENV['DATABASE_DEV_NAME'] %>

test:
  <<: *default
  database: <%= ENV['DATABASE_TEST_NAME'] %>

<<: *defaultで一番上のdefaultの設定が呼び出されています。

こうやって書いたのと同じ

development:
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV['DATABASE_DEFAULT_USER'] %>
  password: <%= ENV['DATABASE_DEFAULT_PASSWORD'] %>
  host: <%= ENV['DATABASE_DEFAULT_HOST'] %>
  socket: /tmp/mysql.sock
  database: <%= ENV['DATABASE_DEV_NAME'] %>

3-3. .envの作成

アプリケーションのルートディレクトリ配下に、.envを作成します。

$ touch .env

.envに以下を追記します。

DATABASE_DEFAULT_USER = '<ユーザー名>'
DATABASE_DEFAULT_PASSWORD = '<パスワード>'
DATABASE_DEFAULT_HOST = '<ホスト名>'
DATABASE_DEV_NAME = '<開発用のデータベース名>'
DATABASE_TEST_NAME = '<テスト用のデータベース名>'

3-4. .gitignoreの編集

.envをGitの管理対象から除外するために、.gitignoreに以下を追記します。

# /.envの追加
/.env

以上でdotenv-railsの導入は完了です。


【参考】