# OAuth アプリのスコープ

スコープによって、必要なアクセスの種類を正確に指定できます。 スコープによって OAuth トークンへのアクセスが 制限 されます。 ユーザがすでに持っている範囲を超えた権限を許可することはありません。

> \[!NOTE]
> GitHub Appの代わりにOAuth appを構築することを検討してください。 GitHub Apps では、スコープの代わりにきめ細かいアクセス許可が使用されるため、アプリで実行できる操作をより細かく制御できます。 詳細については、「[GitHub アプリと OAuth アプリの違い](/ja/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/differences-between-github-apps-and-oauth-apps)」および「[GitHub アプリの作成について](/ja/enterprise-server@3.22/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)」を参照してください。

GitHubでOAuth appを設定すると、要求されたスコープが承認フォームにユーザーに表示されます。

> \[!NOTE]
> GitHub Appを構築する場合、承認要求にはスコープを指定しません。 この詳細については、「[ユーザーに代わってGitHub アプリで認証する](/ja/enterprise-server@3.22/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user)」を参照してください。

どのOAuthスコープを所有しているか、そしてAPIアクションが何を受け付けるかを知るには、ヘッダを確認してください。

```shell
$ curl -H "Authorization: Bearer OAUTH-TOKEN" http(s)://HOSTNAME/api/v3/users/codertocat -I
HTTP/2 200
X-OAuth-Scopes: repo, user
X-Accepted-OAuth-Scopes: user
```

* `X-OAuth-Scopes` には、トークンが認可したスコープが一覧表示されます。
* `X-Accepted-OAuth-Scopes` には、アクションがチェックするスコープが一覧表示されます。

## 利用可能なスコープ

