📬

【Rails】🔰 メールアドレスを環境変数で管理する方法

2024/10/14に公開

はじめに

こんにちは、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

ステップ 2: .envファイルを作成

プロジェクトのルートディレクトリに.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
https://github.com/bkeepers/dotenv

https://pikawaka.com/rails/dotenv-rails

Rails Action Mailer Guide

https://railsguides.jp/action_mailer_basics.html

https://railstutorial.jp/chapters/account_activation?version=7.0#sec-activating_the_account

Discussion