---
articleId: 584d6cec-2b06-4029-bc28-deeddf77bbb5
slug: data-source-github-graphql
title: 転送元 - GitHub GraphQL API
parentCategoryId: b257af88-17fc-4a4d-bf94-dc694a258787
languageCode: ja
---
## 概要
GitHub API v4(GraphQL)を用いてデータを転送する設定のDocsです。
GitHub API v4(GraphQL)を利用し、GraphQLクエリを記述することで各種クエリ結果をJSONレコードとして取得できます。
## 取得可能なデータ
GitHub API v4でGraphQLクエリにより取得可能な全ての項目が対象です。
クエリ結果(JSON)に対し、JSON Path形式で対象パスを指定することで、転送対象のフィールドを絞ることができます。
また、絞り込み結果対象が配列の場合は1要素1行として取り込むことができます。
例)Issues一覧を取得した場合、Issuesの集合をパス指定することで各issueごとに取り込みことが可能です。
ページングが必要な項目については、 TROCCO 組み込みの `GraphQL Variables ( $__trocco_githubEndCursor__ )`を利用することで
cursorをずらしながらのAPIリクエストが可能です。
詳しくは下記「ページネーションの仕組み」をご覧ください。
## 設定項目
### STEP1 基本設定
| 項目 | 必須 | デフォルト値 | 内容 |
| --- | --- | --- | --- |
| GitHub接続情報 | Yes | - | TROCCOに登録したGitHub接続情報を指定します。 |
| GraphQLクエリ | Yes | ※クエリサンプル有 | ページネーションを利用する場合はVariablesとして`$\_\_trocco_githubEndCursor__`を利用して複数ページに渡るリクエストを記述することが出来ます。 |
| 取り込み対象のパス(JSON Path) | Yes | - | JSON結果から取得対象を絞り込むことができます。
例)
GraphQLクエリ結果として以下のJSONが取得できるとします。
{
"data": {
"repository": {
"issues": \[\{\<#issue1\>\}, \{\<#issue2\>\}\]
}
}
}
query {
organization(login: "primenumber-dev") {
membersWithRole(first: 2) {
edges {
node {
login
name
}
role
}
}
}
}
GitHub GraphQL API Explorerでクエリ結果を確認すると、以下のようなJSONであることが確認できます。
#### クエリ結果
{
"data": {
"organization": {
"membersWithRole": {
"edges": [
{
"node": {
"login": "trocco-taro",
"name": "TROCCO Taro"
},
"role": "ADMIN"
},
{
"node": {
"login": "trocco-hanako",
"name": "TROCCO Hanako"
},
"role": "ADMIN"
}
}
}
}
}
取り込みたいのは各memberの情報なので、 以下のように data > organization > memberWithRole > edges をJSON Pathで指定し、
member単位でレコードとして取り込みます。
#### 取り込み対象パスの指定 (JSON Path)
`$.data.organization.memberWithRole.edges`
このとき、edgesは配列のため、1要素ごと1レコードとして取り込むことができます。
最終的に以下のように取り込むことができました。
| records |
| --- |
| {"node": { "login": "trocco-taro", "name": "TROCCO Taro" }, "role": "ADMIN"} |
| {"node": { "login": "trocco-hanako", "name": "TROCCO Hanako" }, "role": "ADMIN"} |
## Repository配下の全Issues取得(ページネーション利用)
#### GraphQLクエリ
query($__trocco__githubEndCursor__:String){
repository(owner: "<#input your organization>", name: "<#input your repository>") {
issues(first: 100, states: OPEN, after:$__trocco__githubEndCursor__) {
edges {
node {
title
url
number
updatedAt
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
}
#### パスの指定
| 取り込み対象のパス | $.data.repository.issues.edges[*].node |
| pageInfo.endCursor のパス | $.data.repository.issues.pageInfo.endCursor |
| pageInfo.hasNextPage のパス | $.data.repository.issues.pageInfo.hasNextPage |