Skip to main content

REST API を使用した作業の開始

GitHub REST API の使用方法について学習します。

GitHub REST API について

この記事では、GitHub CLI、JavaScript、または cURL を使う GitHub REST API の使用方法について説明します。 クイックスタート ガイドについては、「GitHub REST API のクイックスタート」を参照してください。

REST API への要求を行うときは、HTTP メソッドとパスを指定します。 さらに、要求ヘッダーとパス、クエリ、または本文のパラメーターを指定することもできます。 API では、応答状態コードと応答ヘッダー、また場合によっては応答本文が返されます。

REST API リファレンス ドキュメントでは、すべての操作の HTTP メソッド、パス、およびパラメーターについて説明します。 また、各操作の要求と応答の例も表示されます。 詳しくは、REST のリファレンス ドキュメントをご覧ください。

GitHub の API について詳しくは、「GitHub の API について」を参照してください。

要求を行う

要求を行うには、まず HTTP メソッドと、使用する操作のパスを見つけます。 たとえば、"Octocat の取得" 操作では、GET メソッドと /octocat パスが使用されます。 この操作の完全なリファレンス ドキュメントについては、「Octocat の取得」を参照してください。

: GitHub CLI の例のコマンドを使用するには、GitHub CLI をインストールする必要があります。 インストールの手順については、GitHub CLI リポジトリを参照してください。

まだ GitHub CLI に対して認証されていない場合は、要求を行う前に gh auth login サブコマンドを使用して認証する必要があります。 詳しくは、「認証」を参照してください。

GitHub CLI を使用して要求を行うには、パスと共に api サブコマンドを使用します。 メソッドを指定するには、--method または -X フラグを使用します。

gh api /octocat --method GET

: JavaScript の例で使用されている Octokit.js ライブラリを使うには、octokit をインストールしてインポートする必要があります。 詳しくは、Octokit.js の README を参照してください。

JavaScript を使用して要求を行うために、Octokit.js を使用できます。 詳しくは、Octokit.js の README を参照してください。

まず、Octokit のインスタンスを作成します。ベース URL を http(s)://HOSTNAME/api/v3 に設定します。 [hostname] を your GitHub Enterprise Server instanceの名前に置き換えます。

const octokit = new Octokit({ 
  baseUrl: "http(s)://HOSTNAME/api/v3",
});

その後、request メソッドを使用して要求を行います。 HTTP メソッドとパスを最初の引数として渡します。

await octokit.request("GET /octocat", {});

パスの前に GitHub REST API のベース URL http(s)://HOSTNAME/api/v3 を付加し、完全な URL (http(s)://HOSTNAME/api/v3/octocat) を取得します。[hostname] は、your GitHub Enterprise Server instance の名前に置き換えます。

コマンド ラインで curl コマンドを使用します。 --request または -X フラグを使用し、その後に HTTP メソッドを指定します。 --url フラグを使用し、その後に完全な URL を指定します。

curl --request GET \
--url "https://api.github.com/octocat"

: "コマンドが見つかりません: curl" のようなメッセージが表示される場合は、cURL をダウンロードしてインストールする必要があることがあります。 詳しくは、cURL プロジェクトのダウンロード ページを参照してください。

認証、パラメーターの送信、応答の使用方法について学習する場合は、引き続きお読みください。

認証

多くの操作では、認証が必要であるか、認証されている場合は追加情報が返されます。 また、認証されると、1 時間あたりにさらに多くの要求を行うことができます。

一部の REST API 操作には認証なしでアクセスできますが、api サブコマンドを使用するには、GitHub CLI に対して認証を行う必要があります。

トークンについて

トークンを追加することで、要求を認証できます。

個人用に GitHub REST API を使用する場合は、personal access tokenを作成できます。 この記事で使用する REST API 操作には、personal access tokens。 その他の操作には、異なるスコープ。 personal access tokenの作成について詳しくは、「personal access tokenの作成」をご覧ください。