| 名前                                                                                                                                                                    | 説明                                                                                                                                                                                                                                                                                                                                             |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`(no scope)`**                                                                                                                                                      | パブリック情報 (ユーザー プロファイル情報、リポジトリ情報、gists を含む) への読み取り専用アクセスを許可します。                                                                                                                                                                                                                                                                                  |
| **`site_admin`**                                                                                                                                                      | サイト管理者に [GitHub Enterprise Server 管理 API エンドポイント](/ja/enterprise-server@3.22/rest/enterprise-admin)へのアクセスを許可します。                                                                                                                                                                                                                               |
| **`repo`**                                                                                                                                                            | パブリック、内部、 、およびプライベート リポジトリへのフル アクセスを許可します。これには、コードへの読み取りと書き込みアクセス、コミット状態、リポジトリの招待、コラボレーター、デプロイ状態、リポジトリ Webhook が含まれます。                                                                                                                                                                                                                         |
| **注**: `repo` スコープでは、リポジトリ関連のリソースに加えて、Organization 所有のリソース (プロジェクト、招待、Team メンバーシップ、Webhook) を管理するためのアクセスも許可されます。 さらに、ユーザー所有のプロジェクトを管理する権限も許可されます。                     |                                                                                                                                                                                                                                                                                                                                                |
|  `repo:status`                                                                                                                                                        |                                                                                                                                                                                                                                                                                                                                                |
| public、private、internal リポジトリのコミット ステータスに対する読み取り/書き込み権限を許可します。 このスコープは、コードへのアクセスを許可 *せずに*、他のユーザーまたはサービスにプライベート リポジトリコミットステータスへのアクセス権を付与する場合にのみ必要です。                   |                                                                                                                                                                                                                                                                                                                                                |
|  `repo_deployment`                                                                                                                                                    | パブリック リポジトリとプライベート リポジトリの[デプロイ ステータス](/ja/enterprise-server@3.22/rest/repos#deployments)へのアクセスを許可します。 このスコープは、コードへのアクセスを許可\_せずに\_、他のユーザーまたはサービスにデプロイ ステータスへのアクセスを許可する場合にのみ必要です。                                                                                                                                                                |
|  `public_repo`                                                                                                                                                        | パブリック リポジトリへのアクセスを制限します。 これには、コード、コミットステータス、リポジトリプロジェクト、コラボレータ、パブリックリポジトリ及びOrganizationのデプロイメントステータスへの読み書きアクセスが含まれます。 パブリック リポジトリにスターを付けるためにも必要です。                                                                                                                                                                                             |
|  `repo:invite`                                                                                                                                                        | リポジトリで共同作業を行うための招待に対する承諾/拒否機能を許可します。 このスコープは、コードへのアクセスを許可\_せずに\_、他のユーザーまたはサービスに招待へのアクセスを許可する場合にのみ必要です。                                                                                                                                                                                                                                         |
|  `security_events`                                                                                                                                                    | 以下を許可します: <br/>                                                                                                                                                                                                                                                                                                                                |
| \[                                                                                                                                                                    |                                                                                                                                                                                                                                                                                                                                                |
| code scanning API]\(/rest/code-scanning) のセキュリティ イベントへの読み取りと書き込みアクセス <br/> このスコープは、コードへのアクセスを許可\_せずに\_、他のユーザーまたはサービスにセキュリティ イベントへのアクセスを許可する場合にのみ必要です。                 |                                                                                                                                                                                                                                                                                                                                                |
| **`admin:repo_hook`**                                                                                                                                                 |                                                                                                                                                                                                                                                                                                                                                |
| public、private、または internal リポジトリのリポジトリ フックへの読み取り、書き込み、ping、および削除アクセスを許可します。                                                                                          |                                                                                                                                                                                                                                                                                                                                                |
| `repo` および `public_repo` スコープは、リポジトリ フックを含むリポジトリに対するフル アクセスを許可します。 アクセスをリポジトリ フックのみに限定するには、`admin:repo_hook` スコープを使用してください。                                           |                                                                                                                                                                                                                                                                                                                                                |
|  `write:repo_hook`                                                                                                                                                    |                                                                                                                                                                                                                                                                                                                                                |
| リポジトリ内のフックへの読み取り、書き込み、および ping アクセス権を付与します。                                                                                                                           |                                                                                                                                                                                                                                                                                                                                                |
|  `read:repo_hook`                                                                                                                                                     |                                                                                                                                                                                                                                                                                                                                                |
| public、private、または internal リポジトリ内のフックに対する読み取りおよび ping へのアクセスを許可します。                                                                                                  |                                                                                                                                                                                                                                                                                                                                                |
| **`admin:org`**                                                                                                                                                       | 組織とそのチーム、プロジェクト、メンバーシップを全面的に管理できます。                                                                                                                                                                                                                                                                                                            |
|  `write:org`                                                                                                                                                          | 組織のメンバーシップおよび組織のプロジェクトへの読み書き権限。                                                                                                                                                                                                                                                                                                                |
|  `read:org`                                                                                                                                                           | 組織のメンバーシップ、組織のプロジェクト、チームのメンバーシップへの読み取り専用アクセス。                                                                                                                                                                                                                                                                                                  |
| **`admin:public_key`**                                                                                                                                                | 公開鍵を全面的に管理できます。                                                                                                                                                                                                                                                                                                                                |
|  `write:public_key`                                                                                                                                                   | 公開鍵の作成、一覧表示、詳細の表示ができます。                                                                                                                                                                                                                                                                                                                        |
|  `read:public_key`                                                                                                                                                    | 公開鍵の一覧表示と詳細の表示ができます。                                                                                                                                                                                                                                                                                                                           |
| **`admin:org_hook`**                                                                                                                                                  | 組織フックへの読み取り、書き込み、削除、そして ping アクセスを許可します。                                                                                                                                                                                                                                                                                                       |
| **メモ：** OAuth トークンは、 OAuth appによって作成された組織のフックに対してのみ、これらのアクションを実行できます。                                                                                                 |                                                                                                                                                                                                                                                                                                                                                |
| Personal access tokens は、ユーザーによって作成された組織フックに対してのみこれらのアクションを実行できます。                                                                                                    |                                                                                                                                                                                                                                                                                                                                                |
| **`gist`**                                                                                                                                                            | gist への書き込みアクセスを許可します。                                                                                                                                                                                                                                                                                                                         |
| **`notifications`**                                                                                                                                                   | 以下を許可します: <br/>ユーザーの通知に対する読み取りアクセス<br/> スレッドへのアクセスを既読としてマークする <br/>リポジトリに対するウォッチおよびウォッチ解除アクセス<br/> スレッドのサブスクリプションに対する読み取り、書き込み、削除アクセス。                                                                                                                                                                                                         |
| **`user`**                                                                                                                                                            | プロファイル情報のみへの読み取り/書き込みアクセスを許可します。 このスコープには `user:email` と `user:follow` が含まれることにご注意ください。                                                                                                                                                                                                                                                        |
|  `read:user`                                                                                                                                                          | ユーザーのプロファイル データへの読み取りアクセスを許可します。                                                                                                                                                                                                                                                                                                               |
|  `user:email`                                                                                                                                                         | ユーザーのメール アドレスへの読み取りアクセスを許可します。                                                                                                                                                                                                                                                                                                                 |
|  `user:follow`                                                                                                                                                        | 他のユーザーをフォローまたはフォロー解除するためのアクセス権を付与します。                                                                                                                                                                                                                                                                                                          |
| **`delete_repo`**                                                                                                                                                     | 管理可能なリポジトリの削除アクセスを許可します。                                                                                                                                                                                                                                                                                                                       |
| **`write:packages`**                                                                                                                                                  |                                                                                                                                                                                                                                                                                                                                                |
| GitHub Packagesでパッケージをアップロードまたは発行するためのアクセス権を付与します。 詳しくは、「[パッケージの公開](/ja/enterprise-server@3.22/packages/learn-github-packages/publishing-a-package)」をご覧ください。          |                                                                                                                                                                                                                                                                                                                                                |
| **`read:packages`**                                                                                                                                                   |                                                                                                                                                                                                                                                                                                                                                |
| GitHub Packagesからパッケージをダウンロードまたはインストールするためのアクセス権を付与します。 詳しくは、「[パッケージのインストール](/ja/enterprise-server@3.22/packages/learn-github-packages/installing-a-package)」をご覧ください。 |                                                                                                                                                                                                                                                                                                                                                |
| **`delete:packages`**                                                                                                                                                 |                                                                                                                                                                                                                                                                                                                                                |
| GitHub Packagesからパッケージを削除するアクセス権を付与します。 詳しくは、「[パッケージを削除および復元する](/ja/enterprise-server@3.22/packages/learn-github-packages/deleting-and-restoring-a-package)」をご覧ください。  |                                                                                                                                                                                                                                                                                                                                                |
| **`admin:gpg_key`**                                                                                                                                                   | GPG キーを完全に管理できます。                                                                                                                                                                                                                                                                                                                              |
|  `write:gpg_key`                                                                                                                                                      | GPG キーの作成、一覧表示、詳細の表示ができます。                                                                                                                                                                                                                                                                                                                     |
|  `read:gpg_key`                                                                                                                                                       | GPG キーの詳細を一覧表示および表示します。                                                                                                                                                                                                                                                                                                                        |
| **`workflow`**                                                                                                                                                        | ワークフロー ファイルを追加および更新する機能 GitHub Actions 付与します。 同じリポジトリ内の他のブランチに同じファイル（パスと内容が同じ）が存在する場合、ワークフローファイルはこのスコープがなくてもコミットできます。 ワークフロー ファイルは、スコープのセットが異なる可能性がある `GITHUB_TOKEN` を公開する場合があります。 詳細については、 [AUTOTITLE を](/ja/enterprise-server@3.22/actions/tutorials/authenticate-with-github_token#modifying-the-permissions-for-the-github_token)参照してください。 |
| **`admin:enterprise`**                                                                                                                                                | エンタープライズ機能を完全に制御できます。 詳細については、GraphQL API ドキュメントの「[Enterpriseアカウントの管理](/ja/enterprise-server@3.22/graphql/guides/managing-enterprise-accounts)」を参照してください。<br><br>                                                                                                                                                                              |
| `manage_runners:enterprise`、`manage_billing:enterprise`、および `read:enterprise` が含まれます。                                                                                 |                                                                                                                                                                                                                                                                                                                                                |
|  `manage_runners:enterprise`                                                                                                                                          | エンタープライズ内のセルフホステッド ランナーを完全に制御できます。 詳しくは、「[セルフホステッド ランナー](/ja/enterprise-server@3.22/actions/concepts/runners/self-hosted-runners)」をご覧ください。                                                                                                                                                                                                     |
|  `manage_billing:enterprise`                                                                                                                                          | エンタープライズの請求データの読み取りと書き込みを行います。 詳しくは、「[請求の REST API エンドポイント](/ja/enterprise-server@3.22/rest/billing)」をご覧ください。                                                                                                                                                                                                                                  |
|  `read:enterprise`                                                                                                                                                    | エンタープライズ プロファイルのすべてのデータの読み取りを行います。 エンタープライズ メンバーまたは組織のプロファイル データは含まれません。                                                                                                                                                                                                                                                                       |
| **`read:audit_log`**                                                                                                                                                  | 監査ログ データを読み取る。                                                                                                                                                                                                                                                                                                                                 |

> \[!NOTE]
> OAuth appは、初期承認要求でスコープを要求できます。 複数のスコープを指定するには、スコープを空白で区切ります (`%20` を使用)。
>
> ```text
> https://github.com/login/oauth/authorize?
>   client_id=...&
>   scope=user%20repo_deployment
> ```

## リクエストされたスコープと許可されたスコープ

`scope` 属性は、トークンに付随する、ユーザーによって許可されたスコープを一覧表示します。 通常、これらのスコープはリクエストされたものと同じになります。
しかし、ユーザーはスコープを編集して、実質的には元々要求されたアクセスよりも少ないアクセスをアプリケーションに対して許可できます。 また、ユーザーは OAuth フローが完了した後にトークンのスコープを編集することもできます。
この可能性を認識しておき、それに応じたアプリケーションの動作の調整が必要になります。

元々要求されたアクセスよりも少ないアクセスをユーザーが許可した場合のエラー ケースを処理することが重要です。 たとえば、アプリケーションはユーザーに対して、機能の低下や一部のアクションが実行できないことを警告したり、知らせたりすることができます。

また、アプリケーションはいつでもユーザーをもう一度フローに戻して追加の権限を得ようとすることができますが、ユーザーは常に拒否できることを忘れないようにしてください。

変更できるトークンのスコープの扱いに関するヒントが提供されている[認証の基本ガイド](/ja/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app)をご確認ください。

## 正規化されたスコープ

複数のスコープが要求された場合、トークンは正規化されたスコープのリストとともに保存され、要求された別のスコープに暗黙的に含まれているスコープは破棄されます。 たとえば `user,gist,user:email` を要求すると、トークンには `user` と `gist` スコープのみが含まれます。これは、`user:email` スコープで許可されるアクセスは `user` スコープに含まれているからです。