🦄

GitHub Appと他認証方式や自動化ツールの比較

に公開

こんにちは。前回はGitHub Appの概要についてまとめました。ただ、GitHubにはPATやGitHub Actionsなど類似した認証方式や自動化ツールがあります。

この記事では、それぞれの違いを簡単にまとめつつ、使い分けのポイントに関する筆者なりの考察をまとめてみたいと思います。


目的

GitHubにおいて、GitHub Appとそれ以外の認証方式や自動化ツールの違いを把握し、使い分ける際のポイントを押さえてもらう。

比較対象の簡単な概要

GitHub Appについては前回詳しく説明しているので割愛します。ここではそれ以外の比較対象となるサービスの概要を記載します

Personal Access Token

2種類存在する。REST API エンドポイントの認証や、Git over HTTPSでBasic認証を行う際のパスワードとして使用できる。

  • personal access token (classic)
  • fine-grained personal access token

※GitHubではユーザーパスワードによる認証はありません。

個人用SSH

Git操作をGit over SSH接続で実行する際に、ユーザーに紐づける形でSSHキーの公開鍵をGitHubに登録して利用する。秘密鍵は、GitHubクライアント側で保管しておく。

外部の認証プロバイダーからSSOでのアクセスを強制している環境ではPATではなく
このSSHに対して、GitHubの画面上でSSOで認証を行うことで使えた、といった経験もあったりしますので参考までに。

Deploy Key

個人用SSHと同様、SSH接続で使用するものだが、キーがユーザーではなく、リポジトリに紐づくという特徴があります。

https://docs.github.com/ja/enterprise-cloud@latest/rest/deploy-keys/deploy-keys?apiVersion=2022-11-28

GitHub App

前回解説しています。詳しくはこちら

https://zenn.dev/ryun_log/articles/410de0fd422081

GitHub Actions

これはDeploy Keyなど認証方式とは違い、自動化ツールの一種です。
アプリケーションのビルドやテストなどを自動化するCI/CDのプラットフォーム。実態としては
リポジトリにプロセスを定義したymlファイルを配置して利用する形。Azure DevOpsにおける
Azure Pipelinesに相当する機能。

比較してみる

表にして視覚的に違いがとらえられるようにしてみました。
運用面考慮事項は筆者の主観が含まれておりますので、ご注意ください。

比較表

比較項目 PAT 個人用SSH Deploy Key GitHub App GitHub Actions
基本情報
プロトコル HTTPS SSH SSH HTTPS HTTPS
紐づき先 ユーザー ユーザー リポジトリ Organization or ユーザー リポジトリ
認証情報の管理
有効期限 なし※1 なし なし App自体のシークレット: なし
インストレーショントークン: 1時間
Environment Secrets,Repository Secrets: 登録自体に有効期限なし
GITHUB_TOKEN: ジョブ実行後or24時間後に削除
管理者 ユーザーのみ ユーザーのみ リポジトリ管理者 組織管理者 or ユーザー リポジトリ管理者
できること
GitHub REST API 〇 × × 〇 〇
Git操作 〇 〇 〇 〇 〇
運用面考慮事項
属人性の低さ × × 〇 〇 〇
セットアップ工数 〇 〇 〇 △ △

※1: fine-grained personal access token、personal access tokens (classic)両方とも設定上、有効期限を無限にできるためこの表記にしていますが、GitHub公式はセキュリティの観点で有効期限の設定を強く推奨しています。また、fine-grained personal access tokenは公式ドキュメント上は366日が最長の有効期限という記載がありますが、試してみると、無期限で作成可能でした。

余談ですが、GitHubの画面を確認してみると、デプロイキーではなく、GitHub Appを使うように
GitHubとしては推奨していました。

調べて考えたこと

  • GitHub Appはサーバを用意する必要があるのは骨が折れるが、複数リポジトリに展開することを考えると、インストール作業だけでソースコードを横展開する必要性がないことから、「複数リポジトリに作成したツールを横展開したいが、何か修正があったとき用に1か所にソースを集めておきたい」ケースにお勧めできるのではと思う。
  • GitHub Actionsについては、やはりサーバーの用意がいらない点がメリットだなと思いました。
    一方で、再利用ワークフローを用いたとしても、インターフェースが変わるレベルのワークフローへの変更を適用したい際には、全リポジトリで修正が必要になってしまうのはデメリットに感じています。

まとめ

ここまでで、GitHub Appとその他の認証方式や自動化ツールを比較してみました。
細かい内容についてはもちろんGitHubの公式ドキュメントを見るなり、ほかの方が執筆されている記事を読んでいただくのが良いかと思いますが、「ざっくりどんな違いがあるかイメージをつかんでおきたい」際にちょうど良い形にできたのではないかと思います。

次回

試しに、GitHub AppとGitHub Actionsで、PR通知デモアプリを作ってみて双方のツールの理解を高めつつ、実際の違いを見てみようかなと思います。

Discussion