Skip to main content

マニフェストから GitHub App を登録する

GitHub App マニフェストは、事前構成済みの GitHub App 登録を他のユーザーと共有する方法です。 マニフェスト フローを使うと、ユーザーが GitHub App をすばやく登録できます。

GitHub App のマニフェストについて

Note

GitHub Appのマニフェストは、Enterprise が所有する GitHub Apps では使用できません。

ユーザーがマニフェストから GitHub App を登録する場合は、URL をフォローしてアプリに名前を付けるだけで済みます。 マニフェストには、アプリケーションを自動的に登録するために必要な権限、イベント、webhook URL が含まれています。 マニフェスト フローによって、GitHub App の登録を作成し、アプリの Webhook シークレット、秘密キー (PEM ファイル)、クライアント シークレット、GitHub App ID を生成します。 マニフェストから GitHub App 登録を作成するユーザーは、その GitHub App 登録を所有し、GitHub 上で登録の設定を編集したり、削除したり、別のユーザーに移譲したりできます。

Probot を使用して、GitHub App マニフェストの作業を開始したり、実装例を確認したりできます。 詳細については、「Probot を使用して GitHub App マニフェスト フローを実装する」を参照してください。

GitHub App マニフェストを使って事前構成済みのアプリを登録するシナリオを次にいくつか挙げます。

  • GitHub Apps を開発時に、新しい Team メンバーが迅速に取りかかれるようにする。
  • 他のユーザーが GitHub API を使用して、アプリを構成せずに GitHub App を拡張できるようにする。
  • GitHub コミュニティで共有する GitHub App の参照デザインを作成する。
  • 開発環境と本番環境で確実に同じ構成を使用して GitHub Apps をデプロイする。
  • GitHub Appの構成に対するリビジョンを追跡する。

GitHub App マニフェスト フローを実装する。

GitHub App マニフェスト フローでは、OAuth フローに似たハンドシェイク プロセスが使用されます。 このフローでは、マニフェストを使用して GitHub App を登録し、アプリの秘密キー、Webhook シークレット、ID の取得に使用される一時的な code を受け取ります。

Note

GitHub App マニフェスト フローの 3 つのステップすべてを 1 時間以内に完了する必要があります。

GitHub App マニフェスト フローを実装するには、以下の 3 つのステップに従います。

  1. ユーザーを GitHub にリダイレクトして、新しい GitHub App を登録します。
  2. GitHub は、ユーザーをサイトにリダイレクトします。
  3. 一時コードをやり取りして、アプリケーションの構成を取得する。

1. ユーザーを GitHub にリダイレクトして、新しい GitHub App を登録

ユーザーをリダイレクトして新しい GitHub App を登録するには、クリックすると POST 要求を https://github.com/settings/apps/new (個人用アカウント) または https://github.com/organizations/ORGANIZATION/settings/apps/new (組織アカウント) に送信するリンクを提供しますORGANIZATION は、アプリを登録する組織アカウントの名前に置き換えます。

GitHub App マニフェスト パラメーターを、JSON でエンコードされた文字列として manifest というパラメーターに含める必要があります。 また、セキュリティを強化するために state パラメーターを含めることもできます。

アプリを登録するユーザーは GitHub ページにリダイレクトされます。そのページには、manifest パラメーターに含めたアプリの名前をユーザーが編集できる入力フィールドがあります。 manifestname を含めない場合は、ユーザーがこのフィールドでアプリの独自の名前を設定できます。

GitHub App マニフェスト パラメーター

名前種類説明
namestringGitHub App の名前。
urlstring必須。 GitHub App のホームページ。
hook_attributesobjectGitHub App の Webhook の構成。
redirect_urlstringユーザーがマニフェストから GitHub App の登録を開始した後にリダイレクトする完全な URL。
callback_urlsarray of stringsインストールの承認後にリダイレクトする完全な URL。 最大 10 個のコールバック URL を指定できます。
setup_urlstring追加設定が必要な場合、GitHub App をインストールした後にユーザーをリダイレクトする先の完全な URL。
descriptionstringGitHub App の説明。
publicbooleanGitHub App を公開する場合は true に設定し、アプリの所有者のみがアクセスできるようにするには false に設定します。
default_eventsarrayGitHub App からサブスクライブされるイベントのリスト。
default_permissionsobjectGitHub App で必要な権限セット。 このオブジェクトの形式は、キーとしてアクセス許可の名前 (たとえば issues) を、値としてアクセスの種類 (たとえば write) を使います。 詳しくは、「GitHub アプリのアクセス許可を選択する」を参照してください。
request_oauth_on_installbooleantrue に設定すると、GitHub App がインストールされた後に、GitHub App を承認するようにユーザーに要求します。
setup_on_updatebooleantrue に設定すると、GitHub App のインストールを更新した後、ユーザーを setup_url にリダイレクトします。

hook_attributes オブジェクトには、次のキーがあります。

Name種類説明
urlstring必須。 Webhook の POST 要求を受け取るサーバーの URL。
activebooleanフックがトリガーされた時に、イベントの内容が配信される (デフォルトはtrue)。

パラメーター

件名種類説明
statestring推測不能なランダムの文字列。 クロスサイトリクエストフォージェリ攻撃に対する保護として使われます。

次の例では、個人アカウントに対して POST 要求をトリガーするボタンがある Web ページ上のフォームを使用します。

