# 企業の組織でのアプリのインストールの自動化

企業で GitHub App を作成し、プログラムによってインストールすることで、組織全体でプロセスを一貫して自動化します。

## イントロダクション

プロセスを安全に自動化するには、エンタープライズ アカウントが所有する GitHub App を作成し、自動化が行われる企業または組織にアプリをインストールします。

GitHub Apps は、スクリプトとワークフローで GitHub する API 呼び出しを認証するために使用できるトークンを提供します。 これらのトークンは、特定のセキュリティと監査の要件を持つ企業に適しています。

* 一時
* 特定のアカウントと権限に制限されている
* ユーザー アカウントではなくアプリの ID に関連付けられている

大企業の一般的なニーズは、複数の組織において自動化の一貫性を維持し、最新の状態を保つことです。 これを実現するには、プログラムでアプリをインストールします。 たとえば、特定のポリシーと設定ですべての組織を構成する必要がある場合は、すべての組織にこのタスクの GitHub App をインストールできます。

このガイドでは、企業所有の GitHub App を組織にプログラムでインストールするために必要な手順について説明します。 アプリがインストールされたら、それを使用して新しいリポジトリを作成します。

## プロセスの概要

このガイドでは、 GitHub CLI を使用して、アクセス トークンを要求し、組織にアプリをインストールするために必要な API 呼び出しを行います。 実際には、このプロセスは、会社のニーズに合わせて調整されたカスタム スクリプトの一部になります。

次の処理を行います。

1. エンタープライズ アカウントが所有する 2 つのアプリを作成します。
   * 組織にアプリをインストールするアクセス許可が付与されます。
   * もう 1 つには、組織内のプロセスを自動化するアクセス許可があります (この場合はリポジトリを作成します)。
2. 最初のアプリを認証して、 **エンタープライズ スコープの** アクセス トークンを取得します。
3. エンタープライズ スコープのトークンを使用して、組織にオートメーション アプリをインストールする API を呼び出します。
4. 組織がインストールしたアプリを認証して、 **組織スコープの** アクセス トークンを取得します。
5. 組織スコープのトークンを使用して、組織内にリポジトリを作成する API を呼び出します。

各段階で、特定のアカウントで特定のアクションを実行するアクセス許可のみを持つトークンを使用します。 セキュリティと監査の観点からは、このアプローチは、企業と組織全体でアクションを実行するアクセス許可を持つ単一のトークンに依存するよりも優れています。

## \[前提条件]

自分のデバイスでこのガイドに従うには、次の操作を行う必要があります。

