Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

GitHub App

Last updated at Posted at 2024-12-17

(わからないことが多すぎるので全体公開はまだまだ先だなー)

どういうもの?

GitHub の機能を拡張するツール。
GitHub App を経由することで、以下のようなことができる。

  • issue を開く
  • PR にコメント
  • GitHub で issue が発行されたときに slack で通知

GitHub App は、GitHub Marketplace でオープンに公開されているものを見繕って使うこともできるし、独自に作成することもできる。

GitHub App を作成する

以下、個人の GitHub App を作成する手順
GitHub の Web コンソールへログイン > ユーザーのアバター > Settings > Developer Settings > New GitHub App
image (2).png

→Register new GitHub App ページが開く
image (3).png

Register new GitHub App で以下の項目を入力する

項目1 項目2 説明
Register new GitHub App GitHub App name GitHub App の名前。GitHub 全体でユニークでなければならない。
Description(表示上は名無し) アプリの説明
Homepage URL GitHub App の Web サイトのURL (ダミーでも何でもいいらしい)
Indentifying and authorizing users Callback URL GitHub App のインストールをユーザーが承認した際のリダイレクト先 URL (TODO)
Expire user authorization tokens チェックを入れるとアクセストークンに有効期限が設定される
Request user authorization (OAuth) during installation GitHub App のインストール中にユーザーが GitHub App を認可した際、ユーザーのアクセストークンを生成できる?
Enable Device Flow デバイスフローを使用してユーザーのアクセストークンを生成する場合に。
Post installation Setup URL GitHub App へ追加設定した際のリダイレクト先 URL。Redirect on update が無効である場合機能しない (TODO)
Redirect on update GitHub App へ追加設定した際に Setup URL へリダイレクトするか
Webhook Active GitHub
Webhook URL GitHub が Web Hook イベントを送信する URL
Secret Web Hook のためのシークレット?
Permissions Repository permissions リポジトリおよび関連リソースへのアクセス権限
Organization permissions 組織関連リソースへのアクセス権限
Account permissions ユーザー承認フローの一部として各ユーザーごとに付与されるアクセス権限
Subscribe to events Installation target GitHub App がインストールされているユーザーや組織のアカウントに関連するアクティビティがあったときにトリガー?
Meta Web Hook が削除されたとき?
Security advisory GitHub によるセキュリティ勧告の発行・更新・撤回?
where can this GitHUb App be installed 以下の二択。
-Only on this account:
- Any account:

GitHub App を使用する

組織またはアカウント単位で GitHub App をインストールできる。
このとき、GitHub App を紐づけるリポジトリも指定する形になる。

参考
https://docs.github.com/ja/apps/using-github-apps/about-using-github-apps

GitHub App 認証とトークン

GitHub App には以下の認証および、発行されるトークンの種類がある。

  • GitHub App として認証 : JWT
  • GitHub App インストールとして認証: インストールアクセストークン(IAT)
  • ユーザーに代わって認証: ユーザーアクセストークン(UAT)

各トークンの種類ごとに、利用できる GitHub API のエンドポイントが異なる。

GitHub App の JWT

GitHub App の JWT は、GitHub App の ID と秘密鍵を使って生成できる。
JWT の生成には、各プログラミング言語で用意されているパッケージを利用できる。

参考

インストールアクセストークン(IAT)

処理の自動化で使うアクセストークンである。
GitHub App は、ユーザー or 組織 の裁量でリポジトリにインストールすることができるが、GitHub App をインストールすると、インストール ID が発行される。
インストール ID 単位のアクセストークンが IAT である。

例えば、GitHub Actions において GitHub 側で自動的に取得される GITHUB_TOKEN は、IAT に該当する。

IAT は、GitHub App の JWT を Bearer トークンとして /app/installations/<インストールID>/access_tokens API を叩くことで取得できる。
このとき、リクエストボディ の repository_ids パラメータで操作可能なリポジトリを限定したり、permissions パラメータで、使用するパーミッションを限定したりできる。これらを指定しない場合は、その GitHub App に紐づけられている全てのリポジトリおよび、GitHub App に付与されているすべてのパーミッションが IAT に付与されることになる。

GitHub Actions で IAT を取得する

を参照。
この action を使うことで、GitHub アプリのインストール アクセス トークンの生成に記述されている、JWT の生成 〜 IAT の取得までを一貫して行ってくれる。

アクセストークンを使った GitHub API の利用

GitHub App のアクセストークンを使って、GitHub API を利用できる。
アクセストークンに付与されるパーミッションごとに利用できるエンドポイントが定められており、ものによっては UAT でしか利用できないものもある。
これらの情報は、Permissions required for GitHub Appsで確認できる。

参考

GitHub App のスラッグ名

GitHub App nameを「小文字化+特殊文字をハイフンへ変換」した値 とのこと

参考:
https://zenn.dev/tmknom/articles/github-apps-token

GitHub App インストールに伴う暗黙的なユーザー作成

GitHub App は、 <GitHub App のスラッグ名>[bot] というユーザーっぽいものとして扱われるらしい。
※これは、actions/create-github-app-token のサンプルに、
 user_id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id) 
があったことから。

ちなみに、/users/<ユーザー名> の GitHub API 仕様は コレ

ダミーのメールアドレス
以下のダミーメールアドレスが使えるっぽい。
<GitHub App の ID>+<GitHub App のスラッグ名>[bot]@users.noreply.github.com

参考:
https://syui.ai/blog/post/2023/04/29/github/

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?