【Backlog】課題のステータスを更新するスクリプト(Python)【API】

記事タイトルとURLをコピーする

こんにちは。技術二課の伊藤Kです。

サーバーワークスでは、プロジェクト管理ツールとして「Backlog」を使っています。
タスク管理、ファイル共有もできるプロジェクト管理ツールBacklog

今回はこのBacklogの「課題」のステータスを、複数課題一挙に更新できるよう、ステータスを更新するスクリプトを作成します。

背景

Backlogではプロジェクトの課題管理機能として「課題」を1課題=1チケットとして生成し、各チケット毎に担当者、期限、進捗状況(ステータス)等を管理できます。
通常イメージされる「プロジェクトの課題」について管理している分にはGUI(Webベースの管理画面)からコメントやステータスを記入していけばよいのですが、
中には面倒な卓抜なことを考える人がいて、とある作業(作業Aとします)について、1インスタンスに対し1課題生成して、数百台あるインスタンスについて、作業Aのステータス管理をすることになりました。
「今日、インスタンス30台に対して作業Aが完了したので、対応する30個の課題のステータスを完了にしましょう」 イエッサー、Webブラウザで課題の設定画面を開いて、完了理由のコメントを入力して、ステータスを「完了」に設定して保存、と。
・・・これをあと29回やるのか。

というわけで、スクリプト化します。
Backlog APIが使えるようです。APIを叩くにはやっぱりPythonだな(偏見)。
とにかく早く作れてシンプルに動くことを重視する方針にします。
複雑なロジックを用いて全てを完璧にスクリプト化することは目指さず、多少GUIからの操作も入れて実現させます。

環境

以下の環境を用意します。
・インターネット環境(BacklogのAPIのURLに接続できること)
・Webブラウザで課題の検索画面が開け、検索一覧のデータエクスポートができること
・Pythonが実行できる環境(筆者の実行環境のバージョンはPython 3.7.1)
・Excelのファイルが開ける環境(頑張ればCSVファイルをテキストエディタで開くことで代用可能だが、Excelのほうが見やすい)

前提知識、参考情報

・「課題情報の更新」に関するBacklog API
課題情報の更新 - Backlog Developer API - Nulab
・サーバーワークスエンジニアブログ過去記事
Web APIで繋がる Questetra / Backlog 連携

準備作業

WebブラウザからBacklogにログイン後、以下リンク先の記事に従って、BacklogのAPIキーの情報を取得しておきます。
APIの設定

WebブラウザでBacklogの管理画面にログインした際のURLもひかえておきます。

サンプルスクリプト

サンプルスクリプトを記載します。実際にプロジェクトであったシチュエーション、2パターンです。

サンプル1:コメントを入れ、同時に状態を「完了」にする


課題をクローズしたい場合に、クローズの理由などをコメントに追記し、状態を「完了」に更新します。

sample01.py

#!/usr/bin/env python

import requests
import sys

### 課題各ステータス
apikey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'   # BacklogのAPIキー
url = "https://hogehoge.backlog.jp/api/v2/issues"   # Backlog API の URL
statusId = 4                          # 設定する状態ID(4:完了, 3:処理済み, 2:処理中, 1:未対応)
comment = '作業完了したのでクローズ'  # 設定するコメント
### ###

# 引数取得
args = sys.argv

# 更新用URL生成
urlreal = url + "/" + args[1]

# Backlog API v2
# APIキー, 状態ID, コメント 
payload = {
        'apiKey': apikey,
        'statusId': statusId,
        'comment': comment,
}
r = requests.patch(urlreal, params=payload)
print(r.text)

「準備作業」で取得した情報もふまえ、「課題各ステータス」部分の記述を更新してください。
Backlog API の URLについては、「https://hogehoge.backlog.jp」までが「準備作業」で確認した「Backlogにログインした際のURL」と共通で、「/api/v2/issues」は固定です。
スクリプト最終行の「print(r.text)」は、レスポンス内容を実行結果として表示させない場合は削除しても問題ありません。 表示させると、エラーだった場合に気づけて便利です。

実行方法

更新したい課題の「課題ID」を引数として、以下のように実行します。

> python sample01.py <課題ID>

ここで、更新したい課題の課題IDをどのように確認するのか。
全てをスクリプト内で完結するならば、課題IDを確認するスクリプトも作り、連携を試みるところです。
しかし、「背景」のセクションで記した通り「スピード重視」の方針で、
以下の通りささっと確認する方法を使います。

まずはBacklogにWebブラウザからログインし、「課題」メニューの検索条件で、更新対象の課題を含む条件で検索し、一覧に更新対象の課題を表示させます。

その状態で、右の「・・・」メニューをクリックし、「Excel」を選択します。

課題一覧がExcel形式でダウンロードされるのでファイルを開くと、更新対象の課題に対する「ID」が確認できます。これが「課題ID」です。

上記「Excel」を選択した手順の途中で、「CSV」を選択するとCSV形式のデータエクスポートも可能ですが、Excelファイルのほうが見やすいです。

課題IDを確認したので、図の例ではスクリプトはこのように実行します。
> python sample01.py 1234567891

対象の課題にコメントが追加され、ステータスも完了となりました。

さて当初のシナリオ、30個の課題を一気に「完了」とする方法ですが、
上記手順で更新対象の課題全ての課題IDを確認し、
コマンドを実行するファイルを作ります。
筆者の環境はWindowsなので、バッチファイルとして作成します。

sample.cmd

python sample01.py 1234567891
python sample01.py 1234567892
 ・
 ・
 ・
python sample01.py 1234567992

このバッチファイルをコマンドプロンプトから実行、めでたく30個の課題の状態が 一気に更新されました。

サンプル2:親課題を変更する

もう一つあったシチュエーション、各「子課題」が所属する「親課題」を一括で変更するパターンです。

sample02.py

#!/usr/bin/env python

import requests
import sys

### 課題各ステータス
apikey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'   # BacklogのAPIキー
url = "https://hogehoge.backlog.jp/api/v2/issues"   # Backlog API の URL
parentIssueId = 9900099009   # 親課題ID
### ###

# 引数取得
args = sys.argv

# 更新用URL生成
urlreal = url + "/" + args[1]

# Backlog API v2
# APIキー, 状態ID, コメント 
payload = {
        'apiKey': apikey,
        'parentIssueId': parentIssueId,
}
r = requests.patch(urlreal, params=payload)
print(r.text)

親課題を設定する箇所以外はサンプル1と全く同じです。
親課題IDの確認方法も、上記Excelデータダウンロードで、親課題の課題IDを確認すればOKです。

実行方法

実行コマンドもサンプル1と同じく
> python sample02.py <課題ID>
です。

おわりに

後日、課題の一括登録スクリプトについての記事も予定しています。お楽しみに!

伊藤K (記事一覧)

SRE部

おっさんエンジニア。

甘いお菓子が大好きですが、体重にDirect Connectなので控えています。

「エンジョイ AWS」を合言葉に、AWSを楽しむことを心がけています。