Heroku でアプリケーションをリリースする
学習の目的
この単元を完了すると、次のことができるようになります。
- Heroku のさまざまなリリースオプションについて説明する。
- 各オプションの長所と短所について説明する。
Heroku には複数のリリースオプションが用意されています。どの方法を選ぶかは、具体的なリリースプロセス、要件、アプリケーションによって異なります。
Git を使用してリリースする
これは最もシンプルなリリース方法です。Heroku アプリケーションをリモートとして既存の Git リポジトリに追加し、git push
を使用してコードを Heroku に送信します。Heroku でアプリケーションが自動的にビルドされ、リリースが作成されます。
GitHub インテグレーションを使用してリリースする
GitHub インテグレーションを使用すると、GitHub リポジトリから直接 Heroku に変更をリリースできます。このインテグレーションには、他のリリースオプションよりも多くの機能があります。リポジトリをリンクすると、リポジトリにプッシュした変更は自動的にアプリケーションにリリースされます。特定のブランチに自動リリースを設定したり、GitHub から手動でリリースをトリガーしたりできます。Heroku CI などの継続的インテグレーション (CI) を使用すると、テストが失敗した場合に Heroku へのリリースを止めることができます。
GitHub インテグレーションは、パイプラインへのリリースを自動化する場合にも便利です。たとえば、変更をメインブランチにマージするとき、テスト用のステージングに自動リリースできます。
Heroku レビューアプリケーションを使用してリリースする
レビューアプリケーションを使用すると、GitHub プルリクエスト (PR) を分離された破棄可能なアプリケーションとしてリリースできます。本番アプリケーションを上書きすることなく PR のデモやテストができるため、テストの時間を大幅に節約できます。PR をクローズするとレビューアプリケーションは破棄されます。
[Deploy to Heroku (Heroku にリリース)] ボタンを使用してリリースする
[Deploy to Heroku (Heroku にリリース)] ボタンを使用すると、Web ブラウザーからクリック操作でアプリケーションを Heroku にリリースできます。カスタム環境変数を Heroku に渡す、特定の Git ブランチを使用する、OAuth キーを指定するなど、さまざまな設定で各ボタンをパラメーター化できます。このボタンでリリースされたアプリケーションは、新規コミットを GitHub リポジトリに追加するときに自動更新されません。
Docker を使用してリリースする
Docker では、アプリケーションを自己完結した環境にバンドルできます。このように分離して、開発と本番の両方でアプリケーションの動作を同じにします。Docker を使用すると、アプリケーションの実行に使用する言語、フレームワーク、ライブラリをより詳細に制御できます。コンテナを Heroku にリリースするには、イメージを Heroku コンテナレジストリにプッシュするか、アプリケーションの heroku.yml
ファイルで宣言して自動的にビルドします。
Hashicorp Terraform を使用してリリースする
Hashicorp Terraform は、複雑なインフラストラクチャの管理をサポートする Infrastructure as Code ツールです。宣言型設定言語の HCL でアプリケーションを定義して Heroku アプリケーションのリリースと管理のプロセスを自動化できます。Terraform v0.12 以降ではリモートの状態を保存できるため、Heroku dyno で Terraform を実行して、Terraform の状態を Heroku Postgres データベースに保存できます。
リリースオプションを比較する
次の表をユースケースとワークフローに最適なリリースオプションを選択するときの参考にしてください。
リリース方法 | 要件 | 最適な用途 | 長所 | 短所 |
---|---|---|---|---|
Git | - コードを本番に手動でプッシュするための Git リポジトリと Heroku アプリケーションの両方へのフルアクセス権。 | - 小規模で信頼できるチームとのプロジェクト。 | - シンプルで任意の Git ベースのワークフローに追加可能 - Git submodule をサポート | - git push を使用したコードの手動リリースが必要 |
GitHub インテグレーション | - GitHub リポジトリへの管理者アクセス権 | - 自動リリース | - アプリケーションを自動的にリリースし、最新の状態に保つ - Heroku Pipeline、レビューアプリケーション、Heroku CI との統合により、継続的ワークフローを実現 | - Git submodule のサポートなし |
Heroku レビューアプリケーション | - 複数環境にリリースされるアプリケーションを含む GitHub のプロジェクト。 | - PR ごとにレビューアプリケーションを自動的に作成して更新するオプション - Heroku Private Space のサポートにより、分離した環境で変更をテスト | - レビューアプリケーションで使用するリソースの追加費用。開発センターで費用最適化のヒントを参照してください。 | |
[Deploy to Heroku (Heroku にリリース)] ボタン | - GitHub リポジトリ - 有効な app.json ファイルがプロジェクトのルートディレクトリにあること | - ユーザーまたは顧客に提供されるアプリケーション (オープンソースプロジェクトなど) - 新規従業員の研修 | - テンプレートプロジェクトの共有に最適 - プロジェクトの README ファイルや Web ページに追加しやすい - 事前設定されたデフォルト値、環境変数、パラメーターを含むテンプレートを提供 | - Git submodule のサポートなし - リポジトリ変更時の自動更新なし。同じアプリケーションへの以降のリリースには別のリリース方法を使用する必要があります。 |
Docker | - Docker イメージ | - カスタムスタックを含むアプリケーション。 | - アプリケーションのスタックをより詳細に制御 - イメージを自動的に生成、または既存のイメージをコンテナレジストリにプッシュ - 環境間の一貫性 | - スタックは各自でメンテナンスが必要 - パイプライン昇格のサポートなし |
Hashicorp Terraform | - Terraform | - 複雑なインフラストラクチャコンポーネントを含むアプリケーション | - Heroku アプリケーションのリリースを自動化 - Heroku アプリケーションをコードとしてリリース可能 - 大規模で複雑なリリースの管理を簡略化 - 他のプロバイダーからのアプリケーション、Private Space、リソースを反復可能なマルチプロバイダーアーキテクチャに設定可能 | Heroku サポートではこれらのより複雑なリリースへのサポートが提供されない |
まとめ
これでさまざまなリリースオプションについて理解できました。引き続きこのモジュールで、Heroku でのアプリケーションの実行に使用するインフラストラクチャについて学習しましょう。