Elixir

Elixirでもdotenv

More than 3 years have passed since last update.

dotenv、便利ですよね。

そんな便利な機能はどこにでも持ち運びたい!ということで、Elixirから使う方法をメモとして残しておこうと思います。

プロジェクト名は my_project としています。


mixでdotenvを追加する

mix.exsがこちら

defmodule MyProject.Mixfile do

use Mix.Project

def project do
[app: :my_project,
version: "0.0.1",
elixir: "~> 1.0",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
escript: [ main_module: Aws ],
deps: deps]
end

def application do
[applications: [:logger, :dotenv]] # ここ!!
end

# Specifies your project dependencies
#
# Type `mix help deps` for examples and options
defp deps do
[{:dotenv, "~> 1.0.0"}] # ここ!!
end
end

で、いつもの mix deps.getです!

`applicationsの中に放り込んでおけばimportしてくれますね!!


アプリケーションから .env を読み込む

lib/my_project.exです。

※ノイズになるかなーと思ってmix.exsからは色々消しましたが、プロジェクトはPhoenixのものなので、以下のファイルにはもしかしたら余計なコードが含まれているかもしれません。すみません!

defmodule MyProject do

use Application

# See http://elixir-lang.org/docs/stable/elixir/Application.html
# for more information on OTP Applications
def start(_type, _args) do
import Supervisor.Spec, warn: false

children = [
supervisor(MyProject.Endpoint, [])
]

# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: MyProject.Supervisor]

Dotenv.load # ここ!!

Supervisor.start_link(children, opts)
end

# Tell Phoenix to update the endpoint configuration
# whenever the application is updated.
def config_change(changed, _new, removed) do
MyProject.Endpoint.config_change(changed, removed)
:ok
end
end

start関数(アプリケーションのエントリポイント)の中で Dotenv.load しています。

パスを指定しなければ、カレントディレクトリ直下の .envファイルをロードし、定義された環境変数がexportされた状態になります。

これで System.get_env/0 System.get_env/1 からいつでも値が取り出せるようになるわけですね!

便利!!