* エンタープライズ所有者であること。
* 自動化を実行するエンタープライズ所有の組織の所有者になる。
* API 呼び出しを行う GitHub CLI をインストールします。
  GitHub CLI リポジトリでの[インストール](https://github.com/cli/cli?tab=readme-ov-file#installation)を参照してください。
* JSON Web トークン (JWT) を生成するために、 `openssl` をインストールします。 多くのデバイスでは、既定で OpenSSL がインストールされています。 インストールされている場合はバージョン番号を返す `openssl -v`を実行して確認できます。
* Bash、ZSH、Git Bash などの Unix シェルを使用します。

## 1. JWT の生成を準備する

アプリからアクセス トークンを要求するには、アプリのクライアント ID と秘密キーから生成された JSON Web トークン (JWT) が必要です。 多くのプログラミング言語には、JWT を生成するための組み込みメソッドがあります。 このチュートリアルでは、bash スクリプトを使用して、 `openssl`を使用してコマンド ラインから JWT を生成します。

1. [GitHub アプリの JSON Web トークン (JWT) の生成](/ja/enterprise-server@3.22/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app#example-using-bash-to-generate-a-jwt) から JWT を生成するための Bash スクリプトの内容をコピーします。
2. `gen-jwt.sh`と呼ばれるホーム ディレクトリの新しいファイルに内容を保存します。
3. スクリプトを実行可能にします。

   ```shell copy
   chmod +x ~/gen-jwt.sh
   ```

## 2. 2 つのエンタープライズ アプリを作成する

GitHub Apps では、許可するきめ細かなアクセス許可とアカウント スコープを持つトークンのみを生成できます。 この手順では、2 つのエンタープライズ所有アプリを作成します。1 つはアプリをインストールするための **エンタープライズ レベルの** アクセス許可を持ち、もう 1 つはリポジトリを作成するための **組織レベルの** アクセス許可を持ちます。

### a. インストーラー アプリを作成する

"インストーラー アプリ" はエンタープライズ アカウントにインストールされ、組織内の他のアプリをインストールするアクセス許可を持ちます。

1. エンタープライズ アカウントで新しいアプリを作成します。

   1. エンタープライズ アカウントの設定に移動します。
   2. 左側のサイドバーで、\[ **GitHub Apps**] をクリックします。
   3. **新規 GitHub App** をクリックします。

2. 以下を除き、ほとんどの値は既定値のままにしておくことができます。

   * アプリ `YOUR-HANDLE-installer-app`を呼び出し、 `YOUR-HANDLE` を GitHub ユーザー名に置き換えます。
   * \[ホームページの URL] を \[ `https://github.com`に設定します。
   * \[ **ユーザー承認トークンの期限切れ** ] の選択を解除し、\[Webhook] で **\[アクティブ**] の選択を解除します。
   * \[エンタープライズアクセス許可] で、 **エンタープライズ組織のインストール**に対する読み取りと書き込みのアクセス許可をアプリに付与します。

3. アプリを作成したら、 **クライアント ID を** コピーし、 `INSTALLER_APP_CLIENT_ID`という変数として保存します。 たとえば、コマンド ラインでは次のようになります。

   ```shell copy
   export INSTALLER_APP_CLIENT_ID='abcde12345'
   ```

4. アプリ ページで、下にスクロールし、\[ **秘密キーの生成**] をクリックします。 秘密キー ファイルがダウンロードされます。

5. `~/YOUR-HANDLE-installer-app.DOWNLOAD-DATE.private-key.pem`のようなファイル パスを書き留めます。

6. アプリ ページの左側のサイドバーで、\[アプリの **インストール**] をクリックし、エンタープライズ アカウントに新しいアプリをインストールします。 アプリをインストールすると、アカウントでアクションを実行するアクセス許可がアプリに付与されます。

7. ブラウザーで URL を確認して、アプリのインストール ID を見つけます。 これは、 `/enterprises/ENTERPRISE/settings/installations/ID` URL の末尾にある数値の文字列です。 これを `INSTALLER_APP_INSTALL_ID` 変数として保存します。

   ```shell copy
   export INSTALLER_APP_INSTALL_ID='12345678'
   ```

8. アプリがインストールされているエンタープライズの名前を変数として保存します。

   ```shell copy
   export ENTERPRISE='octo-enterprise'
   ```

### b。 オートメーション アプリを作成する

"オートメーション アプリ" は組織にインストールされ、その組織にリポジトリを作成するアクセス許可が付与されます。 実際には、組織のプロセスを自動化するために必要なアクセス許可をこのアプリに付与します。

1. エンタープライズ アカウントで新しいアプリを作成します。
   * アプリ `YOUR-HANDLE-automation-app`を呼び出し、 `YOUR-HANDLE` を GitHub ユーザー名に置き換えます。
   * \[ホームページの URL] を \[ `https://github.com`に設定します。
   * \[ **ユーザー承認トークンの期限切れ** ] の選択を解除し、\[Webhook] で **\[アクティブ**] の選択を解除します。
   * \[リポジトリのアクセス許可] で、管理の読み取りと書き込みのアクセス許可をアプリに付与 **します**。

2. アプリを作成したら、 **クライアント ID を** コピーし、 `AUTOMATION_APP_CLIENT_ID` 変数として保存します。

   ```shell copy
   export AUTOMATION_APP_CLIENT_ID='abcde12345'
   ```

3. 下にスクロールし、\[ **秘密キーの生成**] をクリックします。 秘密キー ファイルがダウンロードされます。

4. `~/YOUR-HANDLE-automation-app.DOWNLOAD-DATE.private-key.pem`のようなファイル パスを書き留めます。

5. アプリがインストールされる組織の名前を変数として保存します。

   ```shell copy
   export ORG='octo-org'
   ```

## 3. インストーラー アプリを認証する

アプリを認証すると、アプリの登録時に定義したスコープとアクセス許可を持つトークンを取得できます。 この場合、インストーラー アプリのトークンを取得します。これにより、組織にオートメーション アプリをインストールするアクセス許可が付与されます。

1. 保存した Bash スクリプトを使用して JWT を生成します。 例えば次が挙げられます。

   ```shell copy
   ~/gen-jwt.sh $INSTALLER_APP_CLIENT_ID ~/YOUR-HANDLE-installer-app.DOWNLOAD-DATE.private-key.pem
   ```

2. JWT ( `JWT= `後の長い文字列) をコピーし、変数として保存します。

   ```shell copy
   export INSTALL_JWT='abcde12345'
   ```

3. JWT を使用して、インストール アクセス トークンの要求を認証します。 この手順では、アプリ API エンドポイント [のインストール アクセス トークンの作成を](/ja/enterprise-server@3.22/rest/apps/apps#create-an-installation-access-token-for-an-app) 使用し、アプリのインストール ID が必要です。

   ```shell copy
   gh api --method POST "/app/installations/$INSTALLER_APP_INSTALL_ID/access_tokens" --header "Authorization: Bearer $INSTALL_JWT"
   ```

4. `token` プロパティを含む JSON オブジェクトが表示されます。 アクセス トークン (引用符を使用せずに `token` プロパティの値) をコピーし、 `INSTALLER_APP_INSTALL_TOKEN` 変数として保存します。

   ```shell copy
   export INSTALLER_APP_INSTALL_TOKEN='abcde12345'
   ```

## 4. Automation アプリをインストールする

先ほど受け取ったインストール アクセス トークンによって、組織内のアプリをインストールするための API を呼び出すアクセス許可が付与されます。 ここでは、トークンを使用して、特定の組織に Automation アプリ (作成した 2 つ目のアプリ) をインストールします。 実際には、この API を複数回呼び出して、複数の組織にアプリをインストールできます。

1. 次のコマンドを実行します。 エンタープライズ所有の組織の API エンドポイント [に GitHub アプリをインストール](/ja/enterprise-server@3.22/rest/enterprise-admin/organization-installations#install-a-github-app-on-an-enterprise-owned-organization) し、要求したインストール トークンで認証し、インストールするオートメーション アプリのクライアント ID を渡しています。

   ```shell copy
   gh api --method POST \
     "/enterprises/$ENTERPRISE/apps/organizations/$ORG/installations" \
     --header "Authorization: Bearer $INSTALLER_APP_INSTALL_TOKEN" \
     --header "Accept: application/vnd.github+json" \
     --header "X-GitHub-Api-Version: 2022-11-28" \
     --field "client_id=$AUTOMATION_APP_CLIENT_ID" \
     --field "repository_selection=all"
   ```

2. 成功した場合は、アプリのインストール ID から始まる多数のプロパティが返されます。

   アプリが正常にインストールされたことを確認するには、 `https://github.com/organizations/ORG/settings/installations`に移動し、ORG を組織名に置き換えます。 新しくインストールされたアプリがページに表示されます。

3. 新しいインストールのインストール ID を見つけて、 `AUTOMATION_APP_INSTALL_ID`として保存します。 ID を検索するには、API によって返された最初の ID プロパティをコピーするか、UI でアプリのインストールの横にある **\[構成** ] をクリックして URL から ID をコピーします。

   ```shell copy
   export AUTOMATION_APP_INSTALL_ID='12345678'
   ```

## 5. オートメーション アプリを認証する

インストーラー アプリを認証してエンタープライズ スコープのトークンを取得したのと同様に、Automation アプリに対して同じプロセスを実行する必要があります。 これにより、リポジトリを作成するアクセス許可を持つ組織スコープのトークンが提供されます。

1. オートメーション アプリのクライアント ID と秘密キーを使用して JWT を生成します。 例えば次が挙げられます。

   ```shell copy
   ~/gen-jwt.sh $AUTOMATION_APP_CLIENT_ID ~/octocat-automation-app.2025-10-08.private-key.pem
   ```

2. JWT ( `JWT= `後の長い文字列) をコピーし、変数として保存します。

   ```shell copy
   export AUTO_JWT='abcde12345'
   ```

3. JWT を使用してインストール アクセス トークンの要求を認証します。今回は、新しくインストールされたオートメーション アプリのインストール ID と JWT を渡します。

   ```shell copy
   gh api --method POST "/app/installations/$AUTOMATION_APP_INSTALL_ID/access_tokens" --header "Authorization: Bearer $AUTO_JWT"
   ```

4. 新しいインストール アクセス トークンをコピーし、 `AUTOMATION_APP_INSTALL_TOKEN` 変数として保存します。

   ```shell copy
   export AUTOMATION_APP_INSTALL_TOKEN='abcde12345'
   ```

## 6. プロセスを自動化する

先ほど受け取ったインストール トークンによって、アプリがインストールされている組織にリポジトリを作成するアクセス許可が付与されます。

1. 次のコマンドを実行します。 取得したインストール トークンを使用して認証していることに注意してください。

   ```shell copy
   gh api --method POST \
     "/orgs/$ORG/repos" \
     --header "Authorization: Bearer $AUTOMATION_APP_INSTALL_TOKEN" \
     --header "Accept: application/vnd.github+json" \
     --header "X-GitHub-Api-Version: 2022-11-28" \
     --field "name=automatic-repo" \
     --field "description=Repository created automatically using GitHub App automation" \
     --field "private=false" \
     --field "auto_init=true"
   ```

2. リポジトリが正常に作成されたことを確認するには、 `https://github.com/orgs/ORG/repositories`に移動し、ORG を組織の名前に置き換えます。

<div class="border rounded-2 p-3">

リポジトリは正常に作成されましたか?

<a href="https://docs.github.io/success-test/yes.html" target="_blank" class="btn btn-outline mt-3 mr-3 no-underline">
<span>はい</span></a><a href="https://docs.github.io/success-test/no.html" target="_blank" class="btn btn-outline mt-3 mr-3 no-underline"><span>いいえ</span></a>

</div>

## 7. アプリをアンインストールする

セキュリティを確保するには、企業と組織からアプリをアンインストールします。 これにより、アプリに関連付けられているすべてのトークンが取り消されます。 手順については、「[インストールされている GitHub Apps の確認と変更](/ja/enterprise-server@3.22/apps/using-github-apps/reviewing-and-modifying-installed-github-apps)」を参照してください。

## 次のステップ

組織でプログラムを使用してアプリをインストールし、自動化を実行する方法について説明しました。 これで、複数の組織で実際のプロセスを自動化する準備ができました。 アプリで実行できる操作の詳細については、「 [GitHub アプリの作成について](/ja/enterprise-server@3.22/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)」を参照してください。

> \[!TIP] 実際には、1 回限りのプロセスとしてインストールを実行する可能性があります。 組織レベルの自動化は、Webhook または cron ジョブによってトリガーされる別のスクリプトで定義されます。 ただし、セキュリティを重視する企業は、アプリの秘密キーが公開された場合の影響を制限するために、自動化が実行されるたびにアプリをインストールしてアンインストールすることを好む場合があります。