はじめに
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に以下を記述します。
gem 'dotenv-rails'
以下のコマンドを実行し、gemをインストールします。
$ bundle install
.envファイルの作成と環境変数の設定
環境変数を設定したいアプリのルートディレクトリで.env
ファイルを作成します。
ルートディレクトリで下記コマンドを実行。
$ touch .env
作成した.env
ファイルに環境変数を記述します。
例えば、DBのユーザーネームとパスワードの場合は以下のように設定します。
DB_USERNAME = '********' # 使用したいユーザーネームを記述
DB_PASSWORD = '**************' # 使用したいパスワードを記述
環境変数の呼び出し
.env
ファイルに設定した環境変数を呼び出すには以下の様に記述します。
今回の場合はユーザーネームとパスワードを呼び出しています。
...
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
ファイルに以下を追加し、公開しないように設定します。
/.env
これで.env
ファイルはGitの管理対象から外れる為、安心してGitHubにコードを公開できるようになります。
.env.sampleの作成
各自それぞれが.env
に設定すべき項目が分かるように.env.sample
ファイルを作成します。(.env.sample
ファイルはGitの管理対象に入れておます。)
プロジェクトごとに設定項目は違ってくるかと思いますが、万が一流出してもOKなダミーデータや、設定項目のkeyだけを記述しておきます。
例えば、DBのユーザーネームとパスワードの場合は以下のように記述しておきます。
DB_USERNAME = 'mysqlのユーザーネームを記入’
DB_PASSWORD = '設定したパスワードを記入'
これで、GitHubからプロジェクトをクローンしてきたときは、この.env.sample
をコピーして.env
ファイルを作成すると設定が楽になります。
.envファイルをpushしてしまった場合
.env
ファイルをGitHubにpushした場合は.gitignore
に追加するだけでは設定が反映されず、Gitの管理対象から外れません。(.gitignoreに登録されていても、gitのキャッシュに残っていると管理対象になってしまうみたい。)
その場合は以下のコマンドを実行し、キャッシュの削除を行います。
$ git rm -r --cached .
これでGitの管理対象から外れます。
まとめ
プログラミング初学者が、Railsの共同開発で最初の環境開発の構築を担当した際に生じた、疑問点や学んだ点をまとめました。
内容的に間違いがあればぜひコメントいただけると嬉しいです。