TROCCOでBacklogのデータを転送してみた

# ✨️ TROCCOでBacklogのデータを抽出・転送できるようになりました！

# Backlogとは?
「言った言わないを無くすなら♪」でおなじみのタスク管理ツールです。
プロジェクト管理の現場で使われることが多く、私も長期の開発案件に携わっていた時に利用していたことがあります。

https://backlog.com/ja/

# TROCCOとは?

TROCCOは、データの連携・変換をスムーズに実現するクラウド型データ統合ツールです。
執筆者はTROCCOのカスタマーサクセスエンジニアをしています。

https://trocco.io/


:satellite_orbital: TROCCOで取得できるBacklogのデータ一覧（2025/04現在）

| 名前               | エンドポイント                                                                 |
|--------------------|-----------------------------------------------------------------------------|
| ユーザー一覧       | [`api/v2/users`](https://developer.nulab.com/docs/backlog/api/2/get-user-list/) |
| プロジェクト一覧   | [`api/v2/projects`](https://developer.nulab.com/docs/backlog/api/2/get-project-list/) |
| プロジェクトユーザー一覧 | [`api/v2/projects/{project_id_or_key}/users`](https://developer.nulab.com/docs/backlog/api/2/get-project-user-list/) |
| プロジェクト管理者一覧 | [`api/v2/projects/{project_id_or_key}/administrators`](https://developer.nulab.com/docs/backlog/api/2/get-project-administrator-list/) |
| Webhook一覧        | [`api/v2/projects/{project_id_or_key}/webhooks`](https://developer.nulab.com/docs/backlog/api/2/get-webhook-list/) |
| 課題一覧           | [`api/v2/issues`](https://developer.nulab.com/docs/backlog/api/2/get-issue-list/) |
| 課題コメント       | [`api/v2/issues/{issue_id_or_key}/comments`](https://developer.nulab.com/docs/backlog/api/2/get-comment-list/) |
| Wikiページ一覧     | [`api/v2/wikis`](https://developer.nulab.com/docs/backlog/api/2/get-wiki-page-list/) |
| Gitリポジトリ一覧  | [`api/v2/projects/{project_id_or_key}/git/repositories`](https://developer.nulab.com/docs/backlog/api/2/get-git-repository-list/) |
| プルリクエスト一覧   | [`api/v2/projects/{project_id_or_key}/git/repositories/{repo_id_or_name}/pullRequests`](https://developer.nulab.com/docs/backlog/api/2/get-pull-request-list/) |
| チーム一覧         | [`api/v2/teams`](https://developer.nulab.com/docs/backlog/api/2/get-team-list/) |

# 課題一覧のデータを抽出する

## 【Backlog】APIキーの発行

以下ヘルプを参考に、APIキーを発行します。

https://support-ja.backlog.com/hc/ja/articles/360035641754-API%E3%81%AE%E8%A8%AD%E5%AE%9A

## 【TROCCO】接続情報の作成

APIキーをペースト、ホスト名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/197b6258-ff13-4da0-b3fa-2be890909dc8.png)


ホスト名はBacklogにアクセスした時のURLから取得可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/d3fa83a0-2766-4eb2-b2ef-645d92dcb851.png)


## 【TROCCO】転送設定の作成

転送元Backlog側の設定としては、取得対象を選択するだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/8740b4b5-0076-44fd-b4ca-f705ab5f34fd.png)

今回は転送先にSnowflakeを選択しました。

プレビューが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/fb8b62ad-ddf6-4dcb-b1f8-a1149730517b.png)


<details><summary>課題一覧から取得できる項目</summary>

| 項目             | 項目の日本語訳         | データ型   |
|------------------|----------------------|----------|
| id               | 課題ID               | long     |
| projectId        | プロジェクトID         | long     |
| issueKey         | 課題キー             | string   |
| keyId            | 課題キーID           | long     |
| issueType        | 課題種別             | json     |
| summary          | 件名                 | string   |
| description      | 説明                 | string   |
| resolution       | 完了区分             | json     |
| priority         | 優先度               | json     |
| status           | 状態                 | json     |
| assignee         | 担当者               | json     |
| category         | カテゴリー           | json     |
| versions         | 発生バージョン         | json     |
| milestone        | マイルストーン         | json     |
| startDate        | 開始日               | timestamp|
| dueDate          | 期限日               | timestamp|
| estimatedHours   | 予定時間             | long     |
| actualHours      | 実績時間             | long     |
| parentIssueId    | 親課題ID             | long     |
| createdUser      | 登録者               | json     |
| created          | 登録日時             | timestamp|
| updatedUser      | 更新者               | json     |
| updated          | 更新日時             | timestamp|
| customFields     | カスタム属性         | json     |
| attachments      | 添付ファイル         | json     |
| sharedFiles      | 共有ファイル         | json     |
| externalFileLinks| 外部ファイルリンク     | json     |
| stars            | スター               | json     |

</details>

`resolution`(完了区分)や`priority`(優先度),`status`(ステータス)やissueTypeといった重要な項目はJSONの中にギュッとまとまっています。

`resolution`
```json
{"id":0,"name":"Fixed"}	
```

`priority`
```json
{"id":3,"name":"Normal"}	
```

`status`
```json
{"projectId":610622,"displayOrder":1000,"id":1,"name":"Open","color":"#ed8077"}	
```

`issueType`
```json
{"projectId":610622,"displayOrder":2,"id":3225399,"name":"要望","color":"#ff9200"}	
```

転送した先でクエリにて処理してしまうのも手ですが、いずれの項目も実際に使うのは`name`部分かと思います。
ので、TROCCO上で取り出してしまいます。

jsonパスでname部分を取り出すよう指定します。
といっても、各項目を指定し、JSONパスに`name`を指定していくのみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/f52e31e3-3c02-43d8-ad97-6de3d663f88a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/351df0ff-a82e-4cee-9336-3e783ea408c8.png)


再度プレビューを通します。スッキリ!!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/a5a7a66d-aa4f-4715-af7d-0199d9052223.png)


保存して、ジョブを実行してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/78758bfd-5530-482b-b913-05b1550602d8.png)

Snowflakeへのデータ転送が完了しました!!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/9bcf035a-d4fb-492f-9e86-32632e6e465f.png)

Backlogの課題一覧の表示に近づけられたので、この後の加工イメージが浮かびます⏬️
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3033246/cd9844de-16ba-4fbc-9bcf-5f475678956a.png)

# 感想など

簡単にBacklogからのデータ抽出ができました!!
JSONに色々詰まっていて、パット見大変そうだなぁと思いますが、よく使う項目はJSONパス指定でシュッと取り出せます。

Backlogのデータを用いて

* どのような課題種別が多く起票されているのか
* そのクローズ率やクローズまでにかかる日数はどのくらいか

などなどを集計しダッシュボード化することで、チームの生産性管理や改善のアクションにに繋げられそうですね!!


この記事を見てくださった方の、なにか少しでもお役に立てていたらならば幸いです🙏