猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Scala Play の application.conf を環境変数から取得する - Herokuでの運用戦略

f:id:yoshiki_utakata:20201219091819p:plain

はじめに

この記事は、 Scala アドベントカレンダ 2020 の 19 日目の記事です

qiita.com

私は LGTMoon という LGTM 画像を生成するアプリを公開しています。

lgtmoon.dev

このアプリは Scala で書かれており、Heroku 上で運用しています。

Heroku は、 GitHub と連携し、「masterブランチがpushされたときに自動でデプロイ」することができます。

僕も今までこの仕組みを使っていました。しかし、秘匿情報についてはGitHub上で管理するわけには行きません。そのため、本番デプロイ用のプライベートリポジトリを用意して、そちらには秘匿情報も含めた情報を push していました。

しかし、ブランチの管理が煩雑になりますし、公開されているリポジトリに間違えて秘匿情報を push してしまうリスクもあります。

Heroku の環境変数を使う

そこで、 Heroku の環境変数を使います。これで変数の管理が楽になりますし、間違えて push することはなくなります。

環境変数が設定されていないときの、デフォルトの値も設定しておきます。これには、ローカル開発用の値を設定しておきます。これにより、ローカルで開発するときは、Play サーバーを立ち上げるだけで、特に設定なくても開発が開始できます。

application.conf の書き方

以下のように、まずデフォルト値を定義してから、 ${?環境変数} とすれば、環境変数があればその値がセットされ、環境変数が設定されていないときには、デフォルト値が使われます。

my.key = defaultvalue
my.key = ${?MY_KEY_ENV}

実際に私がどのように設定しているかは、GitHubを見てください。

https://github.com/yoshikyoto/lgtmoon/blob/master/conf/application.conf

application.conf についての詳細は以下の公式ドキュメントを見てください。

www.playframework.com

Heroku の設定

Heroku にログインして、 Settings を開き、

f:id:yoshiki_utakata:20201219094425p:plain

Config Vars の Reveal Config Vars をクリックして、環境変数を設定できます。

f:id:yoshiki_utakata:20201219094517p:plain

まとめ

この設定により、デプロイ用のリポジトリやブランチを分けることなく、本番では本番の設定が使われるし、ローカル開発中は開発中の設定が使われるようになり、便利です。

Heroku と Scala は結構相性がいいかなと思っています。

Scala はかなりパフォーマンスが出る言語のため、Heroku の無料インスタンスや、安いインスタンスでも動きます。Heroku はインスタンスをスケールしようとすると一気に値段があがるため、小さいインスタンスでサクサク動く Scala と相性いいなと思いました。

一方で、 Scala は言語仕様が難しく、公式ドキュメント以外の資料が少ないのが欠点かなと思います。

すごく簡単な内容の記事になってしまいましたが、Scalaがより良い言語になればいいなと思っています。