GitHub の Installation はなんなんだ
最近、GitHub App を作っています。Installation というのものがなんなのかいまいちピンときていません。今の理解をまとめます。
GitHub App で登場する概念
GitHub App を作るときに出てくる概念には以下のものがあります。
- 秘密鍵
- JWT
- インストール
- Installation Token
秘密鍵
GitHub App が GitHub API とやり取りをする際に必要になるものです。正確には、JWT に署名をする際に必要になります。
長命であり、絶対に漏れてはいけないものです。
JWT
GitHub API には、秘密鍵を直接投げて認証するのではなく、秘密鍵によって署名された JWT を用いて認証します。
API から、App の詳細情報やインストールの情報を得ることができます。Installation Token も作ることができます。
インストール
GitHub App には、「インストール」というリソースが存在します。インストールには、参照できるリポジトリ情報が含まれます。インストールは GitHub App の秘密鍵を持つ人が参照することができます。GitHub App はインストールすることで初めてリポジトリの情報を参照することができます。
というか、GitHub App 自体にはリポジトリを参照する能力はなく、インストールを参照する能力しかないのです。リポジトリを参照する能力は、インストールが持ちます。
Installation Token
インストールが作成できるトークンで、PAT と同じように扱えます。期限があり、インストールから継承した細かい権限管理が行えます。
インストールとGitHub App
GitHub App とインストールで明確に得られる権限が異なります。具体的には、GitHub App (秘密鍵) はインストールの情報を得られますが、インストールからはGitHub App の情報は得られません。もちろん、インストールから他のインストールの情報も得ることができません。
いわゆる「GitHub のユーザー」と対になるのは「インストール」であり、GitHub App はインストールをスケールする = 仮想的な GitHub のユーザーをスケールできる存在という理解をしました。
まとめ
GitHub App ってむずかしいですね。しかし、上手に使うとそれだけで開発者向けサービスを展開できるようなスケールと柔軟性をもつことがわかりました。