Contents
1. Backlog API の概要と認証方式
Backlog API はベース URL が https://{space}.backlog.com/api/v2 で統一されており、全エンドポイントが JSON を入力・出力します。開発者が最初に取り組むべきは「どの認証手段を選ぶか」です。
1‑1. 認証方式の比較
Backlog が公式にサポートしているとされる認証方式は次の 2 種類です。実装前に必ず公式ページで OAuth 2.0 の有無 を確認してください(※2026 年版の情報は変動する可能性があります)。
| 認証方式 | 主な利用シーン | 発行手順・取得先 | 有効期限・更新 |
|---|---|---|---|
| API キー | テスト、社内ツール、スクリプト実行 | Backlog の「個人設定」→「API キー」画面から発行 | 原則無期限(セキュリティ上は 90 日ごとのローテーションを推奨) |
| OAuth 2.0 (※公式に記載がある場合) |
外部 SaaS と連携する大規模システム、認可サーバーが必要な環境 | Backlog の開発者向けコンソールでクライアント ID/シークレットを作成 | アクセストークン 1 時間、リフレッシュトークンあり(有効期限はサービス側設定) |
ポイント
- API キーはヘッダーAuthorization: Bearer <API_KEY>で送信し、実装が最も簡単です。
- OAuth を利用できる場合は「認可コードフロー」や「クライアントクレデンシャルフロー」を選択でき、トークンの自動更新が可能になります。
API キー取得手順(概要)
- Backlog にログイン → 右上メニュー > 個人設定。
- 「API キー」タブを開き 「新規作成」 をクリック。
- 表示された文字列を安全なシークレットストアに保存し、
Authorization: Bearer <キー>として利用。
OAuth 2.0 実装イメージ(参考)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sequenceDiagram participant User as ユーザー (ブラウザ) participant Client as アプリケーション participant Auth as Backlog 認可サーバ participant API as Backlog API User->>Client: ログイン要求 Client->>Auth: 認可コード取得リクエスト(redirect_uri) Auth-->>User: 認可画面 User->>Auth: 同意 → 認可コード返却 Auth-->>Client: 認可コード Client->>Auth: トークン交換 (client_id, client_secret, code) Auth-->>Client: アクセストークン + リフレッシュトークン Client->>API: API 呼び出し (Bearer token) |
上記はあくまで一般的な OAuth 2.0 フローです。Backlog が提供するエンドポイントやパラメータは公式ドキュメントで確認してください。
2. Backlog が公式にサポートする標準連携先
Backlog の「外部サービス連携」機能は、Webhook と REST API を組み合わせてリアルタイム通知や双方向同期を実現します。以下では、2026 年時点で公式に掲載されている標準連携先と、その主要機能を簡潔にまとめます。
2‑1. 標準連携サービス一覧
| サービス | 主な連携内容 | 実装例(Webhook / API) |
|---|---|---|
| GitHub / GitLab | プルリクエスト・コミット通知、課題リンク付与 | Webhook → Backlog 課題コメント |
| Slack | 新規課題作成やステータス変更のチャネル通知 | Incoming Webhook |
| Microsoft Teams | 同上(Teams コネクタ) | Outgoing Webhook |
| Bitbucket | リポジトリイベント → Backlog コメント自動生成 | Webhook |
| Jenkins | ビルド成功/失敗を課題に紐付けて報告 | REST API (POST /issues/{id}/comments) |
3. 主な SaaS ツールとの比較表(Backlog 連携視点)
外部のプロジェクト管理ツールやタスク管理サービスと Backlog を統合したいケースが増えています。ここでは Jira Cloud、Redmine、Chatwork、Trello、Asana の API 特性・認証方式・レートリミットを表にまとめました。
⚠️ 各 SaaS のレートリミットは 2026 年版の公称値です。実際の上限はサービスごとに変動するため、公式ドキュメントで最新数値をご確認ください。
| SaaS ツール | API 種類 | 認証方式 | 主な連携項目(Backlog ↔ SaaS) | 代表レートリミット |
|---|---|---|---|---|
| Jira Cloud | REST, GraphQL | OAuth 2.0 / API Token | 課題同期、ステータスマッピング、コメント双方向転送 | 60 秒間に 500 リクエスト (公式) |
| Redmine | REST | API キー | 課題作成・更新、担当者割当、添付ファイル同期 | 1,000 req/10 min(非公式) |
| Chatwork | REST | API トークン | メッセージ自動転送、タスク生成、ユーザー通知 | 60 秒間に 100 リクエスト |
| Trello | REST | OAuth 1.0a / API キー | カード ↔ 課題同期、ラベルマッピング、チェックリスト連携 | 10 req/秒(公式) |
| Asana | REST, GraphQL | OAuth 2.0 | プロジェクト・タスク同期、コメント転送、カスタムフィールド対応 | 60 秒間に 150 リクエスト |
参考リンク
- Jira Cloud API: https://developer.atlassian.com/cloud/jira/platform/rest/v3/
- Redmine REST API: https://www.redmine.org/projects/redmine/wiki/Rest_api
- Chatwork API: https://developer.chatwork.com/ja/
- Trello API: https://developer.atlassian.com/cloud/trello/guides/rest-api/introduction/
- Asana API: https://developers.asana.com/docs/
3‑1. レートリミット対策の基本方針
| 項目 | 推奨手法 |
|---|---|
| バックオフ | Retry-After ヘッダーが返されたらその秒数待機し、指数的バックオフを併用 |
| トークンバケット | 1 分間に最大 600 リクエスト(Backlog の公称上限)を超えないようリクエストレートを平準化 |
| バッチ処理 | 大量取得は offset/count パラメータでページングし、1 回の呼び出し件数は 100 件以下に抑える |
Backlog の公式レートリミットは「600 リクエスト / 分」ですが、実装時には 余裕を持って 500 req/分 程度で設計すると安全です(※公式ドキュメントで再確認してください)。
4. ノーコード iPaaS で構築する Backlog 連携
プログラミングリソースが限られる組織でも、Zapier・Make・TROCCO といった iPaaS を使えば数クリックで API 呼び出しフローを作成できます。ここでは 代表的な3サービス の設定ポイントと注意点を解説します。
4‑1. Zapier で Backlog 課題自動作成
Zapier の「Webhooks by Zapier」アクションを用いると、外部トリガー(例:Slack メッセージ)から Backlog に課題を POST できます。設定手順は次の通りです。
- Trigger: Slack → 「New Message Posted to Channel」
- フィルタで
#new‑taskタグが含まれるか判定。 - Action: Webhooks → POST
- URL:
https://{space}.backlog.com/api/v2/issues - ヘッダー:
Authorization: Bearer <API_KEY>、Content-Type: application/json - ボディ(JSON)例
|
1 2 3 4 5 6 7 8 |
{ "projectId": "{{ProjectID}}", "summary": "{{MessageText}}", "description": "Created from Slack by Zapier", "priorityId": 3, "assigneeId": {{UserID}} } |
注意: 無料プランは月間タスク数が 100 件に制限され、レートリミット超過時のリトライ機能が限定的です。実運用では有料プランまたは Make への移行を検討してください。
4‑2. Make(旧 Integromat)で双方向同期
Make は「シナリオ」単位で複数モジュールを組み合わせられ、エラーハンドリングとスケジューリング が柔軟です。例として Backlog ↔ Jira Cloud のステータス自動連携シナリオを示します。
| ステップ | 内容 |
|---|---|
| 1. Watch Issues (Jira) | Webhook → 「Issue Updated」イベント取得 |
| 2. HTTP – GET (Backlog) | 課題検索 (/issues?keyword=...) |
| 3. Router | 同一課題が存在しなければ Create、存在すれば Update |
| 4. HTTP – POST / PATCH (Backlog) | ステータス変更または新規作成 |
| 5. Error Handler | 失敗時は Slack に通知、最大 3 回リトライ |
Make の無料枠でも月間 1,000 操作が可能で、自動バックオフ機能 が組み込まれています。
4‑3. TROCCO(国内向け iPaaS)と Biztex テンプレート
TROCCO は日本企業向けに最適化された ETL/統合プラットフォームで、Backlog 用の 「インテリジェント フロー」 テンプレートが公式サイトに公開されています(参照先: Biztex の活用例)。
| フローステップ | 具体的処理 |
|---|---|
| 1. データ取得 | Backlog /issues API を定期実行し、JSON を中間ストレージ(S3 相当)へ保存 |
| 2. 正規化・変換 | ステータスコード ↔ カスタムマッピング表で相互変換、必要項目だけ抽出 |
| 3. 送信先 | Jira Cloud の /rest/api/3/issue に POST。失敗時は自動リトライ(最大5回) |
| 4. 通知 | エラーが発生したら Slack Webhook でリアルタイム通知 |
TROCCO の特徴
- 認証情報暗号化保存:API キー・クライアントシークレットはプラットフォーム側の Vault に格納。
- レートリミット自動制御:設定した「スロットル」パラメータで 1 分間あたり最大リクエスト数を上限付与できる。
5. コードベースで実装する Python サンプルと運用ベストプラクティス
自前のバッチ処理や高度なロジックが必要な場合は、公式 SDK(Python・Ruby・JavaScript)を活用すると開発効率が上がります。以下は Python 3.11+ を対象にした実践的サンプルです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
import os import time import json import logging from datetime import datetime, timedelta import requests from requests.exceptions import HTTPError # ------------------------------------------------- # 環境設定(シークレットは AWS Secrets Manager / GCP Secret Manager 推奨) # ------------------------------------------------- API_KEY = os.getenv("BACKLOG_API_KEY") SPACE_ID = os.getenv("BACKLOG_SPACE") # e.g. "myteam" BASE_URL = f"https://{SPACE_ID}.backlog.com/api/v2" HEADERS = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json", } logging.basicConfig( level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s', handlers=[logging.StreamHandler()] ) # ------------------------------------------------- # ユーティリティ:レートリミット対策(トークンバケット方式) # ------------------------------------------------- class RateLimiter: """1 分間に max_requests 回まで送信できるシンプルなレートリミッタ""" def __init__(self, max_requests: int = 550): self.max_requests = max_requests self.interval = 60.0 / max_requests self._last_time = time.monotonic() - self.interval def wait(self) -> None: now = time.monotonic() elapsed = now - self._last_time if elapsed < self.interval: time.sleep(self.interval - elapsed) self._last_time = time.monotonic() rate_limiter = RateLimiter() # ------------------------------------------------- # API 呼び出しラッパー # ------------------------------------------------- def request(method: str, path: str, **kwargs): url = f"{BASE_URL}{path}" rate_limiter.wait() try: resp = requests.request(method, url, headers=HEADERS, timeout=15, **kwargs) if resp.status_code == 429: # Too Many Requests retry_after = int(resp.headers.get("Retry-After", "60")) logging.warning(f"Rate limit hit. Retry after {retry_after}s") time.sleep(retry_after) return request(method, path, **kwargs) # 再帰リトライ resp.raise_for_status() if resp.text: return resp.json() return {} except HTTPError as exc: logging.error(f"HTTP error on {method} {url}: {exc}") raise # ------------------------------------------------- # 具体的処理例:課題一覧取得 & ステータス更新 # ------------------------------------------------- def list_issues(project_id: int, since_hours: int = 24): """プロジェクト内の最近更新された課題をページングしながら取得""" issues = [] offset = 0 limit = 100 # Backlog の最大件数 while True: params = { "projectId[]": project_id, "updatedSince": (datetime.utcnow() - timedelta(hours=since_hours)).isoformat(), "offset": offset, "count": limit, } batch = request("GET", "/issues", params=params) issues.extend(batch) if len(batch) < limit: break offset += limit return issues def update_issue_status(issue_id: int, status_id: int): """単一課題のステータスを変更。失敗時は例外を上位へ伝搬""" payload = {"statusId": status_id} request("PATCH", f"/issues/{issue_id}", json=payload) logging.info(f"Issue {issue_id} → status {status_id}") # ------------------------------------------------- # メインロジック(サンプル実行) # ------------------------------------------------- if __name__ == "__main__": PROJECT_ID = 12345 # ← 実環境に合わせて変更 TARGET_STATUS_ID = 2 # 「処理中」など任意のステータス ID for issue in list_issues(PROJECT_ID): current_status = issue["status"]["id"] if current_status != TARGET_STATUS_ID: try: update_issue_status(issue["id"], TARGET_STATUS_ID) except Exception as e: logging.error(f"Failed to update {issue['id']}: {e}") |
5‑1. 運用上のベストプラクティス
| 項目 | 推奨手法・ツール |
|---|---|
| 例外処理 | requests.HTTPError を捕捉し、ステータスコード別に分岐。429 は Retry-After ヘッダーで待機後リトライ。 |
| シークレット管理 | 環境変数だけでなく、AWS Secrets Manager・GCP Secret Manager などの KMS 保護ストレージを使用。コードにハードコーディングしない。 |
| レートリミット制御 | トークンバケット方式や RateLimiter クラスで 1 分間 550 リクエスト以下に抑える(余裕を持たせる)。 |
| ロギング & 監視 | JSON 形式の構造化ログにリクエスト ID・応答時間・ステータスコードを含め、CloudWatch / Stackdriver に集約。 |
| テスト自動化 | pytest + responses ライブラリで API モックを作成し、CI パイプラインで回帰テストを走らせる。 |
6. 典型的ユースケースと最新事例
実際に導入した企業がどのような効果を得ているかを把握すると、社内提案時の説得材料になります。
6‑1. 課題同期・ステータス自動更新シナリオ(Jira ↔ Backlog)
| フロー | 実装ポイント |
|---|---|
| トリガー | Jira Cloud の「Issue transitioned」Webhook(Done →) |
| 処理 | Make が受信 → Backlog /issues を検索 → 該当課題があれば PATCH /issues/{id} でステータス「完了」に更新。 |
| フォールバック | 課題が見つからない場合は新規作成し、コメントに「Jira から自動生成」旨を付与。 |
| 効果測定 | 手動同期作業が月間 ≈30 h 削減、ステータス不整合率が 0% に近づいた。 |
6‑2. Biztex が提供する TROCCO テンプレート活用例
Biztex は Backlog と TROCCO を組み合わせた「双方向同期テンプレート」を公開しています(参照: https://service.biztex.co.jp/dx-hacker/ipaas/backlog-api/)。主な成果は以下の通りです。
| 項目 | 内容 |
|---|---|
| 対象連携 | Backlog ↔ Trello、Backlog ↔ Chatwork |
| 実装期間 | テンプレート導入+軽微カスタマイズで 約2週間(社内リソース 1 名) |
| 効果 | 手入力作業が 80 % 削減、課題情報の一元管理によりプロジェクトリーダーの報告工数が月間 12 時間 減少。 |
| 技術ハイライト | - API キー認証を Vault に暗号保存 - エラーハンドリングは TROCCO の自動リトライ(最大5回) - 失敗時は Slack へ即時通知 |
6‑3. Zapier + Backlog:社内ヘルプデスク自動化
- シナリオ:Slack の
#helpdeskチャンネルで「/ticket」コマンドが実行されると、Zapier が Backlog に課題を作成し、担当者に DM で通知。 - 導入効果:チケット登録までの平均リードタイムが 5 分 → 30 秒 に短縮。
7. まとめ
- 認証は API キーか OAuth 2.0(公式情報を必ず確認) を選択し、キーは定期ローテーション、OAuth は安全なリフレッシュ管理が必要です。
- 標準連携先(GitHub・Slack など)は Webhook と API の組み合わせで即時通知が可能です。公式ドキュメントのリンクを活用しましょう。
- 主要 SaaS ツールとの比較表 を基に、認証方式・レートリミット・対応機能を自社要件と照らし合わせて最適な連携先を決定します。
- ノーコード iPaaS(Zapier / Make / TROCCO) は設定だけで基本フローが構築でき、レートリミットや認証情報の暗号化はプラットフォーム側機能を活用すべきです。
- 自前実装(Python SDK 例) では、トークンバケット方式によるレート制御、例外ハンドリング、シークレット管理を徹底し、構成要素をテスト自動化で担保します。
- 事例紹介(Jira ↔ Backlog のステータス同期、Biztex の TROCCO テンプレート)からは、導入工数が数週間で完了し、作業効率が 10〜80 % 向上する実績が得られます。
次のアクション
1. Backlog コンソールで API キーまたは OAuth クライアントを発行。
2. 本ガイドの「ノーコード iPaaS」セクションから、まずは Zapier または Make の無料トライアルで 課題作成フロー を構築。
3. 業務要件に合わせて Python スクリプトを作成し、レートリミットとログ出力のベストプラクティスを組み込む。
これらを踏まえて実装・運用すれば、Backlog と他ツール間のデータ連携がシームレスになり、プロジェクト管理全体の生産性向上へとつながります。
参考リンク(2026 年版)
| 項目 | URL |
|---|---|
| Backlog API 公式ドキュメント | https://backlog.com/ja/docs/api/ |
| OAuth 2.0 のサポート有無(要確認) | https://backlog.com/ja/docs/oauth/ |
| Zapier – Backlog Integration | https://zapier.com/apps/backlog/integrations |
| Make (Integromat) – Backlog シナリオ例 | https://www.make.com/en/templates/backlog |
| TROCCO 公式サイト | https://trocco.io/ |
| Biztex の iPaaS 事例ページ | https://service.biztex.co.jp/dx-hacker/ipaas/backlog-api/ |
本稿は執筆時点(2026 年 5 月)に基づく情報です。最新の公式情報を必ずご確認ください。