酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

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を実行してください。 下記は用途に合わせてどちらかをお使いください。

1
2
3
4
5
# 公式のものを使う場合(Dokku非対応の公式のものを使う場合はこちら)
gem 'figaro'

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

設定方法

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

1
2
3
4
5
6
7
8
9
10
# 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アプリ側からは次のように扱います。

1
2
3
4
5
6
7
8
9
10
# 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アプリ側をデプロイする段階になったら、以下のコマンドで環境変数に設定を登録します。

1
2
3
4
5
6
7
8
# 手動で個別登録
$ heroku config:set google_analytics_key=UA-35722661-5

# ファイルから一括登録
$ figaro heroku:set -e production

# 使い方の詳細はこちら
$ figaro help heroku:set

Dokkuへの設定

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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 うまくいくといいなぁ

Special Thanks

おすすめの書籍