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の導入は完了です。
【参考】