Organization または他のユーザーの代わりに API を使用する場合、GitHub では、GitHub App の使用が推奨されます。 操作が GitHub Apps で使用できる場合、その操作の REST リファレンス ドキュメントには "GitHub Apps で動作する" と示されます。 この記事で使用される REST API 操作には、GitHub Apps の issues の読み取りおよび書き込みアクセス許可が必要です。 その他の操作では、異なるアクセス許可が必要な場合があります。 詳しくは、「GitHub App を作成する」、「GitHub Apps による認証」、「GitHub アプリのユーザーを特定および認可する」を参照してください。

GitHub Actions ワークフローで API を使用する場合、GitHub では、トークンを作成するのではなく、組み込み GITHUB_TOKEN で認証することが推奨されます。 permissions キーを使用して、GITHUB_TOKEN へのアクセス許可を付与できます。 詳しくは、「自動トークン認証」を参照してください。

認証の例

GitHub CLI では、アクセス トークンを事前に作成する必要はありません。 auth login サブコマンドを使用して、GitHub CLI に対する認証を行います。

gh auth login

--scopes フラグを使用して、必要なスコープを指定できます。 作成したトークンで認証する場合は、--with-token フラグを使用できます。 詳しくは、GitHub CLI auth login ドキュメントを参照してください。

警告: アクセス トークンは、パスワードと同様の扱いとしてください。

トークンを安全な状態に保つために、トークンをシークレットとして格納し、GitHub Actions を使用してスクリプトを実行できます。 詳細については、「暗号化されたシークレット」を参照してください。

これらのオプションが使用できない場合は、1Password CLI などの別のサービスを使用してトークンを安全に格納することを検討してください。

Octokit.js ライブラリで認証するには、Octokit のインスタンスの作成時にトークンを渡すことができます。 YOUR-TOKEN をお使いのトークンに置き換えます。[hostname] をお使いの your GitHub Enterprise Server instanceの名前に置き換えます。

const octokit = new Octokit({ 
  baseUrl: "http(s)://HOSTNAME/api/v3",
  auth: 'YOUR-TOKEN',
});

警告: アクセス トークンはパスワードと同様に扱ってください。

アカウントを安全な状態に保てるように、cURL の代わりに GitHub CLI を使用できます。 GitHub CLI で自動的に認証が行われます。 詳しくは、このページの GitHub CLI バージョンを参照してください。

これらのオプションが使用できない場合は、1Password CLI などの別のサービスを使用してトークンを安全に格納することを検討してください。

cURL では、トークンを含む Authorization ヘッダーを送信します。 YOUR-TOKEN は実際のトークンに置き換えてください。

curl --request GET \
--url "https://api.github.com/octocat" \
--header "Authorization: Bearer YOUR-TOKEN"

注: ほとんどの場合は、Authorization: Bearer または Authorization: token を使用してトークンを渡すことができます。 ただし、JSON Web トークン (JWT) を渡す場合は、Authorization: Bearer を使用する必要があります。

GitHub Actions の認証例

run キーワードを使用して、GitHub Actions ワークフローで GitHub CLI コマンドを実行することもできます。 詳細については、「GitHub Actions のワークフロー構文」を参照してください。

gh auth login コマンドを使用するのでなく、トークンを GH_TOKEN という環境変数として渡します。 GitHub では、トークンを作成するのではなく、組み込みの GITHUB_TOKEN で認証することが推奨されます。 これができない場合は、ご利用のトークンをシークレットとして格納し、次の例で GITHUB_TOKEN を自分のシークレットの名前に置き換えます。 GITHUB_TOKEN について詳しくは、「自動トークン認証」を参照してください。 シークレットについて詳しくは、「暗号化されたシークレット」を参照してください。

jobs:
  use_api:
    runs-on: ubuntu-latest
    permissions: {}
    steps:
      - env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh api /octocat

run キーワードを使用して、GitHub Actions ワークフローで JavaScript スクリプトを実行することもできます。 詳細については、「GitHub Actions のワークフロー構文」を参照してください。

GitHub では、トークンを作成するのではなく、組み込みの GITHUB_TOKEN で認証することが推奨されます。 これができない場合は、ご利用のトークンをシークレットとして格納し、次の例で GITHUB_TOKEN を自分のシークレットの名前に置き換えます。 GITHUB_TOKEN について詳しくは、「自動トークン認証」を参照してください。 シークレットについて詳しくは、「暗号化されたシークレット」を参照してください。

