はじめに
Herokuの機能であまりメジャーではないがReview Appsと言う機能がある、GithubのPull Requestごとに動作可能な環境を自動で作ってくれるすぐれものだ
これがすごいのはエンタープライズモードじゃなくても使えるし、使用するaddonによっては無料枠で使うことができる
コードレビューする際に動作を確認したい場合に簡単にチェックすることができる。わざわざ自分のローカル環境にPullして動作確認する必要が無いのだ!!
またPRをマージしたりクローズするとHerokuのアプリも連携して削除されるので削除し忘れるということもない
以下の条件をみたす場合は導入することをおすすめする
- Herokuで稼働しているWebアプリ
- 複数人のチームで開発している
- コードのホスティングはGithub
サンプルコード
なおサンプルアプリはRailsのscaffoldで適当に作ったアプリを利用する
サンプルコードはこちら
https://github.com/konyu/reviewapp/
Herokuの設定
前提条件
HerokuでAppを作成済みで、動作可能なアプリが動いていること
対象のGithubのリポジトリのオーナーか、Organizationの強い権限である必要がある(未検証)
RewviewAppsの設定する
Herokuのダッシュボード画面に行き、対象のアプリのリンクをクリックしアプリケーションのトップページを開く
Deployのタブをクリックする
New Pipelineボタンを押すと以下のようにPipeline名を求められる

パイプライン名を求められるがデフォルトのHeroku App名のままにしておく方がわかりやすくて良いだろう
これでPipelineが作成される

Connect To Githubボタンを押す
orgaizationか自分のアカウントのリポジトリを検索して、対応するgithubリポジトリを探し、connectボタンを押して連携する
※初めてHerokuとGithubを連携する場合は、GithubとのAuth連携(FB連携機能見たいのが出る場合
Githubとの連携後、DeployのタブにREVIEW APPSの項目が表示されている

Enable review Apps... ボタンを押す
ダイアログが表示され
Create an App.json File... ボタンを押す
※ GithubのリポジトリにReviewApps用のapp.jsonファイルがなければこのダイアログが表示される
App.jsonの雛形となるフォームが表示される
各項目の内容は以下の様な感じ(Railsアプリの場合)
Scripts
Post deploy script (optional)
bundle exec rake db:schema:load db:seed(つまりDBにテーブルを作成し、seedデータを挿入するなど、アプリが起動時に動くようにする準備)
Buildpacks
heroku/ruby(デフォルトのまま)
Config Vars
ReviewAppの場合に特別変更する場合以外は変更の必要はない
Add-onの環境変数がここになくても問題ない(Postgresの環境変数DATABASE_URLなど)
画面下部に、上記設定で作成されるapp.jsonファイルの例が表示される

Commit to Repoボタンを押すとGithubのリポジトリにapp.jsonが追加されコミットされている

※ 確認したい場合はGithubのmasterリポジトリを確認する

ダイアログが表示されるので、以下の二つのチェックを入れる
Create new review apps for new pull requests automatically
のチェックを入れるとPR時に新しいアプリを作ってくれる
Destroy stale review apps automatically
5日起動しないと消える。ほっておいても良い
Enableボタンを押すと設定完了
app.jsonの内容を修正したい場合
このapp.jsonは後からも修正できるし、add-onのプランはデフォルトだと一番安いプランになり、プランの変更はadd-on名:プラン名で指定できる
動作確認
リポジトリに適当な変更を追加する
ローカル環境のリポジトリのディレクトリに移動して以下の作業をする
# masterにgit pullする
git checkout master
git pull
# サンプルのブランチをbranchと言う名前で作る
git checkout -b branch
# 適当なファイルを作成し追加する
touch sample.txt
git add -A
git commit -m "test revie apps"
#branchブランチをgithubuにプッシュする
git push --set-upstream origin branch
GithubでPull Requestを作る
branchリポジトリをmasterに対してPull Requestをつくる

PRを作った後にHerokuがreview用のアプリを作る間pendingの期間を減るとView developmentボタンが表示される
View developmentを押す
Review向けのアプリのURLが開き動作確認することができる
Herokuの画面で確認
ダッシュボードから、パイプライン名のリンクをクリックして確認するとReveiw Appsが作成されているのがわかる。

Review Appをクリックすると、Appの詳細も把握できる

Review Appsの削除
PRをマージしたりクローズするとHerokuのアプリも連携して削除される
PullrequestをReOpenすれば、再度作ってくれる