Backlogの課題をGoogleスプレッドシートから一括登録する仕組みをPythonで作ってみた
はじめに
Backlogで課題管理をしていると、同じような内容の課題をまとめて登録したくなる場面があります。
たとえば、こんなケースです。
- 新人研修用のタスクをまとめて登録したい
- 定型業務のタスクを毎月まとめて作成したい
- 手作業で1件ずつ登録するのが面倒
自分も新人研修用の課題を登録する機会があり、数十件の課題を手で作るのはかなり非効率だと感じました。
そこで今回は、Googleスプレッドシートで管理しているタスク一覧をもとに、Backlogへ課題を一括登録するスクリプト をPythonで作ったので紹介します。
やりたいこと
Googleスプレッドシートでこのように管理しているタスク一覧を、
| 親課題 | 中分類 | 小分類 | 担当 | 工数(h) | 期限 |
|---|---|---|---|---|---|
| 研修 | 発表準備 | 発表資料作成 | 新人 | 32 | 2024-05-01 |
| 研修 | 発表準備 | 発表練習 | 新人 | 24 | 2024-05-05 |
| 研修 | 成果発表 | 成果発表 | 新人 | 2 | 2024-05-10 |
Backlogで以下のように登録します。
- 親課題:研修
- 子課題:発表準備:発表資料作成
- 子課題:発表準備:発表練習
- 子課題:成果発表:成果発表
全体の流れ
今回の処理はシンプルです。
- スプレッドシートをCSVで保存
- PythonでCSVを読み込む
- Backlog APIで課題を登録する
事前準備
APIキーの取得
Backlogの個人設定画面からAPIキーを取得します。
スペース名の確認
BacklogのURLに含まれる以下の部分です。
https://xxxxx.backlog.com
↑ここ
プロジェクトIDの確認
以下のAPIで確認できます。
https://xxxxx.backlog.com/api/v2/projects?apiKey=XXXX
ユーザーIDの確認
担当者を設定したい場合は、ユーザーIDも確認しておきます。
/api/v2/users
使用ライブラリ
pip install requests pandas
サンプルコード
import requests
import pandas as pd
import time
API_KEY = "your_api_key"
SPACE = "your_space"
PROJECT_ID = 123456
BASE_URL = f"https://{SPACE}.backlog.com/api/v2"
USER_MAP = {
"新人": 111111
}
# CSV読み込み
df = pd.read_csv("tasks.csv")
# 親課題IDを保持
parent_issues = {}
def create_issue(summary, description, parent_id=None, assignee_id=None, due_date=None):
url = f"{BASE_URL}/issues"
data = {
"apiKey": API_KEY,
"projectId": PROJECT_ID,
"summary": summary,
"description": description
}
if parent_id:
data["parentIssueId"] = parent_id
if assignee_id:
data["assigneeId"] = assignee_id
if due_date:
data["dueDate"] = due_date
res = requests.post(url, data=data)
if res.status_code != 201:
print(res.text)
return None
return res.json()["id"]
for _, row in df.iterrows():
parent_name = row["親課題"]
# 親課題作成
if parent_name not in parent_issues:
parent_id = create_issue(
summary=parent_name,
description="親課題"
)
parent_issues[parent_name] = parent_id
time.sleep(1)
# 子課題作成
summary = f"{row['中分類']}:{row['小分類']}"
description = f"担当: {row['担当']}"
create_issue(
summary=summary,
description=description,
parent_id=parent_issues[parent_name],
assignee_id=USER_MAP.get(row["担当"]),
due_date=row["期限"]
)
time.sleep(1)
print("完了")
実行方法
python script.py
実行すると、CSVの内容をもとにBacklogへ課題が登録されます。
実際に使ってみた感想
手作業で登録していたときは、課題数が多いとそれだけで時間がかかっていました。
このスクリプトを使うと、
- 登録作業の時間短縮
- 入力ミス防止
- 同じフォーマットで統一できる
といったメリットがありました。
特に、定期的に同じような課題を登録する場合はかなり便利だと思います。
ハマりやすい点
日付形式
期限日は以下の形式にしておく必要があります。
YYYY-MM-DD
API制限対策
連続で登録する場合は、少し待機を入れておくと安全です。
time.sleep(1)
担当者が設定されない
名前ではなく userId を指定する必要があります。
応用できそうなこと
今回の仕組みをベースにすれば、以下もできそうです。
- 優先度設定
- カスタム項目入力
- 毎月自動実行
- Slack通知
- Googleスプレッドシート直接連携
まとめ
BacklogはAPIが用意されているので、定型的な課題登録は自動化しやすいです。
課題登録を手作業でやっている場合は、一度仕組み化してしまうとかなり楽になります。
同じような作業をしている方の参考になれば幸いです。