はじめに
この記事は、 Scala アドベントカレンダ 2020 の 19 日目の記事です
私は LGTMoon という LGTM 画像を生成するアプリを公開しています。
このアプリは 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 についての詳細は以下の公式ドキュメントを見てください。
Heroku の設定
Heroku にログインして、 Settings を開き、
Config Vars の Reveal Config Vars をクリックして、環境変数を設定できます。
まとめ
この設定により、デプロイ用のリポジトリやブランチを分けることなく、本番では本番の設定が使われるし、ローカル開発中は開発中の設定が使われるようになり、便利です。
Heroku と Scala は結構相性がいいかなと思っています。
Scala はかなりパフォーマンスが出る言語のため、Heroku の無料インスタンスや、安いインスタンスでも動きます。Heroku はインスタンスをスケールしようとすると一気に値段があがるため、小さいインスタンスでサクサク動く Scala と相性いいなと思いました。
一方で、 Scala は言語仕様が難しく、公式ドキュメント以外の資料が少ないのが欠点かなと思います。
すごく簡単な内容の記事になってしまいましたが、Scalaがより良い言語になればいいなと思っています。