雑な理解
- GitHub の API を使って色々やる bot を作るための機能、および作られた bot のこと
- Webhook を受け取れる・REST/GraphQL API を叩ける
- API を叩くためには installation access token を都度発行する必要あり Authenticating with GitHub Apps - GitHub Docs
- GitHub Apps からのアクセス専用の API があり https://docs.github.com/en/rest/reference/apps これらを叩くには認証情報として JSON Web Token (JWT) が必要。JWT を作るための秘密鍵は作成した GitHub Apps の設定ページからダウンロードする
- OAuth Apps との違い
- OAuth Apps は個人アカウントが認可し、認可した個人アカウントの代理として振る舞う
- 認可時に発行されるアクセストークンは個人アカウントと強く紐づくので会社組織等で使う bot には向かない
- 例: A さんが退職したら GitHub とか Slack とかの連携が軒並み停止した
- Personal Access Token との違い
- 個人アカウントに紐づかないので会社組織等で使う際の管理に向く
- API を叩く上で personal access token と installation access token の使用感に大きな差はない
- Personal access token の方が作成しやすく、有効期限も長くできるので便利だが、その分リスクも大きい
典型的な、「Webhook を受け取って GitHub の API を叩いて何かする」アプリを作って動かす上では、どれを使ってもできる。個人的な用途であれば Heroku あたりに適当なアプリをデプロイして Webhook 送信先 URL に設定し、Personal Access Token を発行して Heroku アプリケーションの環境変数に入れておく、とかが一番手軽。
複数人で開発・管理したい場合 Personal Access Token を他人に見られると困るので、OAuth Apps として作って各人が認可するか、GitHub Apps として作って Organization またはリポジトリにインストールし、個人アカウントの権限と切り離して運用できるようにする、というのが妥当な流れか。