👶
GitHub GraphQL APIでProjectsのカードを取得する
はじめに
かんばんツールをTrelloからGitHub Projectsへ引っ越した際に、
GraphQL APIについてもいろいろ調べたのでその一部を書きます。
公式ドキュメントを見ながら作業しましたが、
今回記載したのはごく一部の例なので、
詳しい仕様の確認やカスタマイズの際は参考にして下さい。
書くこと
- カード情報を取得するクエリについて
書かないこと
- アクセストークンの発行やエンドポイントなど基本的な手順
- カード登録に関連すること
カードを取得するための手順
Step1 プロジェクトIDの取得
まずはプロジェクトIDを取得します。
以下のクエリで取得出来る
PVT_xxxxxxxxxxxxxx
みたいなのがGraphQL APIを使う上で使うプロジェクトIDです。
query {
organization(login: "{組織名}") {
projectV2(number: {プロジェクトナンバー}) {
id
}
}
}
※{}の部分は、URLのこの部分
github.com/orgs/{組織名}/projects/{プロジェクトナンバー}/views/1
レスポンスはこんな感じ
{
"data": {
"organization": {
"projectV2": {
"id": "PVT_xxxxxxxxxxxxxx"
}
}
}
}
Step2 すべてのカードの情報を取得する
{
node(id: "{プロジェクトID}") {
... on ProjectV2 {
items(first: 100) { #カードを100個まで取得
nodes { #カードの中身で取得したいものを書く
id #カード自体のID
fieldValues(first: 20) { #カードに定義されたフィールドの情報
nodes { #取得したいフィールドについて書く
... on ProjectV2ItemFieldTextValue {
field {
... on ProjectV2FieldCommon {
name #フィールドの名前
}
}
text
}
... on ProjectV2ItemFieldUserValue { #Assigneesのフィールド
field {
... on ProjectV2FieldCommon {
name
}
}
users(first: 10) {
nodes {
id #U_xxxxxxxxxx的なやつ
login #我々がよく目にするアカウントID
}
}
}
... on ProjectV2ItemFieldSingleSelectValue { #選択項目(Statusとか)
name #選択されてる名称
field {
... on ProjectV2FieldCommon {
name
}
}
}
... on ProjectV2ItemFieldNumberValue { #数値項目
field {
... on ProjectV2FieldCommon {
name
}
}
number #入力値
}
}
}
}
}
}
}
}
デモ
こんな感じのプロジェクトから全カードを取得してみます
取得結果
{
"data": {
"node": {
"items": {
"nodes": [
{
"id": "PVTI_xxxxxxxxxxxxxxxxxxxxx",
"fieldValues": {
"nodes": [
{
"field": {
"name": "Title"
},
"text": "Todoのタスク"
},
{
"name": "Todo",
"field": {
"name": "Status"
}
},
{
"field": {
"name": "MEMO"
},
"text": "Todoのタスクのメモ"
}
]
}
},
{
"id": "PVTI_xxxxxxxxxxxxxxxxxxxxx",
"fieldValues": {
"nodes": [
{
"field": {
"name": "Title"
},
"text": "進行中のタスク"
},
{
"name": "In Progress",
"field": {
"name": "Status"
}
},
{
"field": {
"name": "MEMO"
},
"text": "進行中タスクのメモ"
}
]
}
},
{
"id": "PVTI_xxxxxxxxxxxxxxxxxxxxx",
"fieldValues": {
"nodes": [
{
"field": {
"name": "Title"
},
"text": "完了したタスク"
},
{
"name": "Done",
"field": {
"name": "Status"
}
},
{
"field": {
"name": "MEMO"
},
"text": "完了タスクのメモ"
}
]
}
}
]
}
}
}
}
簡単ですが、以上です。
上記クエリは一例なので、取得したいフィールドを増やしたりすることももちろん可能です。
カードの登録や、カスタムフィールドへの値設定なども機会があれば書きたいと思います。
私たち BABY JOB は、子育てを取り巻く社会のあり方を変え、「すべての人が子育てを楽しいと思える社会」の実現を目指すスタートアップ企業です。圧倒的なぬくもりと当事者意識をもって、こどもと向き合う時間、そして心のゆとりが生まれるサービスを創出します。baby-job.co.jp/
Discussion