figaro HerokuやDokkuの環境変数の管理に便利! 


HerokuやDokkuで使う環境変数を管理するGem「laserlemon/figaro」の紹介です。
モダンなWebアプリケーションの設計の指針ともいえる「Twelve-Factor App」を実現するのを手けっしてくれるすばらしいGemです。


😸 Twelve-Factor App

Twelve-Factor App」にあるとおり、次の設計指針のことです。
今回のFigaroは(3)の設定を環境変数に格納するためのものです。

(1) コードベース : バージョン管理されている1つのコードベースがあり、それにより複数の環境にデプロイできる
(2) 依存関係 : 依存関係を明示的に宣言し分離する
(3) 設定 : 設定を環境変数に格納する
(4) バックエンドサービス : バックエンドのサービスをアタッチされたリソースとして扱う
(5) ビルド、リリース、実行 : ビルド、リリース、実行の3つのステージをちゃんと分離する
(6) プロセス : アプリケーションを1つもしくは複数のステートレスなプロセスとして実行する
(7) ポートバインディング : ポートバインディングを通してサービスを公開する
(8) 並行性 : プロセスモデルによってスケールアウトする
(9) 廃棄容易性 : 高速な起動とグレースフルシャットダウンで堅牢性を最大化する
(10) 開発/本番一致 : 開発、ステージング、本番環境をできるだけ一致させた状態を保つ
(11) ログ : ログをイベントストリームとして扱う
(12) 管理プロセス : 管理タスクを1回限りのプロセスとして実行する

🚕 Gemのインストール

Gemfileに以下を追加して、bundle installを実行してください。
下記は用途に合わせてどちらかをお使いください。

# 公式のものを使う場合(Dokku非対応の公式のものを使う場合はこちら)
gem 'figaro'
# Dokku対応を行ったバージョンです(PR中なのでそのうち本体に取り込まれるかも)
gem 'figaro', github: 'morizyun/figaro'

🍄 設定方法

次の様に設定してください。

# config/application.yml
pusher_app_id: "2954"
pusher_key: "7381a978f7dd7f9a1117"
pusher_secret: "abdc3b896a0ffb85d373"
test:
pusher_app_id: "5112"
pusher_key: "ad69caf9a44dcac1fb28"
pusher_secret: "83ca7aa160fedaf3b350"

Railsアプリケーション側からは次のように扱います。

# config/initializers/pusher.rb
# 一般的には以下の様に使います
Pusher.app_id = ENV["pusher_app_id"]
Pusher.key = ENV["pusher_key"]
Pusher.secret = ENV["pusher_secret"]
# こんな風に Figaro.envで使うこともできます
Figaro.env.pusher_app_id # => "5112"
Figaro.env.pusher_app_id? # => true

🎃 Herokuへの設定

Heroku Toolbelt」をインストールして、Herokuのアプリケーションを作成し、
Railsアプリケーション側をデプロイする段階になったら、次のコマンドで環境変数に設定を登録します。

# 手動で個別登録
$ heroku config:set google_analytics_key=UA-35722661-5
# ファイルから一括登録
$ figaro heroku:set -e production
# 使い方の詳細はこちら
$ figaro help heroku:set

🐮 Dokkuへの設定

Dokkuの設定もほぼ同じです。dokku-cliをインストールして、Gitリポジトリを設定したら、Herokuとほぼ同じことを実行できます。

# dokku の git を登録
$ git remote add dokku dokku@example-dokku-server.com:example-app
# dokku-cli をインストール
$ gem install dokku-cli
# 手動で個別登録
$ dokku config:set google_analytics_key=UA-35722661-5
# ファイルから一括登録
$ figaro dokku:set -e production
# 使い方の詳細はこちら
$ figaro help dokku:set

🎳 おまけ

正直 Dokku で使おうと思ったら、すでに拡張してくれている人がいたのでうほーいと思ったら、
Travis CIのRSpecがコケて散々悩みながら、デバッグしてたら夜中の2時でしたww

Support dokku cli by morizyun · Pull Request #227 · laserlemon/figaro

Pull Request うまくいくといいなぁ

🚌 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)