【Git】personal access tokenを使用してGitHubへアクセスする

# はじめに
GitHubのPrivateなリポジトリにアクセスする方法は色々ありますが、SSHを使用した通信はGitHub的に非推奨になったり、HTTPでのパスワードとユーザーネームを使用した認証は廃止になったりと、GitHub側でもより安全にアクセスできるよう調整が進められてきました。

そんな中で本日は、従来のHTTPSにアクセス権限や使用期間などを設定したトークンを付与するだけで認証が済んでしまう、大変便利なアクセス方式をご紹介したいと思います。

# Personal Access Tokenとは
GitHub API またはコマンドラインを使用する際にパスワードの代わりに使用可能なトークンです。
このトークンは従来のパスワードと違い、使用期限の設定やこのトークンを使用してどこまでアクセスが可能かなどを細かく設定でき、従来のパスワードよりもより安全に使用可能になります。

# Personal Access Tokenの設定方法
Personal Access Tokenを使用する為には、GitHubの設定からトークンを発行する必要があります。
トークンの発行は以下リンクより発行が可能です。

https://github.com/settings/apps

上記リンクに飛ぶと以下画面が表示されますが、赤枠内のPersonal Access Tokenより作成が可能です。

![スクリーンショット 2023-10-29 18.27.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/874e61d8-7622-3743-be3d-5598a24668c4.png)

この記事を作成した10月29日現在、アクセストークンには2種類あります。
どちらでもアクセストークンを発行可能ですが、fine-grained tokensの方がより細かく権限を振ることが可能なので、今回はこちらを使用して解説したいと思います。

Fine-grained tokensを選択すると、以下画面が表示されます。

![スクリーンショット 2023-10-29 18.30.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/0a7189fc-8cde-ee04-51e2-5a82f8c74791.png)

画面右上の【Generate new token】よりトークンを発行します。

上記ボタンよりトークン画面に進むとトークン発行画面へ進みます。
入力すべき項目がいくつかあるので、細かく解説していきます。

![スクリーンショット 2023-10-29 18.33.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/8021a423-4c57-6423-0fb1-7dc269601e87.png)

まず、トークンの名称を設定する必要があります。
この名称はどこで使用しているのか、何を目的に使用しているのかなどを名称にしてあげると後ほど管理がしやすいと思います。

次に、期間の設定を行います。

![スクリーンショット 2023-10-29 18.36.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/c13849bb-d783-1501-0eb9-bcff5318b880.png)

![スクリーンショット 2023-10-29 18.36.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/f5e78165-f1c7-9690-20ac-98093b834f8a.png)

赤枠のセレクターよりこのトークンがどれくらいの期間使用できるようにするのか設定します。
セレクター内部は90日が最長ですが、Customより任意の期間を設定できます。
ただし、トークンの有効期間として設定可能な期間は最長1年ですのでご注意ください。

次に、このトークンがどのプロジェクトに対して有効にするかを決定します。

![スクリーンショット 2023-10-29 18.39.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/916b9362-c48b-8068-4e94-a81699572085.png)

Repository accessは全てのリポジトリに対してでよければ【All repositories】に、特定のリポジトリだけでよければ【Only select repositores】を選択します。

次は、トークンの設定で最も重要なパーミッションを設定します。

![スクリーンショット 2023-10-29 18.44.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/00e2be01-c897-e74a-07b1-9e27fa5df47a.png)

まず、上記画像赤枠の【Repository Permissions】を選択し、項目を表示させます。

![スクリーンショット 2023-10-29 18.45.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/7d35c655-1d98-93e0-47d2-401cf980e9eb.png)

次に、赤枠の【Contents】に対してのアクセスを【Read and write】へ変更します。
Contentsの項目を変更すると、自動でmetadataのアクセス権限がRead-onlyに変更されます。

GitHubへ基本的な操作のみを行うだけであればこの設定だけで問題ないはずです。
GitHub Actionsやそれ以外の操作をこのトークンを使用して行う場合は、関連するパーミッションを有効にしてあげてください。

ちなみにパーミッションに関しての詳細は以下をご覧ください。

https://docs.github.com/en/rest/overview/permissions-required-for-fine-grained-personal-access-tokens?apiVersion=2022-11-28#contents

最後に【Generate token】よりトークンを発行します。

![スクリーンショット 2023-10-29 18.50.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/9eccad4a-403a-0e4d-4a3a-0dbdef5ec105.png)

上記ボタンよりトークンを発行すると、発行したトークンの詳細が表示されます。
![スクリーンショット 2023-10-29 18.52.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/3abad81f-3e23-9d49-5ad0-6ae5945fac80.png)

このトークンを使用してGitHubへアクセスを行うわけですが、注意点としてこのトークンは一度画面を離れると再表示することはできません。
なので必ずトークンを保持しておき、後ほど使用できるようにしておいてください。

これでトークン発行手順は以上になります。

# おまけ：SourceTreeへの設定方法
おまけとして、先ほど作成したトークンをSourceTreeへ設定し、GitHubへアクセスする方法も手順をまとめておきます。

まず、SourceTreeの設定からアカウント設定を表示します。

![スクリーンショット 2023-10-29 18.57.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/d6f03639-7456-af66-e0f1-ae6bd167497b.png)

画面左下の追加よりアカウントの追加を行います。

![スクリーンショット 2023-10-29 18.59.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/88a149d6-9c12-5e61-cfc2-e64570391e7f.png)

上記画像の通り、ホストを【GitHub】に、認証タイプを【Personal Access Token】に、プロトコルを【HTTPS】に設定します。

ユーザー名は【Githubのアカウント名】、Personal Access Tokenは【先ほど発行したトークン】を設定します。

以上を設定し、保存ボタンで設定完了です。

# さいごに
長い間SSHでGithubへアクセスを行ってきたと思いますが、Personal Access Tokenを使用したアクセス方法の方が圧倒的に簡単で安全です。
アクセス手順でお悩みの方は是非参考にしてもらえたら幸いです。