【Rails】🔰 メールアドレスを環境変数で管理する方法
はじめに
こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。
本題
Railsアプリケーション開発において、セキュリティの観点から機密情報(メールアドレスやAPIキーなど)をソースコードに直接記述しないことが重要です。
この記事では、メールアドレスを環境変数で管理し、GitHubなどの公開リポジトリにハードコーディングされた情報を含めない方法について説明します。
ステップ 1: 環境変数を設定する
まず、環境変数を管理するために、dotenv-railsというgemを使用します。
このgemは環境変数を.env
ファイルに記述し、Railsアプリケーションでその値を使用できるようにします。
Gemfileにdotenv-railsを追加するため、以下をGemfileに追加します。
group :development, :test do
gem 'dotenv-rails'
end
その後、bundle installコマンドを実行します。
bundle install
.env
ファイルを作成
ステップ 2: プロジェクトのルートディレクトリに.env
ファイルを作成し、ここにメールアドレスを設定します。
# .env
EMAIL_FROM_ADDRESS=example@example.com
ステップ 3: メールアドレスを環境変数から読み込む
次に、メールの送信元アドレスをRailsのApplicationMailerで環境変数から読み込むように変更します。
class ApplicationMailer < ActionMailer::Base
default from: ENV['EMAIL_FROM_ADDRESS']
layout 'mailer'
end
このようにすることで、メール送信時に.env
ファイルから読み込まれたメールアドレスが使用されます。
ステップ 4: テストの修正
UserMailerTest
などのテストケースでも、環境変数を使ってメールアドレスを設定します。
テストファイルの修正例
require 'test_helper'
class UserMailerTest < ActionMailer::TestCase
test 'account_activation' do
user = users(:michael)
user.activation_token = User.new_token
mail = UserMailer.account_activation(user)
assert_equal 'Account activation', mail.subject
assert_equal [user.email], mail.to
assert_equal [ENV['EMAIL_FROM_ADDRESS']], mail.from # こちら
assert_match user.name, mail.body.encoded
assert_match user.activation_token, mail.body.encoded
assert_match CGI.escape(user.email), mail.body.encoded
end
end
ステップ 5: .gitignoreに.envを追加
.env
ファイルは絶対にGitにコミットしないように、.gitignore
に追加します。
.gitignore
の設定
# .envファイルをGitから除外
.env
本番環境での設定については、今回は割愛します。各ホスティングサービスに応じた設定方法については、それぞれのドキュメントをご参照ください。
まとめ
環境変数を使うことで、メールアドレスやその他の機密情報を安全に管理し、ソースコードに直接書き込むことを避けることができます。
.env
ファイルを使ったこの方法は開発中は便利ですが、必ず.gitignore
に追加して公開リポジトリには含まれないようにしましょう。
この手法を使うことで、セキュリティリスクを最小限に抑えつつ効率的にメール設定を管理できます。
参考文献
dotenv gem
Rails Action Mailer Guide
Discussion