さて、前回に引き続きBacklogの紹介です。
backlogのAPI keyの取得方法やAPI Keyのセキュリティに関する注意点を前回解説してきました。backlog自体をまだ利用していない方は30日間無料で使えるので、そちらも試してみてください。そもそもアカウント無いと今回解説するAPIの解説の意味がないので。。というかこの記事をググって見つけた方はすでにアカウントあるとは思いますが。
今回はbacklogの実際に前回取得したAPI Keyを利用して、API経由で課題一覧を取得していきたいと思います。
API keyの取得が完了していない方は、まずは前回記事をご確認ください。
APIでbacklog課題一覧を取得する方法
では、早速課題一覧のAPIリクエスト内容及びレスポンスの説明をした上で、実際のコードをみていきましょう。
APIでbacklog課題一覧を取得する方法: API概要
まずは、課題一覧APIの概要をみていきましょう。クエリパラメータ
Method: GET
URL: /api/v2/issues
クエリパラメータ:以下の表
カスタム属性:テキスト・数値・リスト・日付のカスタム属性に応じてクエリ指定可能
パラメーター名 | 型 | 内容 |
---|---|---|
projectId[] | 数値 | プロジェクトのID |
issueTypeId[] | 数値 | 種別のID |
categoryId[] | 数値 | カテゴリーのID |
versionId[] | 数値 | 発生バージョンのID |
milestoneId[] | 数値 | マイルストーンのID |
statusId[] | 数値 | 状態のID プロジェクト毎の状態一覧のAPI |
priorityId[] | 数値 | 優先度のID |
assigneeId[] | 数値 | 担当者のID |
createdUserId[] | 数値 | 登録者のID |
resolutionId[] | 数値 | 完了理由のID |
parentChild | 数値 | 親子課題の条件 0: すべて 1: 子課題以外 2: 子課題 3: 親課題でも子課題でもない課題 4: 親課題 |
attachment | 真偽値 | 添付ファイルを含む場合はtrue |
sharedFile | 真偽値 | 共有ファイルを含む場合はtrue |
sort | 文字列 | 課題一覧のソートに使用する属性名 “issueType” “category” “version” “milestone” “summary” “status” “priority” “attachment” “sharedFile” “created” “createdUser” “updated” “updatedUser” “assignee” “startDate” “dueDate” “estimatedHours” “actualHours” “childIssue” “customField_${id}” |
order | 文字列 | “asc”または”desc” 指定が無い場合は”desc” |
offset | 数値 | |
count | 数値 | 取得上限(1-100) 指定が無い場合は20 |
createdSince | 文字列 | 登録日 (yyyy-MM-dd) |
createdUntil | 文字列 | 登録日 (yyyy-MM-dd) |
updatedSince | 文字列 | 更新日 (yyyy-MM-dd) |
updatedUntil | 文字列 | 更新日 (yyyy-MM-dd) |
startDateSince | 文字列 | 開始日 (yyyy-MM-dd) |
startDateUntil | 文字列 | 開始日 (yyyy-MM-dd) |
dueDateSince | 文字列 | 期限日 (yyyy-MM-dd) |
dueDateUntil | 文字列 | 期限日 (yyyy-MM-dd) |
id[] | 数値 | 課題のID |
parentIssueId[] | 数値 | 親課題のID |
keyword | 文字列 | 検索キーワード |
APIでbacklog課題一覧を取得する方法: レスポンス
レスポンスボディのサンプルです。
[
{
"id": 1,
"projectId": 1,
"issueKey": "BLG-1",
"keyId": 1,
"issueType": {
"id": 2,
"projectId" :1,
"name": "タスク",
"color": "#7ea800",
"displayOrder": 0
},
"summary": "first issue",
"description": "",
"resolutions": null,
"priority": {
"id": 3,
"name": "中"
},
"status": {
"id": 1,
"projectId": 1,
"name": "未対応",
"color": "#ed8077",
"displayOrder": 1000
},
"assignee": {
"id": 2,
"name": "eguchi",
"roleType" :2,
"lang": null,
"mailAddress": "eguchi@nulab.example"
},
"category": [],
"versions": [],
"milestone": [
{
"id": 30,
"projectId": 1,
"name": "wait for release",
"description": "",
"startDate": null,
"releaseDueDate": null,
"archived": false,
"displayOrder": 0
}
],
"startDate": null,
"dueDate": null,
"estimatedHours": null,
"actualHours": null,
"parentIssueId": null,
"createdUser": {
"id": 1,
"userId": "admin",
"name": "admin",
"roleType": 1,
"lang": "ja",
"mailAddress": "eguchi@nulab.example"
},
"created": "2012-07-23T06:10:15Z",
"updatedUser": {
"id": 1,
"userId": "admin",
"name": "admin",
"roleType": 1,
"lang": "ja",
"mailAddress": "eguchi@nulab.example"
},
"updated": "2013-02-07T08:09:49Z",
"customFields": [],
"attachments": [
{
"id": 1,
"name": "IMGP0088.JPG",
"size": 85079
},
...
],
"sharedFiles": [
{
"id": 454403,
"type": "file",
"dir": "/ユーザアイコン/",
"name": "01_サラリーマン.png",
"size": 2735,
"createdUser": {
"id": 5686,
"userId": "takada",
"name": "takada",
"roleType":2,
"lang":"ja",
"mailAddress":"takada@nulab.example"
},
"created": "2009-02-27T03:26:15Z",
"updatedUser": {
"id": 5686,
"userId": "takada",
"name": "takada",
"roleType": 2,
"lang": "ja",
"mailAddress": "takada@nulab.example"
},
"updated":"2009-03-03T16:57:47Z"
},
...
],
"stars": [
{
"id": 10,
"comment": null,
"url": "https://xx.backlog.jp/view/BLG-1",
"title": "[BLG-1] first issue | 課題の表示 - Backlog",
"presenter": {
"id": 2,
"userId": "eguchi",
"name": "eguchi",
"roleType": 2,
"lang": "ja",
"mailAddress": "eguchi@nulab.example"
},
"created":"2013-07-08T10:24:28Z"
},
...
]
}
]
APIでbacklog課題一覧を取得する方法: 実際のコード
今回のコードでは、key・summary・descriptionの3つの要素をJSON responseから抽出して、スプレッドシートに書き込んでいます。
function getIssues() {
const apiKey = PropertiesService.getScriptProperties().getProperty("apikey")
const url = "https://XXX.backlog.com/";
const endopoint = "api/v2/issues";
let create_url = url + endopoint + "?apiKey=" + apiKey;
let data_json = UrlFetchApp.fetch(create_url);
let data = JSON.parse(data_json)
let output = data.map(a => [a.issueKey, a.summary, a.description]);
let sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("output");
sht.getRange(1,1,output.length,output[0].length).setValues(output);
}
endopointとなるURLを作成して、fetchappでurlをfetchします。結果がapplication/JSONで返ってくるので、返ってきたJSONをparseして必要な要素を抽出して、シートに書き出す。という流れになります。
【コード修正のご連絡 2022/03/30】
上記実際のコード5行目 let create_url=・・・の行で、apiKeyとすべきところが、apikey(kが小文字のまま)だったため、動作エラーを起こすスクリプトになっていました。日頃からGAS書かれる人であれば、対応可能ではありますが、初見さんに申し訳なく思っています。
現在はコードブロック全て修正され、動作検証も終わっていますので、そのままコピペでも動きますこと、報告させていただきます。
まとめ
今回は、【個人的に大好きなBacklogの紹介〜APIを利用して課題一覧を取得する方法(概要:GASで課題一覧の取得)〜】として、Backlog APIを利用してスプレッドシートに課題一覧を書き出す方法を紹介してきました。
課題一覧については、CSVで吐き出すことも可能ですが、API経由で簡単に取得できるので、個人的にはAPIでの対応にしています。
次回以降では、Slack通知の方法やその他便利機能についても紹介していきます。では、また。
参考:backlogの始め方
とりあえず試してみたい方は30日間無料でトライアルできますので、試しに触ってみるのもありだと思います。何はともあれ触ってみるのが一番自分にしっくりくるかわかりやすいものです。