OAuth app の代わりに GitHub App を使用する
通常、GitHub Apps が OAuth apps より優先されます。
OAuth apps と GitHub Apps はどちらも OAuth 2.0 を使います。
OAuth apps はユーザーに代わってのみ動作できるのに対し、GitHub Apps はユーザーの代わりに、またはユーザーと関係なく動作できます。
詳しくは、「GitHub Apps と OAuth アプリの違い」を参照してください。
既存の OAuth app を GitHub App に移行する方法については、「OAuth アプリからGitHub Appへの移行」を参照してください。
GitHub Apps で強化されたセキュリティを提供する
GitHub Apps を使うと、アプリで実行できることをより細かく制御できます。 GitHub Apps では、OAuth apps で使われる広範なスコープの代わりに、きめ細かいアクセス許可を使います。 たとえば、アプリでリポジトリのコンテンツを読み取る必要がある場合、OAuth app には repo
スコープが必要です。これにより、アプリでリポジトリのコンテンツと設定を編集することもできます。 GitHub App では、リポジトリのコンテンツに対する読み取り専用アクセスを要求できます。これにより、アプリでは、リポジトリのコンテンツまたは設定の編集など、より高い特権のアクションを実行できなくなります。
GitHub Apps では、リポジトリへのアクセスもより細かく制御できます。 GitHub App を使用すると、アプリをインストールしたユーザーまたは Organization 所有者は、アプリでアクセスできるリポジトリを決定できます。 現在、OAuth app では、アプリを承認したユーザーがアクセスできるすべてのリポジトリにアクセスできます。
GitHub Apps では、有効期間が短いトークンが使われます。 トークンが漏洩した場合、トークンの有効期間は短くなり、発生する可能性のある損害が軽減されます。 逆に、OAuth app を承認したユーザーが OAuth app トークンを取り消すまで、トークンは期限切れになりません。
これらのセキュリティ機能は、アプリの資格情報が漏洩した場合に発生する可能性のある損害を制限することで、GitHub Appのセキュリティを強化するのに役立ちます。 さらに、これにより、より厳格なセキュリティ ポリシーを持つ Organization がアプリを使用できるようになります。
GitHub Apps は、ユーザーとは関係なく、またはユーザーに代わって動作できる
GitHub Apps は、ユーザーとは関係なく動作できます。 これは、ユーザー入力を必要としない自動化に役立ちます。
OAuth apps と同様に、GitHub Apps でもユーザーに代わってアクションを実行できます。 アクションがアプリによって実行されたことを示さない OAuth apps とは異なり、GitHub Apps では、ユーザーに代わってアプリによりアクションが実行されたことを示します。
GitHub Apps はユーザー アカウントに関連付けられず、GitHub のシートを使いません。 GitHub Apps は、アプリを最初にインストールしたユーザーが Organization を離れても、インストールされたままになります。 これにより、ユーザーが Team を離れた場合でも、統合は引き続き機能します。
GitHub Apps にはスケーラブルなレート制限がある
インストール アクセス トークンを使う GitHub Apps のレート制限は、リポジトリの数と組織のユーザーの数に応じてスケーリングされます。 逆に、OAuth apps のレート制限は低く、スケーリングされません。 詳しくは、「Rate limits for GitHub Apps (GitHub アプリのレート制限)」を参照してください。
GitHub Apps には Webhook が組み込まれている
GitHub Apps には、一元化された Webhook が組み込まれています。 GitHub Apps は、アプリでアクセスできるすべてのリポジトリおよび組織の Webhook イベントを受け取ることができます。 逆に、OAuth apps では、リポジトリと組織ごとに個別に Webhook を構成する必要があります。
API アクセスが多少異なる
通常、GitHub Apps と OAuth apps は同じ API 要求を行うことができます。 ただし、いくつかの違いがあります。
- チェック実行とチェック スイートを管理する REST API は、GitHub Apps でのみ使用できます。
- エンタープライズ レベルのリソース (エンタープライズ オブジェクト自体など) は、GitHub Apps では使用できません。 つまり、GitHub Apps では
GET /enterprise/settings/license
などのエンドポイントを呼び出すことはできません。 ただし、エンタープライズが所有する組織とリポジトリのリソースは使用できます。 - GitHub App に付与されたアクセス許可とリポジトリへのアクセスによっては、一部の要求で不完全なデータが返される場合があります。 たとえば、アプリで、ユーザーがアクセスできるすべてのリポジトリを取得するように要求した場合、応答には、アプリがアクセスを許可されたリポジトリのみが含まれます。
GitHub Apps で使用できる REST API エンドポイントについて詳しくは、「GitHub App インストール アクセス トークンで使用できるエンドポイント」をご覧ください。
GitHub App または personal access token のいずれかを選択する
ユーザーに代わってまたは Organization で、GitHub リソースにアクセスする場合、または統合が長期にわたることが予想される場合は、GitHub App を構築することをお勧めします。
personal access tokens は、API のテストまたは有効期間の短いスクリプトに使用できます。 personal access token はユーザーに関連付けられているため、必要なリソースにアクセスできなくなると、自動化が機能しなくなる可能性があります。 Organization にインストールされる GitHub App は、ユーザーに依存しません。 さらに、ユーザーとは異なり、GitHub App は GitHub シートを使用しません。
GitHub では、2 種類の personal access tokens がサポートされていますが、可能な限り、personal access tokens (classic) ではなく fine-grained personal access token を使用することをお勧めします。 personal access tokens について詳しくは、「個人用アクセス トークンを管理する」を参照してください。
GitHub App または GitHub Actions のいずれかを選択する
GitHub Apps と GitHub Actions は両方とも、自動化とワークフローのツールを構築する方法を提供します。
GitHub Actions では、リポジトリで継続的インテグレーション、デプロイ タスク、プロジェクト管理などのジョブを実行できる自動化が提供されます。 これらは、管理者が設定した、GitHub でホストされるランナー マシンまたはセルフホステッド ランナーで直接実行されます。 GitHub Actions は永続的に実行されません。 GitHub Actions ワークフローは、リポジトリで発生するイベントに応答して実行され、そのジョブ用に設定されたリポジトリのリソースにのみアクセスできます。 ただし、カスタム アクションをリポジトリや Organization 間で共有できるため、開発者はニーズに合わせて既存のアクションを再利用したり、変更したりできます。 GitHub Actions には組み込みのシークレット管理も付属しており、これを使用してサードパーティ サービスと安全にやり取りしたり、デプロイ キーを安全に管理したりすることができます。
GitHub Apps は、指定したサーバーまたはコンピューティング インフラストラクチャ上で永続的に実行されるか、ユーザー デバイス上で実行されます。 GitHub Webhook イベントと GitHub エコシステム外からのイベントに応答できます。 これらは、複数のリポジトリまたは Organization にまたがる操作や、ホストされたサービスを他の Organization に提供する場合に適したオプションです。 GitHub App は、GitHub の外で主に発生するか、GitHub Actions ワークフローの割り当てより実行時間やアクセス許可が多くなる機能でツールを構築するときに最適です。
GitHub Actions と GitHub Apps の比較について詳しくは、「カスタム アクションについて」を参照してください。
組み込みの GITHUB_TOKEN
に十分なアクセス許可がない場合、GitHub Actions ワークフローで GitHub App を使用して認証できます。 詳しくは、「GitHub Actions ワークフローで GitHub App を使用して認証済み API 要求を作成する」を参照してください。