[Heroku] CI/CD をより加速する、ちょっとした新しい機能

臆面もなく「かしゆかの誕生日である」というだけで、多方面の Advent Calendar を書いてしまうしょっさんです、こんにちは。これは[CI/CD Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ci-cd) 23日目。何度もいいますが、かしゆかの誕生日で祝日(今年だけ有給休暇)です!!!

昨日の方はまだアップされておらず、明日は担当者がいない状況でのスタートです。そんなことも心配せずに、こちらどんどんお祝いしていきます。

# Herokuは、CI/CD環境を最速で「無」の状況から準備できるプラットフォームである

と信じてやまないこの私が、昨年書いた Herokuでの CI/CDネタはこちらです。

[heroku 中級編 - 1分で実現するCI/CDをHeroku Pipelinesで](https://qiita.com/sho7650/items/a7d25f838b99bc5ba833)

この1年で、この `Heroku Pipeline`に福音のような機能が一つもたらされました。それが[Sensitive config vars](https://devcenter.heroku.com/articles/github-integration-review-apps#sensitive-config-vars) 別名「Review Apps config vars」です。

## Review Apps?

そもそも Review Apps がなにごとかというと、くわしくは私が寄稿しているCodeZineの[Herokuとチーム開発のおいしいレシピ～HerokuとGitHubを連携してCI/CDを実現する](https://codezine.jp/article/detail/10233?p=4)に詳しいです。こちらを参考にいただけると幸いです。タイトルも「おいしいレシピ」でね。Perfume がインディーズ時代に出した[モノクロームエフェクト](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%8E%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A0%E3%82%A8%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88) に入ってる歌のタイトル丸パクです、どうぞよろしくおねがいします。

カンタンに紹介すると、GitHubと Herokuの CI/CD機能と連携してテンポラリアプリの確認ができます。GitHubからプルリクをあげると、そのプルリクされたソースコードをベースに一時的にHerokuのアプリが起動してくる機能を総称してReview Appsといいます。総称する必要ないけど。

通常、あげられたプルリクに対して、QAがソースコードの内容を確認したり静的コード解析してみたり、えっちらおっちらと自分でどっかのサーバにデプロイしてみたり。そんなことをして、品質チェックを行ったりするのではないでしょうか。この Review Appsでは、そのあたりを鑑みて、一時的にアプリをまったく関係のない場所にデプロイしてリリースしてくれます。本番やテスト、開発環境とはまったく別のところへ。

最近の新しくなった Review Appsでは、さまざまな機能追加が行われました。デプロイされる場所を指定するとか、Docker対応とか。今回紹介する[Sensitive config vars](https://devcenter.heroku.com/articles/github-integration-review-apps#sensitive-config-vars)も、その中の一つです。

# Sensitive config vars?

そもそもの由来としては、環境変数の定義情報の一部を、マニフェストファイルである`app.json`に初期値として記入しておかないと、この Review Appsの機能がうまく使えなかったことに端を発します。この機能を利用できるようになることで、Review Apps で個別に環境変数を Heroku上で定義できるようになり、認証情報など、一部で環境変数として定義しておきたかったセンシティブな情報を、安全に取り扱うことができるようになりました。

そして、これは意外な福音をもたらすのです。

## アドオンの再利用

すべてのアドオンがというわけにはいきませんが、アドオンの中でもライセンス上、複数のHerokuアプリから共有して利用できるものがあります。多くのデータストアサービス(データベース)もそのうちの一つです。

Herokuにおいて、データベースへ接続するクレデンシャル情報は、環境変数へ持たせるものと相場が決まっています。実際にアドオンをプロビジョニングすると、自動的に環境変数を設定する程度には。

Review Appsでは、こういったよく使われるであろうデータベースなどのアドオンも、デプロイされるたびにプロビジョニングすることによってまかなっていましたが、これでは時間がかかります。とくに、ある程度の規模のデータベースだとプロビジョニングに時間がかかるので、テストの結果を得ることにも時間がかかり CI の恩恵を受けにくいケースもあったかもしれません。

ですが。Review Apps にも環境変数を定義することができるようになったおかげで、どこか別のHerokuアプリで動かしているデータベースサービスを常に使い続けることができるようになります。ステキ。

例えば、`A` という Heroku アプリがあり、そこにReview Apps用の Heroku Postgres をおいたとします。プロビジョニング後、`A` アプリには、`DATABASE_URL` という環境変数が自動的に適用され、その中身が`postgres://username001:password@ec2-111-11-22-123.compute-1.amazonaws.com:5432/database` だったとします。

作成した Heroku Pipeline にある「Settings」を確認すると、"Review Apps" という設定項目があります。

<img width="1223" alt="Screen Shot 2019-12-23 at 14.56.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37263/eba726e1-208e-e032-ba45-c3ea5771c2c2.png">

その中の `Review app config vars` に同じように、`KEY` と `VALUE` を入れておくと、Review Apps では、このデータベースを見に行くように定義することができます。テスト用のデータが常に入った状態でテストができたり、アドオンをプロビジョニングする時間が不要になったり、Heroku Connect で同期された状態のテーブルをテストすることができたりと、利用範囲も用途も広がることでしょう。

# まとめ

ものすごく地味な更新ではあるものの、CI/CD を更に加速させ、安全にビルド&デプロイできるようになりました。このようなちょっとした変化でも、開発ライフサイクルには、大きな効果をもたらすものがあります。ぜひ、新しい機能も使っていきながら、みなさまの開発生活が良きものになることを願ってやみません。