次のワークフロー例を参照してください。

  1. リポジトリのコンテンツをチェックアウトする
  2. Node.js を設定する
  3. octokit をインストールする
  4. GITHUB_TOKEN の値を、TOKEN と呼ばれる環境変数として格納し、.github/actions-scripts/use-the-api.mjs を実行する。これにより、その環境変数に process.env.TOKEN としてアクセスできます。

ワークフローの例:

on:
  workflow_dispatch:
jobs:
  use_api_via_script:
    runs-on: ubuntu-latest
    permissions: {}
    steps:
      - name: Check out repo content
        uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: '16.17.0'
          cache: npm

      - name: Install dependencies
        run: npm install octokit

      - name: Run script
        env:
          TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          node .github/actions-scripts/use-the-api.mjs

ファイル パス .github/actions-scripts/use-the-api.mjs を含む JavaScript スクリプトの例:

import { Octokit } from "octokit";

const octokit = new Octokit({ 
  baseUrl: "http(s)://HOSTNAME/api/v3",
  auth: process.env.TOKEN,
});

await octokit.request("GET /octocat", {});

スクリプトを別のファイルに格納し、ワークフローからスクリプトを実行するのではなく、actions/github-script アクションを使用してスクリプトを実行できます。 詳しくは、actions/github-script README をご覧ください。

jobs:
  use_api_via_script:
    runs-on: ubuntu-latest
    permissions: {}
    steps:
      - uses: actions/github-script@v6
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            await github.request('GET /octocat', {})

run キーワードを使用して、GitHub Actions ワークフローで cURL コマンドを実行することもできます。 詳細については、「GitHub Actions のワークフロー構文」を参照してください。

GitHub では、トークンを作成するのではなく、組み込みの GITHUB_TOKEN で認証することが推奨されます。 これができない場合は、ご利用のトークンをシークレットとして格納し、次の例で GITHUB_TOKEN を自分のシークレットの名前に置き換えます。 GITHUB_TOKEN について詳しくは、「自動トークン認証」を参照してください。 シークレットについて詳しくは、「暗号化されたシークレット」を参照してください。

jobs:
  use_api:
    runs-on: ubuntu-latest
    permissions: {}
    steps:
      - env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          curl --request GET \
          --url "https://api.github.com/octocat" \
          --header "Authorization: Bearer $GH_TOKEN"

ヘッダーの使用

ほとんどの操作では、値が application/vnd.github+jsonAccept ヘッダーを渡す必要があることを指定します。 他の操作では、別の Accept ヘッダーまたは追加のヘッダーを送信する必要があることを指定する場合があります。

GitHub CLI でヘッダーを送信するには、--header または -H フラグを使用し、その後にヘッダーを key: value 形式で指定します。

gh api --header 'Accept: application/vnd.github+json' --method GET /octocat

Octokit.js ライブラリでは自動的に Accept: application/vnd.github+json ヘッダーが渡されます。 追加のヘッダーまたは別の Accept ヘッダーを渡すには、headers メソッドに 2 番目の引数として渡されるオブジェクトに request プロパティを追加します。 headers プロパティの値は、キーがヘッダー名で値がヘッダー値のオブジェクトです。 たとえば、値が text/plaincontent-type ヘッダーを送信する場合は次のようになります。

await octokit.request("GET /octocat", {
  headers: {
    "content-type": "text/plain",
  },
});

cURL でヘッダーを送信するには、--header または -H フラグを使用し、その後にヘッダーを key: value 形式で指定します。

curl --request GET \
--url "https://api.github.com/octocat" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN"

パス パラメーターの使用

パス パラメーターでは操作パスを変更します。 たとえば、"リポジトリの issue の一覧表示" パスは /repos/{owner}/{repo}/issues となります。 中かっこ {} は、指定する必要があるパス パラメーターを示します。 この場合は、リポジトリの所有者と名前を指定する必要があります。 この操作のリファレンス ドキュメントについては、「リポジトリの issue の一覧表示」を参照してください。

