RubyMotion でリポジトリに含めたくない設定を外部ファイルに抜き出す

Web API の consumer_key と consumer_secret のような、 人に知られたくないキーは Git リポジトリに含めたくない。 そこでキーを git リポジトリ管理外の設定ファイルに抜き出すことにした。

設定ファイルを読み込んで RubyMotion でいい感じに扱うための gem で RubyMotion Wrappers に載っているのは、motion-config-vars ていうやつ。

motion-cofnig-vars

resources/app.yml に

API_ENV:
  development:
    cosumer_key: "hogehoge"
    consumer_secret: "fugafuga"
  test:
    cosumer_key: "hogehoge"
    consumer_secret: "fugafuga"
  production:
    cosumer_key: "hogehoge"
    consumer_secret: "fugafuga"

って書いて、

bundle exec rake API_ENV=development

で実行すれば、development 以下の設定を ENV にセットしてくれる。 ただ、API_ENV を毎回指定するのが面倒。おしい。

RubyMotion Wrappers には載ってない gem

motion-mode 作者でもある ainame 氏が作った motio-my_env がある。 Watson 氏が作った motion-env-vars もある。

自分は motion-my_env を使ってる。 motion-env-vars は最近知ったのでまだ試していない。 README 読んだ感じだと、使い方同じっぽい。

motion-my_env

config/environment.yaml に設定を書いて

hatena:
  consumer_key: "hogehoge"
  consumer_secret: "fugafuga"

Rakefile 内で yaml ファイルのパスを指定する。

Motion::Project::App.setup do |app|
  # ...

  app.my_env.file = "./config/environment.yaml"

  # ...
end

するとアプリ内で

MY_ENV["hatena"]["consumer_key"] # => hogehoge

という風にアクセスできる。 YAML をパースした結果が MY_ENV 定数に格納されるようだ。