Hatena::Grouperlang

檜山正幸のErlang未確認情報 RSSフィード

 | 

2009-01-17 (土)

helloをちゃんと作る (12) 環境変数=構成パラメータ

| 17:20

OS環境変数とは別に、アプリケーションごとに利用できるErlangレベルの環境変数がある。環境変数は別名・構成パラメータ(configuration parameters)と呼ばれる。説明の文言や関数変数名などでも、Env, Conf, Par などが混じって使われているので注意。以下では主に「構成パラメータ」を使う(OS環境変数と紛らわしいので)。

1つの構成パラメータは名前・値ペアで、{atom(), term()} の形。helloアプリケーションでは、デフォルトの挨拶相手を {whom, string()} という構成パラメータで指定する。一般には、構成パラメータをリストにして、いくつ指定してもよい。

構成パラメータの出所はいくつかあるが、基本は、アプリケーションコントローラ管理しているアプリケーション仕様のenv項目である。

{application, hello,
  % 以下に記述項目のリスト
  [
   %% ... 省略
   {env,          % 環境変数=構成パラメータ
     [{whom, "world"}]},
   %% ... 省略
  ]
}.

この構成パラメータ値は、application:get_env/{1, 2} で取れる。

 get_env(Par) -> {ok, Val} | undefined
 get_env(Application, Par) -> {ok, Val} | undefined

Parにパラメータ名アトムを入れると、ラップされた値が返る。

#> application:get_env(hello, whom).
{ok,"world"}
#>

特定アプリケーションに所属するモジュールプロセスから呼ぶときは第1引数は省略できる。自分がどのアプリケーションに所属するかは、application:get_application/1 で分かる。

 get_application(Pid | Module) -> {ok, Application} | undefined

application:get_env/1を使えば、hello_impl:hello/0 は次のようになる。

%% @doc デフォルトの相手に対してhelloと言う.
%% @spec () -> ok
hello() ->
  Whom = 
    case application:get_env(whom) of
      {ok, Val} -> 
        Val;
      _ ->
        "world"
    end,
  hello(Whom).

アプリケーションの動作を変えるには、ebinサブディレクトリにあるアプリケーションリソースファイルを書き換えればよい。

{application, hello,
  % 以下に記述項目のリスト
  [
   %% ... 省略
   {env,          % 環境変数=構成パラメータ
     [{whom, "universe"}]},
   %% ... 省略
  ]
}.

だが、アプリケーションリソースファイルの書き換えは便利ではないので、他の方法も用意されている。その話は次。

YasinYasin2012/02/09 04:00I was really confused, and this ansewred all my questions.

xwzliwxwzliw2012/02/09 22:07yIusIk <a href="http://nebrdzoytvby.com/">nebrdzoytvby</a>

jiqwbbdjiqwbbd2012/02/10 02:42c1SZR3 , [url=http://irzkzdxzanrf.com/]irzkzdxzanrf[/url], [link=http://abmxfrtvtshn.com/]abmxfrtvtshn[/link], http://crbtgcmkdrbt.com/

wvdslciwvdslci2012/02/10 04:05q8lSvf , [url=http://xxyhczqszsxi.com/]xxyhczqszsxi[/url], [link=http://piadszuzmedj.com/]piadszuzmedj[/link], http://fouwqfkmpjgv.com/

xjtzwxtfcnxjtzwxtfcn2012/02/10 07:00T4qB7J , [url=http://natfsecsnigp.com/]natfsecsnigp[/url], [link=http://qhfyzefntcms.com/]qhfyzefntcms[/link], http://netbopzeimlf.com/

luqvpmdluqvpmd2012/02/10 08:46btyauJ , [url=http://cllduaufqkkh.com/]cllduaufqkkh[/url], [link=http://cxlvnqjexnxl.com/]cxlvnqjexnxl[/link], http://vkzjnmmgwgyo.com/

jadeosnusjadeosnus2012/02/10 10:05T6lUoK , [url=http://hjgfbdqmxezk.com/]hjgfbdqmxezk[/url], [link=http://hdgzizuceygk.com/]hdgzizuceygk[/link], http://pnifsfvnqqjs.com/

mqtwymaslmqtwymasl2012/02/10 11:12b50w81 , [url=http://oaqslqioosyh.com/]oaqslqioosyh[/url], [link=http://nppsqmqvceee.com/]nppsqmqvceee[/link], http://jxehxrpfbdxk.com/

eflizfeflizf2012/02/11 20:55t4xBDn <a href="http://jekzuwqhksmt.com/">jekzuwqhksmt</a>

iycoarkzmliycoarkzml2012/02/13 04:22hgNGDV , [url=http://kdvqurhjtgxs.com/]kdvqurhjtgxs[/url], [link=http://rgzfwswoiktj.com/]rgzfwswoiktj[/link], http://kkwqepmwmhvx.com/

 |