Backlogの課題をPythonでまとめて作ってみました
しばらく前は涼しくて快適くらいの気温だったと思うのですのが、もうすっかりパソコンの排熱が暖房代わりになる季節になりました。そんな中、最近の私はインフラ構築に携わっており、今まであまり触れてこなかったAWSと仲良くなりつつあるところです。
さて突然ですが、サーバを構築したときの最後のタスクに「アカウントの確認依頼」があります。「SSHでログインできるユーザを作ったので、ログインしてパスワードを変えておいてください」と他の方にお願いする作業です。そしてこの依頼は、Backlogで全員にそれぞれ課題を作成して、進捗状況を管理します。
今回の私のケースではコピペして課題を5つ作ればそれで済むのですが、いまいち面白くありません。そこで、退屈な作業をPythonにやらせてみました。
さっそく調べてみると、Backlogは通常ユーザでもAPIキーを使って手軽に自動化できるそうです。そして公式ドキュメントもあります。
Backlog API – nulab
https://developer.nulab.com/ja/docs/backlog/#
今回使うのは課題作成APIだけなのでほとんど手間は変わりませんが、少しでも手を抜くため次のライブラリを使います。nulabの公式ドキュメントに紹介のあったPythonのライブラリです。元のAPIがシンプルなためか、5分かからず実装全体を確認できるくらい簡素な作りでした。
https://github.com/kitadakyou/PyBacklogPy
かなり説明を端折っていますが、そんなこんなで実際に課題を作るコードはこのようになりました。
from typing import NamedTuple from pybacklogpy.BacklogConfigure import BacklogJpConfigure from pybacklogpy.Issue import Issue class Assignee(NamedTuple): name: str # ユーザ名(担当者) id: int # BacklogでのユーザID SPACE_KEY = "xxxxx" # https://xxxxx.backlog.jp/ API_KEY = "secretsecretsecretsecretsecret" PROJECT_ID = 000000 # プロジェクト設定のURLにあるID config = BacklogJpConfigure(SPACE_KEY, API_KEY) ISSUE_TYPE = 111111 # 「課題種別」各プロジェクトで固有のID ISSUE_PRIORITY = 3 # 「優先度:中」 ISSUE_CUSTOM_FIELDS = { # カスタム属性があれば次のように指定 # "customField_123456": 1, } ASSIGNEE_LIST = [ Assignee("私", 000000), ] parentIssue = 30000000 # 「親課題」の課題ID assignee = ASSIGNEE_LIST[0] summary = f"テスト課題({assignee.name}さん)" description = "テスト課題の本文。本文。本文。" result = Issue(config).add_issue( project_id=PROJECT_ID, summary=summary, description=description, assignee_id=assignee.id, issue_type_id=ISSUE_TYPE, priority_id=ISSUE_PRIORITY, parent_issue_id=parentIssue, start_date="2022-11-29", due_date="2022-12-29", **ISSUE_CUSTOM_FIELDS, ) print(result.json())
BacklogJpConfigureクラスでconfigを作り、課題に関するIssueクラスに渡す使い方をするそうです。Issue.add_issue関数が課題作成APIに対応するので、設定内容を引数にして呼び出します。なおASSIGNEE_LISTやassigneeで担当者を保持しているのは、上のサンプルでは簡略化しましたがforループで複数課題を作成する想定のためです。
これを実際のプロジェクトに合わせて実行した結果がこちらです。親課題は手動で作成し、その子課題を自動生成しました。
ちゃんと課題が作成できています。しかし結果的には、通常のGUIで作った方が早いし楽でした。
というのも、パラメータを準備する手間がかかります。担当者のユーザIDはワークスペース内で共通なので使いまわせますが、「課題種別」や「カスタム属性」のIDは各プロジェクトによって変わるので、それをいちいち調べてから実行しなければなりません。残念ながら手作業で頑張ってコピペする方が楽です。
ただ、今回のような同じ内容の課題を5個作る程度だと恩恵はありませんでしたが、定期的に発生するタスクを自動的に起票したいときなど、そういった場面では便利そうです。