1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Backlogの課題をGoogleスプレッドシートから一括登録する仕組みをPythonで完全自動化した

1
Last updated at Posted at 2026-04-24

Backlogの課題をGoogleスプレッドシートから一括登録する仕組みをPythonで作ってみた

はじめに

Backlogで課題管理をしていると、同じような内容の課題をまとめて登録したくなる場面があります。

たとえば、こんなケースです。

  • 新人研修用のタスクをまとめて登録したい
  • 定型業務のタスクを毎月まとめて作成したい
  • 手作業で1件ずつ登録するのが面倒

自分も新人研修用の課題を登録する機会があり、数十件の課題を手で作るのはかなり非効率だと感じました。

そこで今回は、Googleスプレッドシートで管理しているタスク一覧をもとに、Backlogへ課題を一括登録するスクリプト をPythonで作ったので紹介します。


やりたいこと

Googleスプレッドシートでこのように管理しているタスク一覧を、

親課題 中分類 小分類 担当 工数(h) 期限
研修 発表準備 発表資料作成 新人 32 2024-05-01
研修 発表準備 発表練習 新人 24 2024-05-05
研修 成果発表 成果発表 新人 2 2024-05-10

Backlogで以下のように登録します。

  • 親課題:研修
    • 子課題:発表準備:発表資料作成
    • 子課題:発表準備:発表練習
    • 子課題:成果発表:成果発表

全体の流れ

今回の処理はシンプルです。

  1. スプレッドシートをCSVで保存
  2. PythonでCSVを読み込む
  3. 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が用意されているので、定型的な課題登録は自動化しやすいです。

課題登録を手作業でやっている場合は、一度仕組み化してしまうとかなり楽になります。

同じような作業をしている方の参考になれば幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?