<form action="https://github.com/settings/apps/new?state=abc123" method="post">
 Register a GitHub App Manifest: <input type="text" name="manifest" id="manifest"><br>
 <input type="submit" value="Submit">
</form>

<script>
 input = document.getElementById("manifest")
 input.value = JSON.stringify({
   "name": "Octoapp",
   "url": "https://www.example.com",
   "hook_attributes": {
     "url": "https://example.com/github/events",
   },
   "redirect_url": "https://example.com/redirect",
   "callback_urls": [
     "https://example.com/callback"
   ],
   "public": true,
   "default_permissions": {
     "issues": "write",
     "checks": "write"
   },
   "default_events": [
     "issues",
     "issue_comment",
     "check_suite",
     "check_run"
   ]
 })
</script>

次の例では、組織アカウントに対して POST 要求をトリガーするボタンがある Web ページ上のフォームを使用します。 ORGANIZATION は、アプリを登録したい組織アカウントの名前に置き換えてください。

<form action="https://github.com/organizations/ORGANIZATION/settings/apps/new?state=abc123" method="post">
 register a GitHub App Manifest: <input type="text" name="manifest" id="manifest"><br>
 <input type="submit" value="Submit">
</form>

<script>
 input = document.getElementById("manifest")
 input.value = JSON.stringify({
   "name": "Octoapp",
   "url": "https://www.example.com",
   "hook_attributes": {
     "url": "https://example.com/github/events",
   },
   "redirect_url": "https://example.com/redirect",
   "callback_urls": [
     "https://example.com/callback"
   ],
   "public": true,
   "default_permissions": {
     "issues": "write",
     "checks": "write"
   },
   "default_events": [
     "issues",
     "issue_comment",
     "check_suite",
     "check_run"
   ]
 })
</script>

2. GitHub でユーザーをサイトにリダイレクト

[GitHub App を作成] がクリックされると、コード パラメーター内の一時的な code で GitHub がredirect_urlにリダイレクトします。 次に例を示します。

https://example.com/redirect?code=a180b1a3d263c81bc6441d7b990bae27d4c10679

state パラメーターを指定した場合は、そのパラメーターも redirect_url に表示されます。 たとえば次のような点です。

https://example.com/redirect?code=a180b1a3d263c81bc6441d7b990bae27d4c10679&state=abc123

3. 一時的なコードを交換してアプリの構成を取得する

ハンドシェイクを完了するには、「マニフェストから GitHub App を作成する」のエンドポイントに対して POST 要求で一時的な code を送信します。 応答には、id (GitHub App ID)、pem (秘密キー)、webhook_secret が含まれます。 GitHub は、アプリの Webhook シークレットを自動的に作成します。 これらの値は、アプリケーションのサーバーの環境変数に格納できます。 たとえば、アプリで dotenv を使用して環境変数を格納する場合は、アプリの .env ファイルに変数を格納します。

GitHub App マニフェスト フローのこのステップを、1 時間以内に完了する必要があります。

Note

このエンドポイントはレート制限されています。 現在のレート制限状態を確認する方法については、「レート制限」を参照してください。

POST /app-manifests/{code}/conversions

エンドポイントの応答について詳しくは、「マニフェストから GitHub App を作成する」を参照してください。

マニフェスト フローの最後の手順を完了すると、フローからアプリを登録したユーザーは登録した GitHub App の所有者となり、そのユーザーの任意の個人用リポジトリにインストールできます。 所有者は、GitHub API を使用してアプリケーションを拡張したり、所有権を他のユーザーに移譲したり、任意の時に削除したりできます。

Probot を使用した GitHub App マニフェスト フローの導入

ProbotNode.js で構築されたフレームワークです。Webhook の検証や認証の実行など、すべての GitHub Apps で必要になるタスクの多くを実行できます。 Probot に GitHub App マニフェスト フロー が導入されると、GitHub コミュニティで GitHub App のリファレンスデザインの作成と共有がしやすくなります。

共有する Probot App を作成するには、次の手順に従います。

  1. 新しい GitHub App を作成します。
  2. 作成したプロジェクトを開き、app.yml ファイルの設定をカスタマイズします。 Probot では、app.yml の設定が GitHub App マニフェスト パラメーターとして使用されます。
  3. アプリケーションのカスタムコードを追加します。
  4. GitHub App をローカルで実行するか、任意の場所でホストします。 ホストされたアプリの URL に移動すると、 [GitHub App を登録] ボタンがある Web ページが表示され、これをクリックすると事前構成済みのアプリを登録できます。

Probot では、dotenv を使用して、.env ファイルを作成し、APP_IDPRIVATE_KEYWEBHOOK_SECRET 環境変数をアプリ構成から取得した値を使用して設定します。

Glitch でアプリケーションをホストする

アプリをホストおよび共有するために Glitch を使用した Probot アプリの例を確認できます。 この例では、Checks API を使用し、app.yml ファイルで必要な Checks API イベントとアクセス許可を選択します。 Glitch は、既存のアプリケーションを流用して独自のアプリケーションを作成 (リミックス) できるツールです。 アプリケーションをリミックスすると、アプリケーションのコピーが作成され、Glitch はそれをホストしてデプロイします。 Glitch アプリのリミックスについては、Glitch の概要に関するページを参照してください。