みなさんさようなら.
Railsでプロジェクトをいくつか作っていくうちに,だんだん設定ファイルの管理の仕方もなれてきて,一番便利そうなところに落ち着きました.
それが,
rails_config + figaro
の組み合わせです.
rails_config
概要をまず説明しますが,rails_configはconfig/settings.ymlに記述されている内容を,環境ごとに分けて管理したいときに便利です.
https://github.com/railsjedi/rails_config
例えば,普段ローカルで開発している限りは
host: localhost:3000
としておきたいけど,いざ本番production環境では
host: www.test.com
みたいにしたいときに便利です.
こういう分け方をするGemとしては,rails_config以外だとsettingslogicが有名ですね.
https://github.com/binarylogic/settingslogic
ただ,rails_configの方が,config/settings/に環境ごとのymlファイルが作成できるし,git管理したくないときなどには,config/settings/development.local.ymlとすることで,config/settings/development.ymlの内容を上書きして,設定項目として読み込んでくれます.
こっちの方が俺は好みでした.
figaro
次に,figaroですが,こちらは環境変数の設定をすることができます.
いわゆる,普段~/.bashrcや~/.bash_profile,~/.zshrcなんかに記述する環境変数を設定できます.
これが何の役に立つかというと,config/database.ymlの設定に使います.
rails_configは環境ごとに設定項目を設定できると言いましたが,database.ymlに記述される内容も,ほとんどの場合は環境ごとに違います.
そして,データベースの接続情報,特にパスワードなどはgit管理したくないですよね.
とすれば,先ほどのrails_configで,〜local.yml内に記述すればいいのでは?
と思うところですが,違います.
settings.yml並びにその他rails_config,settingslogicで使用するyml設定ファイルは,Railsアプリケーションのinitializeの途中で読み込まれ,設定項目が反映される仕組みになっています.
しかし,database.ymlはそれより早いタイミングで読み込まれています.
そのため,一般的には~/.bashrcなどの環境変数として設定し,database.ymlには,
development: adapter: mysql2 encoding: utf8 database: <%= ENV['HOGE_DEVELOPMENT'] %> username: <%= ENV['HOGE_NAME'] %> password: <%= ENV['HOGE_PASS'] %> port: <%= ENV['HOGE_PORT'] %> socket: <%= ENV['HOGE_SOCK'] %> ....
のように記述します.
つまり~/.bashrcにはこれらの変数,HOGE_DEVELOPMENTやHOGE_NAMEなどを環境変数として設定しておく必要があります.もちろん本番環境も同じですね.
となると,多くのプロジェクトを同時に開発しているときには,~/.bashrcが大変な長さになってしまいます.
それをプロジェクト内で管理したいがために,figaroというGemを使います.
https://github.com/laserlemon/figaro
figaroは,環境変数を設定することができます.
config/application.ymlを生成し,Railsアプリケーション起動時に,そこに設定された項目が環境変数として反映されます.
config/application.ymlはgit管理外となるため,このファイルに
HOGE_DEVELOPMENT: hoge_databasename HOGE_NAME: hoge HOGE_PASS: hogehogehoge HOGE_PORT: 3306
と書いておけば,先ほどのdatabase.ymlで読み込んでくれます.
application.yml.sampleなどのように,サンプルを作成しておいてgit管理に含めておくと,複数人で開発するときにはわかりやすくて便利です.
あ,インストール方法などはgithubのreadmeを参照してください.
どれもGemとして配布されているのでわかりやすいですよ.