GitHub 統合 (Heroku GitHub デプロイ)
最終更新日 2024年05月09日(木)
Heroku は GitHub と統合することで、GitHub 上のコードを Heroku 上で実行中のアプリに容易にデプロイできるようになります。Heroku アプリ用の GitHub 統合が設定された場合、Heroku は指定された GitHub リポジトリへのプッシュを自動的にビルドし、(ビルドに成功した場合は) リリースすることができます。
GitHub 統合の有効化
GitHub 統合は、Heroku Dashboard でアプリの Deploy
タブから設定できます。
GitHub 統合を設定するには、GitHub での認証が必要です。これは Heroku アカウントごとに 1 回のみ実行すれば十分です。
GitHub の自動デプロイを設定するには、GitHub リポジトリ管理者アクセスが必要です。これは、Heroku では GitHub リポジトリにサービスフックを登録する必要があり、このアクションには管理者アクセスが必要なためです。GitHub 組織の場合、ユーザーの GitHub アカウントも組織のメンバーである必要があり、外部の共同作業者であってはなりません。
ユーザーのリポジトリが、サードパーティアプリケーション制限が有効化されている GitHub 組織内にある場合、組織管理者は、組織で使用できるよう Heroku を承認する必要があります。GitHub についての詳細は、こちらを参照してください。
Heroku アプリを GitHub リポジトリにリンクした後で、ブランチから選択的にデプロイするか、自動デプロイを設定することができます。
アプリがない場合は、GitHub からの組織の統合を承認する必要があります。このプロセスについての詳細は、「Approving OAuth Apps for your organization」(組織の OAuth アプリの承認) を参照してください。
手動デプロイ
手動デプロイでは、ユーザーのアプリに接続されている GitHub リポジトリから任意のブランチの即時デプロイを作成できます。変更が Heroku にデプロイされるタイミングを管理する場合は、手動デプロイを使用してください。
また、手動デプロイは、自動デプロイ用に構成されているものとは異なるブランチを一時的にデプロイするために使用することもできます。たとえば、開発アプリを development
GitHub ブランチに同期しているが、ある機能ブランチを一時的にテストするとします。この場合は、その機能ブランチの手動デプロイをトリガーするだけで、Heroku アプリ上でその機能ブランチをテストできます。ただし、その機能ブランチのリリースは、GitHub が development
ブランチに次回正常にプッシュされるときに上書きされます。
自動デプロイ
GitHub ブランチの自動デプロイを有効にした場合、Heroku はすべてのプッシュをビルドしてそのブランチにデプロイします。たとえば、Heroku 上に開発アプリがある場合、GitHub development
ブランチへのプッシュが自動的にビルドされてそのアプリにデプロイされるように設定できます。
自動化された継続的インテグレーションを使用するように (たとえば Travis CI で) GitHub リポジトリを設定した場合、[Wait for CI to pass before deploy] チェックボックスをチェックすることができます。有効にした場合、Heroku は関連するコミットのすべてのコミットステータスが success
と表示された後にのみ自動デプロイします。
チェックの 1 つが pending
ステータスを示しているため、このコミットは自動デプロイされません。
すべてのチェックが success
ステータスを示しているため、このコミットは自動デプロイされます。
レビューアプリ
Heroku アプリに対してレビューアプリを有効にすると、Heroku は親アプリに接続されている GitHub リポジトリ上で開いている各プルリクエストに対して一時的なテストアプリを作成します。レビューアプリは、GitHub Flow を使用して、コードベースへの変更を提案、議論、および管理する場合に優れています。プルリクエストブランチは、Heroku 上の新しいアプリにデプロイされるため、ユーザーおよび共同作業者は非常にシンプルにコードブランチをテストおよびデバッグできます。また、GitHub ブランチを表す Heroku アプリ上で、自動化された統合テストを実行することもできます。
詳細は、レビューアプリの記事をご覧ください。
Heroku CI
GitHub リポジトリを Pipeline に接続したら、Heroku CI をオンにすることができます。これは Heroku Pipeline に容易に統合できる (したがって、レビューアプリ、既存の Heroku アプリ、および GitHub 統合を補完する)、視覚的で低設定のテストランナーです。すべての Heroku Pipeline は Heroku CI に対応しているため、Pipeline の Settings
タブでこれをオンにします。
Diff へのリンク
GitHub リポジトリにリンクされているアプリの場合、ダッシュボードの Activity
タブのリリースには [View Diff] のリンクが含まれています。リンクをたどると、最終リリース以降の変更内容を示す GitHub 比較ビューが表示されます。
GitHub からの切断
個々のアプリの切断
個々のアプリは、GitHub ペインの各アプリの Deploy
タブで切断できます。
アカウントの切断
Heroku および GitHub アカウントは、ダッシュボードアカウントページのアプリケーションペインで切断できます。
よくある質問
GitHub 統合は、自分の Heroku にホストされた Git リポジトリと同期されますか?
GitHub 統合が有効化されたアプリの場合、Heroku は GitHub リポジトリのコンテンツを Heroku にホストされたリポジトリに同期しません。その代わりに、Heroku は GitHub からソースを直接プルします。Heroku Git リモートにコードをプッシュすることも技術的には可能ですが、どのコードがアプリに現在デプロイされているのかについて共同作業者を混乱させるおそれがあるため、そうすることは控えてください。
GitHub 以外のバージョン管理プロバイダーを使用したらどうなりますか?
Heroku は現在、GitHub 以外のバージョン管理プロバイダーのための自社製のデプロイ統合機能を提供していません。GitLab や Bitbucket などの別のバージョン管理プロバイダーを使用する場合のデプロイオプションについては、こちらの記事を参照してください。
ビルド出力はどこに表示されますか?
ビルド出力は、Heroku Dashboard 上にある当該アプリケーションの Activity
タブに表示されます。ビルド出力の履歴や、進行中のビルドのストリーム出力も確認することができます。
GitHub 統合はスキーマ移行を自動的に実行しますか?
デフォルトでは、Heroku はデプロイ中に、Rails などのフレームワークによって指定される移行を実行しません。
Heroku Release Phase を使用すると、アプリの新しいバージョンの実行前のスキーマ移行などの一般的なタスクを実行できます。詳細は、関連するドキュメントを参照してください。
GitHub 統合は Git のサブモジュールと連動しますか?
サブモジュールを使用する GitHub リポジトリは一般的に Heroku に正常にデプロイされません。これは、repo-content の tarball が生成される場合は、GitHub にサブモジュールのコンテンツがないためです。
Heroku が自分の GitHub リポジトリにアクセスできないのはなぜですか?
GitHub 統合がリポジトリの内容にアクセスできない場合、一般的に次のいずれかが原因となっています。
- GitHub ユーザーがリポジトリへのアクセス権限を失った。これはリポジトリへのアクセス権限を再び要求するか、別の GitHub ユーザーを使用することで対処できます。
- サードパーティアプリケーション制限が組織で有効になっている。サードパーティアプリケーション制限が有効になっている場合、
Heroku Dashboard
OAuth アプリケーションに組織へのアクセス権限を付与する必要があります。これを行う方法については、GitHub のドキュメントを参照してください。 - リポジトリが存在しなくなった。
- GitHub ユーザーが組織の外部の共同作業者であり、現在サポートされていない。ユーザーは組織のメンバーである必要があります。
アクティビティログで、デプロイの原因として間違ったユーザーが指定されているのはなぜですか?
GitHub からの通知を受けてビルドをトリガーするとき、GitHub ユーザー ID を受け取り、リンクされている Heroku アカウントを見つけようとします。GitHub ID に一致するリンク済みアカウントが見つからない場合、Pipeline またはアプリを GitHub に接続したユーザーがおそらく表示されます。
原因となるユーザーが正しく指定されていない場合、ダッシュボードを使用してアカウントを GitHub に接続すると、この問題が解決される可能性があります。
Heroku で自分の GitHub リポジトリに対する読み取りと書き込みの許可が必要なのはなぜですか?
これにはいくつかの理由があります。
レビューアプリからデプロイが行われた場合、Heroku GitHub 統合は、コードがデプロイされたことを示すデプロイステータスを、このリンクと一緒に公開します。
レビューアプリを有効化するとき、サービスでは、レビューアプリを自動的にビルドできるようにするために必要な
app.json
ファイルをユーザーが持っていることを確認します。このファイルは自動的に生成されてリポジトリにコミットされます。GitHub 統合サービスは自動デプロイを駆動させる目的で、カスタムフックをリポジトリに追加できるようにする必要があります。そうすることで、ユーザーが変更内容をブランチにプッシュし、これらが GitHub からのものであることを検証するときに、GitHub から通知を受け取ることができ、このためにはリポジトリへの管理アクセスが必要です。
GitHub アプリでは、リポジトリのきめ細かい制御が可能ですが、この機能は GitHub 統合にまだ統合されていません。スケジュールの確約はできませんが、このことは Heroku で確かに認識されています。Heroku Changelog に注目しておいてください。
上記がすべて該当しない場合は、サポートチケットをオープンしてください。