焼売飯店

GoとかTS、JSとか

Rubyでdotenv的なやつを小さなスクリプトで実装してみる

手元のプロジェクトで環境変数をファイルから読み込む必要が出てきて、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"

実装の方針

やりたかったのは以下の内容でした。

  1. .envにgitで追跡したくない情報を入れておいてスクリプト中で読み込みたい
  2. .envの書き方は hoge=huga もしくは、右辺を ''"" でくくったやつだけで、一つにつき一行使う
  3. 読み込んだ環境変数はENVに入るようにする

これに加えて、.envファイルのパスを指定できる機能もついてますが、流れで入れただけなので恐らくそこまで使わないかと思います…。

追加実装するなら、プロジェクトルートの自動認識とかでしょうか。

ここ最近は、こんな感じの細々したスクリプトを書いて楽しく過ごしています(笑