まくろぐ

GitHub GraphQL クエリ例: 組織の情報を取得する (organization)

更新:
作成:

GitHub GraphQL API で指定した組織の情報を(ここでは github organization)の情報を取得には、organization クエリ を使用します。 organization クエリには、login パラメーターで組織名を渡します。

organization クエリが返す Organization オブジェクト を参照すると、そこに所属する メンバーの一覧チームの一覧リポジトリの一覧 などを取得することができます。

ある組織に所属するユーザー情報を取得する (Organization.membersWithRole)

Organization オブジェクトの membersWithRole フィールドは OrganizationMemberConnection オブジェクトを保持しており、この nodes を参照することで、組織に所属するメンバーの一覧を取得できます。

GraphQL クエリ
query {
  organization(login: "github") {
    name
    description
    url
    membersWithRole(first: 3) {
      nodes {
        name
        email
        updatedAt
      }
    }
  }
}
実行結果
{
  "data": {
    "organization": {
      "name": "GitHub",
      "description": "How people build software.",
      "url": "https://github.com/github",
      "membersWithRole": {
        "nodes": [
          {
            "name": "Josh Nichols",
            "email": "technicalpickles@github.com",
            "updatedAt": "2020-09-09T11:22:35Z"
          },
          {
            "name": "Matt Todd",
            "email": "matt@github.com",
            "updatedAt": "2020-09-02T21:54:56Z"
          },
          {
            "name": "Pat Nakajima",
            "email": "patnakajima@gmail.com",
            "updatedAt": "2020-09-04T21:45:37Z"
          }
        ]
      }
    }
  }
}

ある組織のリポジトリの一覧を取得する (Organization.repositories)

Organization オブジェクトの repositories フィールドを参照することで、その組織に作成されたリポジトリの一覧を取得することができます。

GraphQL クエリ
query {
  organization(login: "github") {
    name
    description
    url
    repositories(first: 3) {
      nodes {
        name
        url
      }
    }
  }
}
実行結果
{
  "data": {
    "organization": {
      "name": "GitHub",
      "description": "How people build software.",
      "url": "https://github.com/github",
      "repositories": {
        "nodes": [
          {
            "name": "media",
            "url": "https://github.com/github/media"
          },
          {
            "name": "albino",
            "url": "https://github.com/github/albino"
          },
          {
            "name": "hubahuba",
            "url": "https://github.com/github/hubahuba"
          }
        ]
      }
    }
  }
}

取得される各リポジトリの情報は、Repository オブジェクト として表現されています。

ここでは、組織内のリポジトリのリストを取得する方法を示しましたが、組織名(ユーザー名)とリポジトリ名があらかじめ分かっている場合は、repository クエリを使って、直接そのリポジトリの情報を取得することができます。

関連記事

GitHub GraphQL クエリ例: リポジトリの情報を取得する (repository)

更新:
作成:

GitHub の GraphQL API を使ってリポジトリの情報を取得するには、次のような方法があります。

  • repository クエリ … 組織名(あるいはユーザ名)とリポジトリ名が分かっている場合
  • organization クエリ … ある組織内のリポジトリの一覧を取得する場合(こちらの記事 を参考にしてください)
  • search クエリ汎用的な検索用クエリ でリポジトリを検索する

あるリポジトリのマイルストーンの一覧を取得する

repository クエリ を使用すると、指定した組織(ユーザー)の、指定したリポジトリの情報を取得することができます。

次の GraphQL クエリは、apollographql/apollo-client リポジトリで設定されているマイルストーンの一覧を要求しています。 milestones クエリで最初の 3 件分を取得していますが、最大 100 件まで同時に取得することができます。 100 件を超えるデータを取得したいときは、ページネーション処理 が必要です。

クエリ例
query {
  repository(owner: "apollographql", name: "apollo-client") {
    name
    url
    milestones(states: [OPEN,CLOSED], first: 3) {
      totalCount
      nodes {
        url
        title
        dueOn
        closed
        description
      }
      pageInfo {
        endCursor
        hasNextPage
      }
    }
  }
}
実行結果
{
  "data": {
    "repository": {
      "name": "apollo-client",
      "url": "https://github.com/apollographql/apollo-client",
      "milestones": {
        "totalCount": 17,
        "nodes": [
          {
            "url": "https://github.com/apollographql/apollo-client/milestone/1",
            "title": "alpha",
            "dueOn": "2016-04-19T07:00:00Z",
            "closed": true,
            "description": "Alpha release of the client, with enough features to be useful in a real app."
          },
          {
            "url": "https://github.com/apollographql/apollo-client/milestone/2",
            "title": "newspring-production",
            "dueOn": null,
            "closed": true,
            "description": ""
          },
          {
            "url": "https://github.com/apollographql/apollo-client/milestone/3",
            "title": "5/10 cycle",
            "dueOn": null,
            "closed": true,
            "description": "Some things to button down in the short term, that a lot of people have been asking about!"
          }
        ],
        "pageInfo": {
          "endCursor": "Y3Vyc29yOnYyOpHOABqZMg==",
          "hasNextPage": true
        }
      }
    }
  }
}

マイルストーンの一覧をソートする

milestones クエリを発行するときに、orderBy パラメータを指定すると、特定のフィールドの値を使ってソートされた結果を取得することができます。 次の例では、マイルストーンの Due Date が遅いものから順番に 100 件分を取得します。

GraphQL クエリ
query {
  repository(owner: "apollographql", name: "apollo-client") {
    milestones(states: [OPEN,CLOSED], last: 100,
        orderBy: {field: DUE_DATE, direction: DESC}) {
      nodes {
        url
        title
        dueOn
        closed
      }
    }
  }
}

マイルストーンに所属するイシューを取得する

milestones クエリを発行するときに、入れ子の形で issues を要求することで、各マイルストーンに所属するイシューのリストまで同時に取得してしまうことができます。

クエリ例
query {
  repository(owner: "apollographql", name: "apollo-client") {
    name
    url
    milestones(states: [OPEN,CLOSED], first: 3) {
      totalCount
      nodes {
        url
        title
        dueOn
        closed
        description
        issues(states: [OPEN,CLOSED], first: 10) {
          nodes {
            url
            title
            closed
          }
          pageInfo {
            endCursor
            hasNextPage
          }
        }
      }
      pageInfo {
        endCursor
        hasNextPage
      }
    }
  }
}
実行結果
省略

関連記事

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

更新:
作成:

あるリポジトリの Issue の一覧を取得する

次の GraphQL クエリでは、リポジトリ myorg/myrepo の Issue を新しい順に 100 件まで取得しています。

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

search を使うと、クエリ文字列を使った柔軟なデータ検索を行うことができます。 query パラメータには、GitHub の Issues ページの検索窓に入力できる is:issue is:open といった文字列で、下記のサイトに詳細仕様が記述されています。

Issue およびプルリクエストを検索する - GitHub Docs

関連記事

メニュー

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