※当サイトの記事には、広告・プロモーションが含まれます。

GitHub Appに所属させるGitリポジトリが多いと追加が面倒そうではある

gigazine.net

1977年に打ち上げられたNASA無人宇宙探査機のボイジャー1号は、2024年時点では地球から約240億kmの距離に位置し、最も地球から遠い宇宙探査機として距離を伸ばし続けています。そんなボイジャー1号で2024年10月16日に原因不明のトラブルが発生し、一時は通信が完全に停止したように見えましたが、24日にはNASAのエンジニアチームが通信を再接続できたことを報告しています。

240億km以上離れたボイジャー1号と通信が途絶えるも40年使っていなかったサブ通信システムにより復帰 - GIGAZINE

結果として、40年以上使われていなかったサブ送信機にアクセスすることで、エンジニアはボイジャー1号からのSバンド信号を見つけることに成功します。

240億km以上離れたボイジャー1号と通信が途絶えるも40年使っていなかったサブ通信システムにより復帰 - GIGAZINE

今回のトラブルを受けてNASAは「ボイジャー1号ボイジャー2号は47年以上飛行しており、恒星間空間で運用されている2機しかない宇宙船です。これらの宇宙船は老朽化しているため、技術的な問題が頻繁に発生し複雑化しており、ミッションエンジニアリングチームにとって新たな課題となっています。

240億km以上離れたボイジャー1号と通信が途絶えるも40年使っていなかったサブ通信システムにより復帰 - GIGAZINE

ボイジャー1号は無線通信機2つのうち1つをオフにした状態のため、チームは現在、問題の原因を突き止めるために尽力しています」と述べています。

240億km以上離れたボイジャー1号と通信が途絶えるも40年使っていなかったサブ通信システムにより復帰 - GIGAZINE

⇧ とは言っても、仮に不具合修正の原因が解明できたとして、改修とかできるものなのかね?

そして、

ボイジャー1号は地球から約240億kmというはるか遠くに位置しているため、JPLチームがコマンドを送るのに約23時間、コマンドを受け取ったボイジャー1号がエンジニアリングデータを送信してから地球にデータが戻るまでさらに約23時間かかります。

240億km以上離れたボイジャー1号と通信が途絶えるも40年使っていなかったサブ通信システムにより復帰 - GIGAZINE

⇧ 物理的な制約がエグいっすな。

1回の通信に、約2日の期間を要するってのは、距離の問題は如何ともし難いですな...

1977年に地球を発って、今が2024年で、47年で約240億kmだけど、今の最新技術の宇宙探査機で240億kmまで到達するのに何年ぐらいかかるものなんだろうか?

GitHub Appとは

公式のドキュメントによりますと、

docs.github.com

GitHub Apps について

GitHub Apps は、GitHub の機能を拡張するツールです。 GitHub Apps を使うと、GitHub で、issue を開く、pull request にコメントする、プロジェクトを管理する、といったことを行うことができます。 また、GitHub で発生するイベントに基づいて、GitHub の外部で何かを行うこともできます。 たとえば、GitHub で issue が開かれたときに、GitHub App で Slack に投稿できます。

https://docs.github.com/ja/apps/overview

docs.github.com

GitHub Apps について

GitHub App は、GitHub の機能を操作して拡張するために構築できる統合の一種です。 GitHub App を構築して、ユーザーのサインインやサービス アカウントの作成を必要とせずに、柔軟性を提供し、プロセスの摩擦を軽減できます。

https://docs.github.com/ja/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps

⇧「GitHub Apps」という機能を構成する要素の1つであるということかと。

主な用途としては、

OAuth apps と同様に、GitHub Apps でも OAuth 2.0 が使われ、ユーザーの代わりに動作することができます。 OAuth apps とは異なり、GitHub Apps はユーザーから独立して動作することもできます。

https://docs.github.com/ja/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps

⇧「GitHub」が用意しているAPIを利用するための「認証」になる感じかと。

GitHub Appの認証方法で、「アプリとして認証する」と「インストールとして認証」の違いが分かり辛い

