5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

config gem と dotenv-rails gem を共存させるときの ポイント

Last updated at Posted at 2021-07-26

Rails での開発では、以下の2つのgemを使い分けたり、併用して設定情報を管理する方が多いかと思います。

  • config gem
    yaml 管理
  • dotenv-rails gem
    .env(及び環境変数) での管理

ですが、「設定情報を、 yaml に記載したのか、.env(及び環境変数)に記載したのか?」と分からなくなり手が止まる瞬間があります。
なので、最近は config gem を介して .env を参照するようにして、設定情報の参照先を一本化しています。
その中で、以下の 2 つのポイントのどちらかを押さえておかないとエラーになることを確認したので、共有します。

実行環境

  • Ruby 3.0.0
  • Rails 6.1.4

前提

読み込みの対象になる yaml と、.env ファイルは以下のものになります。

# config\settings.yml
comment: これはテスト用アプリ

# .envに記載した環境変数 SAMPLE_API_KEY の内容を読み込む
sample_api_key: <%= ENV.fetch('SAMPLE_API_KEY') %>
# .env
# config\settings.ymlから参照される 
SAMPLE_API_KEY=sample_api_key

注意するポイント

次に示す 2 つプランのうちどちらかを守らないと、以下のようなエラーになります。

# エラー内容
(erb):2:in `fetch': key not found: "SAMPLE_API_KEY" (KeyError)

プラン A:Gemfile で dotenv-rails gem を先に記述する

Gemfileにて、dotenv-rails gem を読み込んでから config gem を読み込むようにします。これだけでエラーを回避できます。

# NG
gem 'config'

gem 'dotenv-rails'

# OK

gem 'dotenv-rails'

gem 'config'

プラン B:yaml ファイルでロードメソッドの実行する

gemfile での、記述の順番に配慮しなくても yaml 内で、Dotenv::Railtie.load を実行することで、エラーを回避して読み込みできます。
プランAと比べて、明示的に .env が参照されていることがわかるという利点があります。

# <% Dotenv::Railtie.load %> を追加する
<% Dotenv::Railtie.load %>
comment: これはテスト用アプリ
sample_api_key: <%= ENV.fetch('SAMPLE_API_KEY') %>

それでは皆さん、安全で便利に設定情報を管理していきましょう。

5
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?