手元のプロジェクトで環境変数をファイルから読み込む必要が出てきて、dotenvが欲しくなったのですが、ただそれだけのために依存関係増やすのもなぁ…と思ったので、自分で書いてみることにしました。
コード
envloader.rb
class Envloader class << self def load(filepath = File.expand_path('../.env', __FILE__)) File.open(filepath) do |f| f.each_line do |line| if line =~ /\=/ key, value = line.split('=').map(&:strip) value = value.match(/[\'\"]?([^\'\"]+)[\'\"]?/)[0] # 引用符を削除 ENV[key] = value end end end end end end
長さは15行です。(短い!)
使い方
1. .envファイルを作る
設定したい環境変数を含んだ.envファイルをenvloaderと同じディレクトリに置きます
.env
USERNAME=username PASSWORD="secret" # 引用符も使える
2.使いたいスクリプト中で読み込む
main.rb
require './envloader' Envloader.load ENV['USERNAME'] #=> "username"
実装の方針
やりたかったのは以下の内容でした。
- .envにgitで追跡したくない情報を入れておいてスクリプト中で読み込みたい
- .envの書き方は
hoge=huga
もしくは、右辺を''
か""
でくくったやつだけで、一つにつき一行使う - 読み込んだ環境変数はENVに入るようにする
これに加えて、.envファイルのパスを指定できる機能もついてますが、流れで入れただけなので恐らくそこまで使わないかと思います…。
追加実装するなら、プロジェクトルートの自動認識とかでしょうか。
ここ最近は、こんな感じの細々したスクリプトを書いて楽しく過ごしています(笑