Backlog API を使ってプロジェクト情報を取得

Backlog API とは

Backlog のプロジェクト情報(課題・Wiki・ファイル)の追加や取得等、Web でできる操作の大部分を、API 経由で実行することができます。
詳細については、「Backlog API とは」をご参照ください。
本記事では、Python を使って、Backlog のプロジェクト情報を取得する手順を紹介します。

Backlog API の使い方

API Key 取得

  1. 以下の URL にアクセスし「登録」をクリックします。
    ※xxxx の部分は、個人の環境に置き換えてください。
    https://xxxx.backlog.com/EditApiSettings.action
  2. 「登録された API キー」に API キーが表示されますのでコピーします。

Project ID の確認

プロジェクトの左ペインから「プロジェクト設定」をクリックすると確認できます。
URL 欄の一番右に表示されるのが「Project ID」になります。

Python 実行例

課題一覧を取得する例

以下のスクリプトを実行すると、全ての課題を JSON 形式で出力します。
nulabAccountmailAddress といった不要な情報もたくさん出力されますので、あまり実用的ではありません。

# -*- coding: Shift-JIS -*-
import csv
import requests
import pprint

def main():

    payload = {
        'apiKey': 'xxxxx',   # xxxxx は API キーを設定
    }
    issues = requests.get('https://xxxxx.backlog.com/api/v2/issues', payload) # xxxxx は環境にあわせて設定

    pprint.pprint(issues.json())

if __name__ == '__main__':
    main()

特定の課題を CSV 出力する例

ステータスが「完了」以外(未対応 / 処理中 / 処理済)かつ優先度が「高」の課題を取得し、CSV ファイルに出力する例です。

# -*- coding: Shift-JIS -*-
import csv
import requests
import pprint

def main():
    target_projects = {
        xxxxx: 'マイプロジェクト', # xxxxx はプロジェクト ID を設定
    }
    target_statuses = [
        1, # 未対応
        2, # 処理中
        3, # 処理済
    ]
    target_priority = [
        2, # 高
    ]

    payload = {
        'apiKey': 'xxxxx', # xxxxx は API キーを設定
        'projectId[]': [list(target_projects.keys())],  # 対象プロジェクトを指定
        'statusId[]': [target_statuses],                # ステータスが「完了」以外の課題を抽出
        'priorityId[]': [target_priority],              # プライオリティが「高」の課題を抽出
        'sort': 'dueDate',                              # 期限日でソートを宣言
        'order': 'desc',                                # 降順ソート
        'count': '50',                                  # 取得する課題の数を50件に設定(指定しない場合は20件まで)
    }
    issues = requests.get('https:/xxxxx.backlog.com/api/v2/issues', payload)  # xxxxx は環境にあわせて設定

    results = []
    for issue in issues.json():
        result = {
            'プロジェクトID': issue['projectId'],
            'プロジェクト名': target_projects[issue['projectId']],
            '件名': issue['summary'],
            'ステータス': issue['status']['name'],
            '優先度': issue['priority']['name'],
            '期限日': issue['dueDate'] if issue['dueDate'] else '(指定なし)',
        }
        results.append(result)

    with open('backlog2.csv', 'w', encoding='utf_8_sig', newline="") as f:
        writer = csv.DictWriter(f,
                             quotechar='"',
                             quoting=csv.QUOTE_ALL,
                             fieldnames=list(results[0].keys()))
        writer.writeheader()

        for i, r in enumerate(results, start=1):
            writer.writerow(r)
        
        pprint.pprint(results)

if __name__ == '__main__':
    main()

なお、「ステータス」や「優先度」等、指定可能なクエリパラメータについては、以下をご参照ください。

Nulab Developer API

Backlog APIを使って、プロジェクト管理ツール Backlog と連携…

以上

参考サイト

akiblog

弊社(アパルーサ・ユニバース株式会社)では課題管理に Backlog を使用することがあります。(他にも Redmine…