【Rails共同開発】GitHubに公開したくないパスワード等を『dotenv-rails』を使った環境変数で管理する方法


はじめに

Railsの共同開発で環境開発を構築する際、DBのパスワードなどの設定は各自それぞれの開発環境ごとに異なります。個人の設定をdatabase.ymlなどに直接入力すると、特定の環境でしか動かなってしまいます。また、パスワードなどの情報はGitHubにあまり公開したくありません。

そこで、開発環境ごとに異なるパスワード等の情報は環境変数として管理できるgem(dotenv-rails)を導入する事で、各自それぞれの開発環境に対応し、GitHubには公開しないように設定します。

環境

  • macOS Big Sur
  • Rails 6.1.1
  • Ruby 2.7.2
  • mysql 5.7.31

dotenv-rails gemをインストール

Gemfileに以下を記述します。

Gemfile
gem 'dotenv-rails'

以下のコマンドを実行し、gemをインストールします。

$ bundle install

.envファイルの作成と環境変数の設定

環境変数を設定したいアプリのルートディレクトリで.envファイルを作成します。
ルートディレクトリで下記コマンドを実行。

$ touch .env

作成した.envファイルに環境変数を記述します。
例えば、DBのユーザーネームとパスワードの場合は以下のように設定します。

.env
DB_USERNAME = '********' # 使用したいユーザーネームを記述
DB_PASSWORD = '**************' # 使用したいパスワードを記述

環境変数の呼び出し

.envファイルに設定した環境変数を呼び出すには以下の様に記述します。
今回の場合はユーザーネームとパスワードを呼び出しています。

database.yml
...

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV['DB_USERNAME'] %> # 環境変数で呼び出し
  password: <%= ENV['DB_PASSWORD'] %> # 環境変数で呼び出し
  socket: /tmp/mysql.sock

...

これで開発環境ごとに異なるパスワード等の設定値は、各自それぞれが.envに記述することで使えるようになります。

.gitignoreの設定

このままpushすると.envファイルがGitHubに公開されてしまうので、.gitignoreファイルに以下を追加し、公開しないように設定します。

.gitignore
/.env

これで.envファイルはGitの管理対象から外れる為、安心してGitHubにコードを公開できるようになります。

.env.sampleの作成

各自それぞれが.envに設定すべき項目が分かるように.env.sampleファイルを作成します。(.env.sampleファイルはGitの管理対象に入れておます。)
プロジェクトごとに設定項目は違ってくるかと思いますが、万が一流出してもOKなダミーデータや、設定項目のkeyだけを記述しておきます。
例えば、DBのユーザーネームとパスワードの場合は以下のように記述しておきます。

.env.sample
DB_USERNAME = 'mysqlのユーザーネームを記入’
DB_PASSWORD = '設定したパスワードを記入'

これで、GitHubからプロジェクトをクローンしてきたときは、この.env.sampleをコピーして.envファイルを作成すると設定が楽になります。

.envファイルをpushしてしまった場合

.envファイルをGitHubにpushした場合は.gitignoreに追加するだけでは設定が反映されず、Gitの管理対象から外れません。(.gitignoreに登録されていても、gitのキャッシュに残っていると管理対象になってしまうみたい。)
その場合は以下のコマンドを実行し、キャッシュの削除を行います。

$ git rm -r --cached .

これでGitの管理対象から外れます。

まとめ

プログラミング初学者が、Railsの共同開発で最初の環境開発の構築を担当した際に生じた、疑問点や学んだ点をまとめました。

内容的に間違いがあればぜひコメントいただけると嬉しいです。