Skip to main content

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 ってむずかしいですね。しかし、上手に使うとそれだけで開発者向けサービスを展開できるようなスケールと柔軟性をもつことがわかりました。