で、「GitHub App」を利用するには、

  • GitHub Appを使用する
    → 既に作成済みの「GitHub App」があるケース
  • GitHub Appを作成する
    → 利用したい「GitHub App」がないケース

⇧ どちらかを選択する形になると思うが、利用できる「GitHub App」が連携されない場合は、『GitHub Appを作成する』に該当するのかなと。

GitHub Appを作成する』場合は、

docs.github.com

GitHub App の作成

GitHub App を作成するには、まず GitHub App を登録する必要があります。 詳しくは、「GitHub App の登録」を参照してください。

https://docs.github.com/ja/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps

⇧「GitHub App の登録」を行う必要があるのだけど、

docs.github.com

About visibility for GitHub Apps

You can make your GitHub App registration public or private. If you set your GitHub App registration to public, any user on GitHub can install it. If you set your GitHub App registration to private, it can only be installed on the account that owns the app.

https://docs.github.com/ja/apps/creating-github-apps/registering-a-github-app/making-a-github-app-public-or-private

⇧ 公開範囲を指定する必要がありますと。

で、

■パブリック

Public installation flow

Public GitHub Apps have a landing page with an Install button, so that other people can install the app in their repositories. If your GitHub App is public to all users on GitHub, you can also choose to publish it to GitHub Marketplace. For more information, see "About GitHub Marketplace for apps."

https://docs.github.com/ja/apps/creating-github-apps/registering-a-github-app/making-a-github-app-public-or-private

⇧ とあり、対価を支払えば誰でも利用できると。

■プライベート

Private installation flow

Private GitHub Apps can only be installed on the user or organization account of the app owner. Limited information about the app will exist on a landing page for the app, but the Install button will only be available to organization owners and app managers for the organization that owns the app, or the personal account if the GitHub App is owned by an individual account.

https://docs.github.com/ja/apps/creating-github-apps/registering-a-github-app/making-a-github-app-public-or-private

⇧ とあり、「GitHub App」の「所有者」である「user」乃至は「organization」に所属する「アカウント」のみ「GitHub App」をインストールできると。

ここで、おや?っと思うのだけど、

⇧ 公式のドキュメントによると、

  1. アプリとして認証する
  2. インストールとして認証
  3. ユーザーに代わって認証する

の3つの「認証」方法が用意されているのですが、「アプリの登録」でインストールする以上、「1. アプリとして認証する」は無くなるのでは?

ChatGPTに質問してみた。

GitHub Appの「アプリとして認証」と「インストールとしての認証」の違いについて説明します。

  1. アプリとして認証 (App Authentication)
    • 概要: GitHub App自体がAPIリクエストを行う際に使用される認証方法です。この認証は、GitHub Appの識別情報(アプリのIDや秘密鍵)を用いて、アプリのトークンを生成します。
    • 使用ケース: アプリが自分自身のアクションを実行する場合に用います。例えば、Webhooksで受け取ったイベントに対して処理を行ったり、GitHub APIにアクセスして情報を取得したりする際に使われます。
    • トークンの生成: JWT(JSON Web Token)を生成して、そのトークンを使用してAPIリクエストを行います。
  2. インストールとしての認証 (Installation Authentication)
    • 概要: 特定のGitHub Appのインストールに関連するリポジトリや組織に対して認証を行う方法です。これは、アプリがインストールされているリポジトリや組織に対して、特定の操作を行うためのトークンを生成します。
    • 使用ケース: アプリが特定のリポジトリに対して操作を実行する際に使用します。例えば、インストールされたリポジトリに対してコミットやプルリクエストを作成する際に利用されます。
    • トークンの生成: インストールされたアプリのインストールIDを使用して、インストールトークンを取得します。このトークンは、インストールされたリポジトリに対しての特定のアクセス権を持っています。

まとめ

  • アプリとして認証: アプリ全体の認証。アプリが自分の機能を実行する際に使用。
  • インストールとしての認証: 特定のインストールやリポジトリに対する認証。アプリがそのリポジトリに対して操作を行う際に使用。