注: このコマンドを your GitHub Enterprise Server instanceで動作させるには、octocat/Spoon-Knife を、your GitHub Enterprise Server instanceによって所有されているリポジトリに置き換えます。 それ以外の場合は、gh auth login コマンドを再実行して、your GitHub Enterprise Server instanceではなく GitHub.com に対して認証を行います。

octocat/Spoon-Knife リポジトリから issue を取得するには、{owner}octocatに、{repo}Spoon-Knife に置き換えます。

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues

注: この例を your GitHub Enterprise Server instanceで動作させるには、octocat/Spoon-Knife を、your GitHub Enterprise Server instance によって所有されているリポジトリに置き換えます。 それ以外の場合は、新しい Octokit インスタンスを作成、baseURL は指定しません。

Octokit.js で要求を行うと、パス パラメーターを含むすべてのパラメーターが、request メソッドの 2 番目の引数としてオブジェクトで渡されます。 octocat/Spoon-Knife リポジトリから issue を取得するには、owneroctocat として、repoSpoon-Knife として指定します。

await octokit.request("GET /repos/{owner}/{repo}/issues", {
  owner: "octocat",
  repo: "Spoon-Knife"
});

octocat/Spoon-Knife リポジトリから issue を取得するには、{owner}octocatに、{repo}Spoon-Knife に置き換えます。 完全なパスを構築するには、GitHub REST API のベース URL https://api.github.com を先頭に付加します (https://api.github.com/repos/octocat/Spoon-Knife/issues)。

注: GitHub.com の代わりに your GitHub Enterprise Server instance を使用する場合は、https://api.github.com の代わりに http(s)://HOSTNAME/api/v3に使用し、[hostname] を your GitHub Enterprise Server instanceの名前に置き換えます。 octocat/Spoon-Knife を、your GitHub Enterprise Server instanceによって所有されているリポジトリに置き換えます。

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN"

この操作では、issue のリストと各 issue に関するデータが返されます。 応答の使用について詳しくは、「応答の使用」セクションを参照してください。

クエリ パラメーターの使用

クエリ パラメーターを使用すると、要求に対して返されるデータを制御できます。 たとえば、クエリ パラメーターを使用すると、応答のページ分割時に返される項目の数を指定できます。

既定では、"リポジトリの issue の一覧表示" 操作で 30 個の issue が返され、作成日の降順で並べ替えられます。 per_page パラメーターを使用すると、30 個ではなく 2 個の issue を返すことができます。 sort パラメーターを使用すると、作成日ではなく、最終更新日で issue を並べ替えることができます。 direction パラメーターを使用すると、降順ではなく昇順で結果を並べ替えることができます。

GitHub CLI の場合は、-F フラグを使用して、数値、ブール値、または null 値のパラメーターを渡します。 文字列パラメーターを渡すには、-f を使用します。

: GitHub CLI では現在、配列のパラメーターは受け入れられていません。 詳しくは、こちらの issue を参照してください。

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues -F per_page=2 -f sort=updated -f direction=asc

Octokit.js で要求を行うと、クエリ パラメーターを含むすべてのパラメーターが、request メソッドの 2 番目の引数としてオブジェクトで渡されます。

await octokit.request("GET /repos/{owner}/{repo}/issues", {
  owner: "octocat",
  repo: "Spoon-Knife",
  per_page: 2,
  sort: "updated",
  direction: "asc",
});

cURL の場合は、パスの末尾に ? を追加してから、クエリ パラメーターの名前と値を parameter_name=value 形式で付加します。 複数のクエリ パラメーターは & で区切ります。

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2&sort=updated&direction=asc" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN"

この操作では、issue のリストと各 issue に関するデータが返されます。 応答の使用について詳しくは、「応答の使用」セクションを参照してください。

本文パラメーターの使用

本文パラメーターを使用すると、API に追加のデータを渡すことができます。 たとえば、"issue の作成" 操作では、新しい issue のタイトルを指定する必要があります。 また、issue 本文に配置するテキストなど、他の情報を指定することもできます。 この操作の完全なリファレンス ドキュメントについては、「issue の作成」を参照してください。

