はじめに
こんにちは。GMO NIKKOの石丸です。
私が所属する部署では案件管理にBacklogを活用していますが、Backlogプロジェクトの容量削減の一環で課題に添付されたファイルやファイル容量の一覧を抽出することになりました。
Backlogの画面上で課題に添付されたファイルの詳細を確認するには課題を一つずつ開く必要があるため、課題が大量に作成されたプロジェクトで課題添付ファイルの一覧やファイル容量を確認するには非常に時間がかかってしまいます。
Backlogには課題添付ファイルの詳細を取得するためのAPIが用意されているため、今回はAPIを活用してプロジェクト内の課題添付ファイルの一覧や各ファイルの容量を取得しました。
本記事ではBacklog APIを使う手順や実際に使ったスクリプトを紹介します。
前準備
Backlog APIを使うための毎準備として、まずはAPIキーを発行します。
公式のドキュメントの通り、個人設定>APIキーからAPIキーを発行します。
APIの設定 – Backlog ヘルプセンター
https://support-ja.backlog.com/hc/ja/articles/360035641754-APIの設定
課題添付ファイルの一覧取得
今回は以下のAPIを利用しました。
課題添付ファイル一覧の取得 | Backlog Developer API | Nulab
https://developer.nulab.com/ja/docs/backlog/api/2/get-list-of-issue-attachments/
公式のドキュメントを参考に、まずは curl
で課題添付ファイルを取得してみます。
1 |
$ curl "https://{backlog_domain}/api/v2/issues/{issue_key}/attachments?apiKey={api_key}" |
backlog_domain
はBacklogのドメイン、issue_key
は取得したい課題のキー、api_key
は先程発行したAPIキーを指定してください。
curlを実行した結果はこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[ { "id": xxxxx, "name": "sample.png", "size": 10000, "createdUser": { "id": 12345, "userId": "xxxxxx@xxxxx", "name": "xxxxxx", "roleType": x, "lang": "ja", "mailAddress": "xxxxx@xxxx", "nulabAccount": { "nulabId": "xxxxxx", "name": "xxxx", "uniqueId": "xxx" }, "keyword": "xxxxx", "lastLoginTime": "xxxxxxx" }, "created": "xxxxxx" }, ... |
name
にファイル名、size
にファイルサイズの情報が含まれていたため、この情報を元に複数の課題キーからファイル名とファイル容量の一覧を取得するスクリプトを作成しました。
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 |
require 'rest-client' require 'json' require 'csv' # BacklogのドメインとAPIキーを設定 backlog_domain = 'YOUR_BACKLOG_DOMAIN' api_key = 'YOUR_API_KEY' # 取得したい課題のIDのリスト issue_ids = ['YOUR_ISSUE_ID1', 'YOUR_ISSUE_ID2'] # 例: ['EXAMPLE-1', 'EXAMPLE-2'] # 出力ファイル名 output_file = 'attachments.csv' CSV.open(output_file, 'w') do |csv| # CSVヘッダー csv << ['課題ID', 'ファイル名', 'ファイルサイズ(バイト)'] issue_ids.each do |issue_id| api_url = "https://#{backlog_domain}/api/v2/issues/#{issue_id}/attachments?apiKey=#{api_key}" begin response = RestClient.get(api_url) attachments = JSON.parse(response.body) attachments.each do |attachment| csv << [issue_id, attachment['name'], attachment['size']] end sleep 0.1 # APIのレート制限を避けるため待機 rescue RestClient::ExceptionWithResponse => e puts "エラーが発生しました: #{e.response}" end end end puts "#{output_file} に出力されました。" |
上記のスクリプトを実行することで、課題ID, ファイル名, ファイルサイズ(バイト) のCSVが出力されます。
取得したい課題キー(ID)の一覧はAPIで取得することも可能ですが、今回はBacklogの画面上で「高度な検索」から「添付ファイル有」で検索し、CSVで課題キーの一覧を取得しました。
課題の検索やCSVのダウンロード方法については、以下のドキュメントをご確認ください。
Backlog の課題を検索する – Backlog ヘルプセンター
https://support-ja.backlog.com/hc/ja/articles/360035642594-Backlog-の課題を検索する
課題検索結果一覧の出力 – Backlog ヘルプセンター
https://support-ja.backlog.com/hc/ja/articles/360035642534-課題検索結果一覧の出力
レート制限について
BacklogにはAPIのレート制限があるため、環境に合わせてリクエストの間隔を調整する必要があります。
レート制限 | Backlog Developer API | Nulab
https://developer.nulab.com/ja/docs/backlog/rate-limit/
今回は仮で sleep 0.1
を追加してレート制限を回避しました。
レート制限の情報はAPIで取得することが可能です。
1 |
$ curl "https://{backlog_domain}/api/v2/rateLimit?apiKey={api_key}" |
レート制限情報の取得 | Backlog Developer API | Nulab
https://developer.nulab.com/ja/docs/backlog/api/2/get-rate-limit
まとめ
今回はBacklog APIを利用して課題添付ファイルの一覧を取得する方法を紹介しました。
Backlog APIには課題添付ファイルのダウンロードや削除用のAPIも用意されているため、これらを活用することで効率的にプロジェクトの容量を削減することが可能です。
他にも様々なAPIが提供されているため、興味がある方は以下のドキュメントをご覧ください。
Backlog API とは | Backlog Developer API | Nulab
https://developer.nulab.com/ja/docs/backlog/
2016卒のWebエンジニア。
採用やマネジメントもやってます。