GitHubとHerokuを連携させて、継続的インテグレーションを実現する
HerokuはGitHub Flowで重要とされる2つの自動化機能をHeroku CIと、Heroku Pipelinesによって提供しています。
Heroku CIでは、投入されたソースコードとテストコードにより、単体テストを実行する環境を提供します。利用する言語によって、よく利用されるテストフレームワークを用いたテストが標準的に提供されています。例えば、Rubyの場合はRSpecやMiniTestなどを自動で判断してテストを行うよう定義されています。またHeroku CIでは、一般的に使われているテストコードを実行するだけではなく、個別にテストを実行する方法を記述して、固有のテストフレームワークにあわせてテストを実行することもできます。このように、ソースコードがプッシュされた段階でHeroku CIを自動的に実行して、アプリケーションのビルドと単体テストを完了させる「継続的インテグレーション(Continuous Integration=CI)」の仕組みを実装できるようになっています。
Heroku PipelinesとHeroku CIを組み合わせて、すぐにCI/CDを実現する
Heroku CIは、単体で実行することはもちろん、Heroku Pipelinesの自動デプロイと連動して実行させることが可能です。Heroku Pipelinesで準備した環境へ、ソースコードがプッシュされた時に、自動的にHeroku CIを実行してビルド&テストを実行できます。これにより、Herokuアプリケーション環境へデプロイを行うと、単体テストまで完了したアプリケーション実行環境が自動的に準備されて利用可能となります。利用者は、このアプリケーション実行環境での統合・結合テストを行って、問題がなければPromoteボタンをクリックするだけで、本番環境へ即時にリリースができます。
Heroku Pipelinesは、GitHubのプルリクエストと連携できます。GitHubと連携させることによって、GitHubへソースコードがプッシュされた段階で自動的に単体テストが行われます。ここで単体テストをスルーできた安全なソースコードについて、プルリクエストを申請させることができます。プルリクエストを実行すると、自動的に「ReviewApp」という一時的なアプリケーション実行環境がビルドされて、Herokuアプリケーションの実行環境が準備されます。このようにHeroku Pipelinesでは、GitHubへプルリクエストを送るだけで、自動的にアプリケーションをテストする環境が準備できるという優れものです。
次に、この「ReviewApp」のアプリケーションをユーザがテストをして問題がなければ、GitHub側でマージをすれば本番向けのソースコードとして準備完了です。そして、このマージされたソースコードを、自動的にステージング環境へデプロイできます。もちろんステージングの環境へデプロイする際も、Heroku CIが自動的にテストを行った上で、デプロイが実行されます。このように、ユーザが手動でテストを行わなければならない局面以外では、Heroku Pipelinesが自動的にHeroku CIと連携をして、自動的にアプリケーションのステージングまで行うことができる「継続的デリバリー(Continuous Delivery=CD)」の環境を提供します。また、プロダクション環境へのアプリケーションリリースをも自動化することができるので、全てを完全自動化した「継続的デプロイメント(Continuous Deployment=CD)」も実現できます。
