3
0

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 1 year has passed since last update.

【Ruby】Rubyで.envを使う方法

Posted at

はじめに

今回はRailsで扱ったことがあった.envをRubyで使おうとしたときにわからず困ってしまった所があったので、扱うためにどのようなことをすれば良いのかを書いていきたいと思います。

.env(dotenv)とは?

dotenvは環境変数を.envファイルからロードしてくれるGemになります。ソースコード内にデータベースへの接続文字列を直接書いてしまったり、パスワードを直接書いてしまったりすると、他の人が見れるようになるのでマズいのです。例えていうなら、銀行のキャッシュカードの端のところに暗証番号忘れないように油性ペンで書かれているようなものです。見られてはマズい文字列を別のファイル(.envファイル)として扱えるようにしたのがこのGemです。

使い方

1. Gemfileに記述する

Gemfileに以下を追加してください。

gem 'dotenv'

2. bundle installする

bundle install

3. .envファイルを作成

次に自身のアプリケーションのルートディレクトリに.envというファイルを作成します。
私の場合はDockerのコンテナにバインドさせるディレクトリに以下のように配置しました。

.
├── .env
├── Gemfile
├── Gemfile.lock
├── config
│   └── database.yml
├── create_products_table.sql
└── scraper.rb

4. .envファイルに書き込む

=の左側に参照するときの名前、=の右側に参照したい値(パスワードなど)を書き込んでください。

MYSQL_DATABASE=database
MYSQL_USER=username
MYSQL_PASSWORD=mypassword

5-1. Rubyのプログラムから読み込む

環境変数として持っているだけでは意味がないですからね、ここで先ほど.envに記載した内容を取り出して利用するわけですね。

require 'dotenv/load'

puts ENV['MYSQL_DATABASE']

5-2. yamlで利用する

または、yamlファイルの中で利用したいケースもあるかもしれません。たとえば「database.yml」ですね。
その場合はあらかじめyamlファイルで代入したい場所はerbを利用して参照します。

development:
  <<: *default
  database: <%= ENV['MYSQL_DATABASE'] %>

そしてそれをRubyのファイル内で参照するには以下のようにします。

require 'yaml'
require 'dotenv/load'
require 'erb'

db_config = YAML.load(ERB.new(File.read('./config/database.yml')).result, aliases: true)

まとめ

今回はRubyで.envを使う方法を解説しましたが、Railsで使用するときと違って何でもやってくれるわけではない(全部自分で実装しないとならない)のでその辺が大変だと感じました。Railsで使ったことがあったので、同じように使えば良いだろうと安易に導入して苦労しました。

この記事が皆さんの一助となりましたら幸いです。

3
0
0

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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?