"issue の作成" 操作では、上記の例の "リポジトリの issue の一覧表示" 操作と同じパスが使用されますが、GET メソッドではなく POST メソッドが使用されます。

GitHub CLI の場合は、-F フラグを使用して、数値、ブール値、または null 値のパラメーターを渡します。 文字列パラメーターを渡すには、-f を使用します。

: GitHub CLI では現在、配列のパラメーターは受け入れられていません。 詳しくは、こちらの issue を参照してください。

gh api --header 'Accept: application/vnd.github+json' --method POST /repos/octocat/Spoon-Knife/issues -f title="Created with the REST API" -f body="This is a test issue created by the REST API"

Octokit.js で要求を行うと、本文パラメーターを含むすべてのパラメーターが、request メソッドの 2 番目の引数としてオブジェクトで渡されます。

await octokit.request("POST /repos/{owner}/{repo}/issues", {
  owner: "octocat",
  repo: "Spoon-Knife",
  title: "Created with the REST API",
  body: "This is a test issue created by the REST API",
});

cURL の場合は、--data フラグを使用して JSON オブジェクトで本文パラメーターを渡します。

curl --request POST \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" \
--data '{
  "title": "Created with the REST API",
  "body": "This is a test issue created by the REST API"
}'

この操作によって issue が作成され、新しい issue に関するデータが返されます。 応答で、issue の html_url を見つけ、ブラウザーでその issue に移動します。 応答の使用について詳しくは、「応答の使用」セクションを参照してください。

応答の使用

応答コードとヘッダーについて

すべての要求で、応答の成功を示す HTTP 状態コードが返されます。 応答コードについて詳しくは、MDN HTTP 応答状態コードに関するドキュメントを参照してください。

さらに、応答には、応答の詳細を示すヘッダーが含まれます。 X- または x- で始まるものは、GitHub のカスタム ヘッダーです。 たとえば、x-ratelimit-remainingx-ratelimit-reset ヘッダーは、一定期間に行うことができる要求の数を示します。

状態コードとヘッダーを表示するには、要求を送信するときに --include または --i フラグを使用します。

たとえば、次の要求があります。

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues -F per_page=2 --include

次のような応答コードとヘッダーが返されます。

HTTP/2.0 200 OK
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
Cache-Control: private, max-age=60, s-maxage=60
Content-Security-Policy: default-src 'none'
Content-Type: application/json; charset=utf-8
Date: Thu, 04 Aug 2022 19:56:41 GMT
Etag: W/"a63dfbcfdb73621e9d2e89551edcf9856731ced534bd7f1e114a5da1f5f73418"
Link: ; rel="next", ; rel="last"
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
Server: GitHub.com
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
Vary: Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With
X-Accepted-Oauth-Scopes: repo
X-Content-Type-Options: nosniff
X-Frame-Options: deny
X-Github-Api-Version-Selected: 2022-08-09
X-Github-Media-Type: github.v3; format=json
X-Github-Request-Id: 1C73:26D4:E2E500:1EF78F4:62EC2479
X-Oauth-Client-Id: 178c6fc778ccc68e1d6a
X-Oauth-Scopes: gist, read:org, repo, workflow
X-Ratelimit-Limit: 15000
X-Ratelimit-Remaining: 14996
X-Ratelimit-Reset: 1659645499
X-Ratelimit-Resource: core
X-Ratelimit-Used: 4
X-Xss-Protection: 0

この例では、応答コードは 200 で、要求が成功したことを示します。

Octokit.js で要求を行うと、request メソッドでは promise が返されます。 要求が成功した場合、promise は、応答のHTTP 状態コード (status) と応答ヘッダー (headers) を含むオブジェクトに解決されます。 エラーが発生した場合、promise は、応答のHTTP 状態コード (status) と応答ヘッダー (response.headers) を含むオブジェクトに解決されます。

try/catch ブロックを使用して、エラーが発生した場合にそれをキャッチできます。 たとえば、次のスクリプトの要求が成功した場合、そのスクリプトでは状態コードと x-ratelimit-remaining ヘッダーの値がログに記録されます。 要求が成功しなかった場合、スクリプトでは状態コード、x-ratelimit-remaining ヘッダーの値、およびエラー メッセージがログに記録されます。

