まくろぐ

GitHub GraphQL クエリ例: イシュー情報を取得する (search)

更新:
作成:

イシュー情報の取得方法

イシュー情報を取得する方法は次のような方法があります。

  • ユーザーからたどる方法viewer/user クエリUser オブジェクト を取得し、そのユーザーに関連するイシュー(issues フィールド)を参照する方法
  • リポジトリからたどる方法repository クエリRepository オブジェクト を取得し、そのリポジトリ内のイシュー(issues フィールド)を参照する方法
  • ダイレクトに検索する方法search クエリ でもろもろの検索条件(リポジトリ名、タイプなど)を使ってダイレクトに検索する方法

search クエリによる検索はとても柔軟で、様々な条件(query パラメータ)を指定してイシューを検索することができます。 query パラメータには、GitHub の Issues ページの検索窓に入力できる is:issue is:open といった文字列で、下記のサイトに詳細仕様が記述されています。

あるリポジトリのイシューの一覧を取得する

次の GraphQL クエリでは、myorg/myrepo リポジトリの最新 5 件のイシュー情報を取得しています。

GraphQL クエリ
query {
  search(type: ISSUE, query: "repo:myorg/myrepo is:issue", last: 100) {
    issueCount
    nodes {
      ... on Issue {
        id
        number
        title
        closed
        url
        author { login }
        assignees(first: 100) {
          nodes { login name email }
        }
        labels(first: 100) {
          nodes { name color }
        }
      }
    }
  }
}

search クエリはそのパラメータの意味を理解するのが重要です。

  • type: ISSUE
    • 検索対象を示す必須パラメータで、ISSUE / REPOSITORY / USER のいずれかを指定する必要があります。ここでは、イシューやプルリクエストの情報を検索することを示しています(ISSUE はプルリクエストの情報まで含むことに注意)。
  • query: "repo:myorg/myrepo is:issue"
  • last: 100
    • 最新の 100 件までのイシュー情報を取得します。100 件を超えるデータを取得するときはページネーション処理により、複数回のクエリ実行が必要です。

その他のクエリ方法いろいろ

あるマイルストーンが設定されたイシューを取得する

search(type: ISSUE, last: 100,
  query: "repo:myorg/myrepo milestone: \"Milestone #123\" is:issue")

この例では、myorg/myrepo リポジトリから、マイルストーン名 Milestone #123 が設定されたイシューの一覧を取得しています。 マイルストーン名にスペースを含んでいる場合は、上記のようにエスケープされたダブルクォートでマイルストーン名を囲む必要があります。

関連記事

まくろぐ
サイトマップまくへのメッセージ