LoginSignup
21
22

More than 5 years have passed since last update.

[翻訳] Mix Configの活用

Last updated at Posted at 2015-08-10

Cory Schmittさんの2015年7月31日のブログ記事Taking Advantage of Mix Configの翻訳です。
mixは言わずと知れたElixirのプロジェクト管理・依存性解決・ビルド…ツールです。最初にいじったときに「なんだかClojureのLeiningenに似ているなあ」と思ったんですが、その通りLeiningenを参考にして作られたツールで、Leiningenの設定ファイルproject.cljがClojureで書かれていると同じく設定ファイル(mix.exs)自体がElixirで書かれています。
これはmixを使うとこういうこともできるからYAMLは使わないでねという話です。


私はPaypal APIで何か購入できるElixirのライブラリを書いて実験してきました。ソースはここです。このライブラリで作業しているときに異なる環境(test, dev, production)に向けて設定するやり方が必要になりました。私はRubyから来た人なので、ついYAMLに手を出していつもの通りにやろうとしかけました。

その頃、ジェダイ・マスター、ジョゼはフォースの乱れを感じ、私が落ちようとしていた暗黒面への道についてツイートしたのです。
josetweet1.png

https://twitter.com/josevalim/status/626131275150065665 1
(訳:ElixirのプロジェクトでYAMLを使うのは止めてください。導入も使い方も不必要に複雑です。Elixirは既にconfigファイルを提供しています。)
よし、Elixirのconfigの中身がどうなってるか見てやろうじゃないの!

mixで新規にプロジェクトを作成すると、直下にconfigというフォルダとconfig.exsが作られます。このファイル自身よくできたドキュメントになっておりさらに詳しくはMix.Configを見れば調べられます!

コメント2をひと通り読んで各環境ごとに個別のconfigを設定できるように設定することを決めました。私は即座にimport_config "#{Mix.env}.exs"のコメントアウトを解除して、config/test.exs config/dev.exs config/prod.exsを作成しました3
Paypai APIを使いはじめるためにいくつか設定が必要でした。

# config/dev.exs
config :ppt,  #(訳註: configの後にはアプリ名を表すアトムが来ます)
user: "AeosmXJ1nZWwJgErHHhzxpOS0fH7Ki6qu4LVEotJA3al_bsZcnnYsvc1dDAi_71JYIdwkxeFHDu4sdEy"  
secret: "EDL8FGl7O6Xy-oIjdvcl4TRrx9EqKEkU_vKTi2qV3S95vfh1RB9gqiBJ6Uys-NuhSWCOn3FO84JFdpXy",  
currency: "USD"  

これらのキーはサンドボックスAPIにしかアクセスできませんのでごあんしんください。

さたいくつかの設定値をconfigの中の取り込めました。ではどうやってこれにアクセスすればいいのでしょうか。次のようにとても簡単にできます:Application.get_env(:ppt, :user)。このやり方でどtest、dev、prodその他どんな環境でプログラムが走っていても正しいキーを得られます。

ではこのconfigはこのライブラリが独自の環境のconfigを持つ他のmixアプリケーションにインポートされた時にはどう働くのでしょうか。

私はこのpaypalライブラリを他の練習課題プロジェクトであるphoenixフレームワークで動作するショッピングカートでインポートしました。

ショッピングカート環境のconfigファイルを使うとpaypalライブラリからインポートされたどのキーも上書きできました!すごくイケてるしすごく簡単!私の理解ではこれは以下のように動作したからだと思います。

プロジェクトの config.exs -> アプリのEnv.exs

もしこれらのファイル内でキーがセットされなければリスト上の次のものに移動するのです。私のケースではApplication.get_envが次のように返されたのでしょう。

  1. ショッピングカート環境のconfigファイル
  2. pptのconfigファイル

Elixirに組み込まれた設定の取り扱い方法はよく考えられており、あなたがElixirのライブラリやアプリケーションを作成するときの慣習になると思います!


  1. Tweet日付に注目…マジでジョゼの兄貴ジェダイ・マスターじゃね?と。 

  2. 生成されるconfig.exsにコメントがついてます。 

  3. 環境設定により#{Mix.env}がtest, dev, prodのどれかになります。 

21
22
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
21
22