Railsのマルチ環境設定を徹底解説!初心者でもわかるcredentials・dotenv・ENVの安全な使い分け
生徒
「Railsでアプリを作ったとき、開発用とか本番用で設定が違うって聞いたんですが、どうやって管理するんですか?」
先生
「そうですね。Railsにはマルチ環境設定という仕組みがあって、開発環境・テスト環境・本番環境ごとに違う設定を切り替えることができます。」
生徒
「でも、環境変数とかcredentialsとかdotenvとか…いろいろあって混乱します。」
先生
「大丈夫です!今日は、初心者でも理解できるように、credentials:edit・dotenv・ENVの違いと安全な使い分けをわかりやすく説明していきましょう。」
1. Railsのマルチ環境設定とは?
Railsでは、同じアプリでも開発環境(development)、テスト環境(test)、本番環境(production)といった複数の環境を用意して切り替えられます。これは「同じ家だけど、部屋ごとに鍵が違う」ようなイメージで、環境ごとに設定ファイルを分けておくことで、安全性と効率が上がります。
たとえば、開発環境ではエラー画面を詳しく表示したり、ログをたくさん出したりして、プログラミング初心者でも原因を追いやすい設定にします。一方、本番環境では、ユーザーにエラー内容を見せないようにしたり、余計なログを減らしたりして、セキュリティやパフォーマンスを優先した設定にします。テスト環境では、テスト専用のデータベースやメール送信のダミー設定を使うことが多いです。
Railsでは、これらの環境は通常、config/environments/development.rb、test.rb、production.rb のように別々のファイルで管理されています。そして、アプリのコードからは次のように、今どの環境で動いているかを簡単に確認できます。
# 現在のRails環境を判定するシンプルな例
if Rails.env.development?
puts "今は開発環境です(自分のPCで動かす想定)"
elsif Rails.env.test?
puts "今はテスト環境です(自動テスト用)"
elsif Rails.env.production?
puts "今は本番環境です(実際のユーザーが使う環境)"
end
このように、Railsのマルチ環境設定では「どの環境で実行しているか」を意識しながら、環境ごとに設定や挙動を変えていきます。特に本番環境では、APIキーやパスワードなどの秘密情報をどう扱うかがとても重要になります。そこで登場するのが、環境変数や credentials、dotenv といった仕組みです。次の章から、それぞれの使い方や違いを丁寧に見ていきましょう。
2. credentials:edit とは?
credentials:editは、Railsに標準で用意されている秘密情報の管理機能です。APIキーやパスワード、外部サービスのトークンなど、人に見られたくない情報を1つのファイルにまとめて暗号化して保存できます。Railsアプリの設定の中でも、特に大事な「鍵」をしまっておく専用の金庫だと思ってください。
# ターミナルで実行(アプリのディレクトリで)
bin/rails credentials:edit
このコマンドを実行するとYAML形式の編集画面が開き、例えば次のように書けます。
aws:
access_key_id: 12345
secret_access_key: 67890
gmail:
username: example@gmail.com
password: your-mail-password
ここでは「aws」や「gmail」といったグループごとに情報を整理しています。プログラミング未経験の方は、「ノートの中で、見出しをつけてメモをまとめている」イメージを持つと分かりやすいです。
アプリ内で使うときは、次のように呼び出します。
# AWSのアクセスキーを取り出す例
Rails.application.credentials.dig(:aws, :access_key_id)
# Gmail のパスワードを取り出す例
Rails.application.credentials.dig(:gmail, :password)
コード上では具体的な値(パスワードやAPIキー)を書かずに、「credentialsのここから取ってきてね」と指示するだけで済みます。これにより、ソースコードを他の人と共有しても、肝心の秘密情報は暗号化されたファイルの中に隠れたままになります。
また、config/credentials.yml.encというファイルは暗号化されているため、そのままGitリポジトリに含めても中身は読めません。一方で、復号に使うconfig/master.keyは、原則としてGitにコミットせず、.gitignoreに追加しておくのが安全な運用です。金庫(credentials.yml.enc)は共有しても、鍵(master.key)は限られた人だけが持つ、というイメージです。
このように、credentials:editを使うことで、Railsアプリの本番環境やマルチ環境で扱う重要な設定を、安全かつ整理された形で管理できます。まずは1つだけでも、自分のアプリで使っているAPIキーやメール設定をcredentialsに移してみると、仕組みのイメージがつかみやすくなります。
3. dotenv とは?
dotenvは、開発環境でよく使われる便利なGemで、.envというファイルに環境変数をまとめて管理できます。「自分の机の引き出しに必要なメモをしまっておく」ような感覚で、アプリの設定を手軽に整理できるのが特徴です。Railsに限らず、さまざまな言語で使われている定番ツールでもあります。
# .env ファイルに書く内容(例)
DATABASE_USER=admin
DATABASE_PASSWORD=secret_pw
APP_DEBUG=true
この.envファイルに書いた内容は、Railsアプリでは次のようにENVを使って取り出せます。プログラミング未経験の方には、「.env に書いたメモを、アプリが読み取ってくれる仕組み」と考えると理解しやすいです。
# .env に書いたユーザー名を読み込む
puts ENV["DATABASE_USER"] # => "admin"
dotenvの良いところは、「設定を直接コードに書かなくて済む」という点です。もしパスワードをソースコードに書いてしまうと、他の人に見られる可能性があり危険です。しかしdotenvを使えば、秘密の情報は.envの中にまとめて隠しておけます。
ただし、注意しなければならないこともあります。.envは暗号化されていない普通のテキストファイルなので、そのままGitにコミットすると、チーム全員にパスワードが丸見えになります。必ず.gitignoreに追加して、誤って公開してしまわないようにしましょう。また、本番環境に.envを置くのは非常に危険なので、開発環境やテスト環境だけで使うのが基本です。
まずは練習として、ローカル環境で自分のアプリに.envを用意し、簡単な値を保存して読み込んでみると仕組みが理解しやすくなります。「設定をコードと分けて管理する感覚」を身につける第一歩になるでしょう。
4. ENV とは?
ENVは、RubyやRailsに備わっている環境変数を読み込む仕組みです。サーバーに直接設定した変数を呼び出すことができます。
ENV["SECRET_KEY_BASE"]
これは「部屋の外に貼った掲示板から情報を読む」ようなイメージです。本番環境のサーバーでは、環境変数を設定してENVで読み込むのが一般的です。
5. 安全な使い分け方
では実際に、credentials:edit・dotenv・ENVをどう使い分ければよいのでしょうか?初心者向けにわかりやすく整理すると、次のようになります。
- credentials:edit → 本番環境で使う大事な秘密情報(APIキー・パスワードなど)
- dotenv → 開発環境やテスト環境での簡単な設定(ローカル専用)
- ENV → サーバーに設定した変数を呼び出すとき(本番環境向け)
具体的なイメージとしては、「金庫にしまう(credentials)」「机の引き出しにしまう(dotenv)」「掲示板を見る(ENV)」という3つの管理方法を場面ごとに使い分ける感じです。
6. 実際のプロジェクトでの運用例
たとえば、RailsアプリでAWSのキーを使う場合を考えてみましょう。
- 開発環境:dotenvで
.envに書いて試す - テスト環境:dotenvかダミーのcredentialsを利用
- 本番環境:credentialsに保存し、必要に応じてENVからも呼び出す
このように環境ごとに整理しておくと、安全で効率的なRails開発が可能になります。
まとめ
ここまでRailsのマルチ環境設定や、credentials:edit、dotenv、ENVといった仕組みの特徴と使い分けについて学んできました。Railsは開発環境・テスト環境・本番環境をきちんと分けて設定管理ができるフレームワークであり、その機能を正しく使いこなすことで安全性と作業効率の両方が大きく向上します。特に近年のWeb開発では、APIキーやパスワードなどの重要情報をどう管理するかがアプリケーションの品質に直結するため、初心者のうちから適切な管理方法を身につけておくことは非常に価値があります。
Railsのcredentialsは強固な暗号化によって秘密情報を守ってくれる「金庫」のような存在です。一方で、dotenvは日常作業の中で素早く環境変数を扱いたいときに便利な「机の引き出し」のような道具です。そしてENVは本番サーバーで確実に情報を読み取るための「掲示板」のような役割を果たします。この3つの性質を理解し、状況に応じて適切に使い分けることで、安全なRailsアプリケーションの土台が完成します。
なお、どの方法を使う場合でも共通する重要なポイントは、「誤って公開してはいけない情報をGitリポジトリに含めないこと」です。特にdotenvの.envファイルは誤コミットによる情報漏えいが非常に多い失敗例として知られているため、必ず.gitignoreに登録しておきましょう。初心者の方でも、この一点を意識するだけでリスクは大幅に減ります。
よく使う実践的サンプル
まとめとして、実務でよく使われる簡単なコード例を紹介します。ここでは、APIキーを環境によって安全に切り替えるシンプルなパターンを示します。
# config/initializers/api_client.rb
api_key =
if Rails.env.production?
Rails.application.credentials.dig(:api, :key) # 本番はcredentials
else
ENV["API_KEY"] || "dummy-key" # 開発はdotenvまたはENV
end
API_CLIENT = ApiClient.new(api_key)
このように書くことで、本番環境では安全なcredentialsからAPIキーを取得し、開発環境ではdotenvの.envや直接設定した環境変数から読み込む、といった柔軟な構成が自然に実現できます。RubyやRailsの初心者でも、このサンプルを参考にすると環境ごとの設定切り替えの流れがつかみやすくなるはずです。
さらに、Railsでは環境変数を扱う機会がとても多く、データベース接続やAPI連携、外部サービスとの通信などさまざまな場面で必要になります。設定の置き場所をきちんと整理しておくことで、アプリ全体の見通しがよくなり、将来のメンテナンス性も高まります。特にチーム開発では、credentialsやdotenvを適切に使い分けて環境変数を共有する仕組みを整えておくことで、メンバー間での環境依存トラブルを減らせます。
最後に強調したいのは、「環境設定は一度覚えるとずっと役に立つ」ということです。Railsだけでなく他の言語やフレームワークでも、秘密情報の管理や環境変数の扱い方は非常に重要なスキルです。今回学んだ3種類の管理方法を身につければ、今後API連携や外部サービス接続を行う際にも必ず役立つでしょう。同時に、アプリケーションの安全性も格段に高まります。
生徒
「環境が違うだけで設定方法も変わるんですね。でも、なんとなく整理できた気がします!」
先生
「その調子です。たとえば本番ではcredentialsでしっかり管理して、開発ではdotenvを気軽に使うといったように、目的に応じて切り替えることが大切ですよ。」
生徒
「ENVは基本的にどこでも使えるっていうのも便利ですね。本番サーバーなら環境変数として設定しておけば、プログラム側はENVで読むだけですもんね。」
先生
「そうです。環境に合わせた管理方法を身につけておくと、アプリの安全性がぐっと高まります。今後AWSや外部APIを使うときにも同じ考え方が役立つので、しっかり身につけていきましょう。」