⇧なるほど、

  • 「アプリの登録」での『インストール』
  • 「インストールとしての認証」の『インストール』

は意味合いが異なると。

兎に角、ドキュメントが分かり辛らさMaxなのだが、「GitHub」の管理が「Microsoft」になった影響とかではないかと勘繰ってしまうのだが...

GitHub Appに所属させるGitリポジトリが多いと追加が面倒そうではある

で、Gitリポジトリに対しての操作に関するAPIを利用するには、「インストールとしての認証」を選択する形になると思うのだけど、

docs.github.com

GitHub App インストールとしての認証について

GitHub App がアカウントにインストールされたら、API 要求に対してアプリ インストールとして認証を行うことができます。 これにより、アプリはそのインストールによって所有されているリソースにアクセスできます (アプリに必要なリポジトリ アクセス権とアクセス許可が付与されている限り)。 アプリ インストールによって行われた API 要求は、アプリに帰属します。 GitHub App のインストールについて詳しくは、「GitHub App のインストール」を参照してください。

https://docs.github.com/ja/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation

⇧ とあり、「GitHub App のインストール」のページを見に行くと、

docs.github.com

⇧ とあり、

アプリでリポジトリのアクセス許可が必要な場合は、 [すべてのリポジトリ] または [選択したレポジトリのみ] を選びます。 アプリは常に、GitHub 上のすべてのパブリック リポジトリへの読み取り専用アクセス権を持つようになります。

とあるので、対象のGitリポジトリを選択できるようになっている必要があると。

つまり、『「GitHub App」の「所有者」である「user」乃至は「organization」』からGitリポジトリがアクセスできるようになっている必要があると。

ただ、気になるのは、プライベートリポジトリの扱いなんだが...

イメージとしては、

⇧ 上図のような感じで、「GitHub App」は複数のGitリポジトリに対してAPIによって操作するためには、「GitHub App」へGitリポジトリを紐付ける必要があるってことですかね。

仮に、対象のGitリポジトリが1000個ぐらいあった場合に、『[選択したレポジトリのみ]』を選択せざるを得ない場合、コマンドとかで一括で追加できないと地獄なんだが...

そもそも、

docs.github.com

docs.github.com

⇧「GitHub App」のREST APIのリクエストについては、1時間にリクエストできる回数の制限が設けられているので、「GitHub App」に所属させるGitリポジトリの数もそのあたりを考慮する必要がありそう。

で、

docs.github.com

承認とインストールの違い

アカウントまたは組織に GitHub App をインストールするときに、アプリが要求した組織とリポジトリのリソースにアクセスするためのアクセス許可をアプリに付与します。 また、アプリからアクセスできるリポジトリも指定します。 インストール プロセス中、GitHub App により、付与するリポジトリと組織のアクセス許可が示されます。 さまざまなアクセス許可により GitHub App で実行可能となることの詳細については、「GitHub アプリのアクセス許可を選択する」を参照してください。

https://docs.github.com/ja/apps/using-github-apps/authorizing-github-apps

⇧「GitHub アプリのアクセス許可を選択する」のページを見に行くと、

docs.github.com

GitHub Appの権限について

既定では、GitHub Apps にはアクセス許可はありません。 GitHub App を登録する際に、アプリのアクセス許可を選択できます。 選んだアクセス許可によって、アプリが GitHubAPI でできることと、アプリがサブスクライブできる Webhook が決まります。 アプリに必要な最小限のアクセス許可を選ぶ必要があります。

https://docs.github.com/ja/apps/creating-github-apps/registering-a-github-app/choosing-permissions-for-a-github-app

⇧とあり、適切な「アクセス権」を付与する必要がある模様。

「承認とインストールの違い」については、

github.com

⇧違いが分からんが?って議論が上がっておるのですが、全く解決された様子が無いのだが...

う~む、GitHub Apps、よく分からん...

毎度モヤモヤ感が半端ない…

今回はこのへんで。