個人的に大好きなBacklogの紹介〜APIを利用して課題一覧を取得する方法(2)〜

backlog-logoAPI関連
この記事は約12分で読めます。

さて、前回に引き続き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日間無料でトライアルできますので、試しに触ってみるのもありだと思います。何はともあれ触ってみるのが一番自分にしっくりくるかわかりやすいものです。

タイトルとURLをコピーしました