try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "octocat",
    repo: "Spoon-Knife",
    per_page: 2,
  });

  console.log(`Success! Status: ${result.status}. Rate limit remaining: ${result.headers["x-ratelimit-remaining"]}`)

} catch (error) {
  console.log(`Error! Status: ${error.status}. Rate limit remaining: ${error.headers["x-ratelimit-remaining"]}. Message: ${error.response.data.message}`)
}

状態コードとヘッダーを表示するには、要求を送信するときに --include または --i フラグを使用します。

たとえば、次の要求があります。

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" \
--include

次のような応答コードとヘッダーが返されます。

HTTP/2 200
server: GitHub.com
date: Thu, 04 Aug 2022 20:07:51 GMT
content-type: application/json; charset=utf-8
cache-control: public, max-age=60, s-maxage=60
vary: Accept, Accept-Encoding, Accept, X-Requested-With
etag: W/"7fceb7e8c958d3ec4d02524b042578dcc7b282192e6c939070f4a70390962e18"
x-github-media-type: github.v3; format=json
link: ; rel="next", ; rel="last"
access-control-expose-headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'
x-ratelimit-limit: 15000
x-ratelimit-remaining: 14996
x-ratelimit-reset: 1659645535
x-ratelimit-resource: core
x-ratelimit-used: 4
accept-ranges: bytes
content-length: 4936
x-github-request-id: 14E0:4BC6:F1B8BA:208E317:62EC2715

この例では、応答コードは 200 で、要求が成功したことを示します。

応答本文について

多くの操作で応答本文が返されます。 特に指定しない限り、応答本文は JSON 形式となります。 たとえば、この要求では、各 issue に関するデータと共に issue のリストが返されます。

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues -F per_page=2
await octokit.request("GET /repos/{owner}/{repo}/issues", {
  owner: "octocat",
  repo: "Spoon-Knife",
  per_page: 2,
});
curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN"

必要な情報を指定する GraphQL API とは異なり、REST API では通常、必要以上の情報が返されます。 必要に応じて、応答を解析して特定の情報を引き出すことができます。

たとえば、> を使用して、応答をファイルにリダイレクトできます。

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues -F per_page=2 > data.json

その後、jq を使用して、各 issue のタイトルと作成者 ID を取得できます。

jq '.[] | {title: .title, authorID: .user.id}' data.json

前の 2 つのコマンドでは次のようなものが返されます。

{
  "title": "Update index.html",
  "authorID": 10701255
}
{
  "title": "Edit index file",
  "authorID": 53709285
}

jq について詳しくは、jq のドキュメントjq play を参照してください。

たとえば、各 issue のタイトルと作成者 ID を取得できます。

try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "octocat",
    repo: "Spoon-Knife",
    per_page: 2,
  });

  const titleAndAuthor = result.data.map(issue => {title: issue.title, authorID: issue.user.id})

  console.log(titleAndAuthor)

} catch (error) {
  console.log(`Error! Status: ${error.status}. Message: ${error.response.data.message}`)
}

たとえば、> を使用して、応答をファイルにリダイレクトできます。

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" > data.json

その後、jq を使用して、各 issue のタイトルと作成者 ID を取得できます。

jq '.[] | {title: .title, authorID: .user.id}' data.json

前の 2 つのコマンドでは次のようなものが返されます。

{
  "title": "Update index.html",
  "authorID": 10701255
}
{
  "title": "Edit index file",
  "authorID": 53709285
}

jq について詳しくは、jq のドキュメントjq play を参照してください。

次の手順

この記事では、リポジトリの issue を一覧表示して作成する方法について説明しました。 さらに練習する場合は、issue にコメントを付けたり、issue のタイトルを編集したり、issue を閉じてみたりしてください。 これらの操作について詳しくは、「issue コメントの作成」と「issue の更新」を参照してください。

使用できる操作について詳しくは、REST リファレンス ドキュメントを参照してください。