Tips

【Backlog】(プログラミングなし)課題添付ファイルを一括ダウンロードする

Backlogにはファイルの保存場所が2種類あります。

  • プロジェクト直下の「ファイル」
  • プロジェクト内の「課題」にファイル添付(今回のターゲット)

ファイルをローカル環境にダウンロードしたい場合、前者は設定によりネットワークドライブとして容易にアクセスできるのに対し、後者は課題ごとにダウンロード操作が必要で、課題数が多くなるとちょっと大変ですので、APIを使って一括ダウンロードをやってみました。

今回は環境の制約でプログラミングツールが利用できず、Windows上のバッチファイルになりますので、多くの方に参考にしていただけるかと思います。(が、発生した問題については責任は負いかねますので自己責任でお願いします)

要件

  • Backlog
    • ダウンロード対象プロジェクトは1つ
    • 課題数は300課題以上(手動ではつらい)
    • 各課題には0~複数個の添付ファイルがある(添付ファイルがない課題もある)
    • ユーザーはBacklogの管理者権限を持つ(APIキーを発行できる)
  • ダウンロード先
    • Windows 10のPC
    • ファイルのダウンロード先は課題ごとにフォルダを分ける

手順

  • BacklogでAPIキー(64文字の文字列)を発行
    • 個人設定→API→登録
  • PCに作業用フォルダを作成
  • jqコマンド(jq-win64.exe)をダウンロードし、作業用フォルダに保存(jsonからcsvへの変換に利用)
  • 下記「バッチファイル」の内容を修正し、getfile.cmdというファイル名で作業用フォルダに保存
  • エクスプローラでgetfile.cmdをダブルクリック

バッチファイル

赤字の部分は要件に合わせて変更してください。

@echo off

rem BacklogのURLを設定 
set URL=https://***.backlog.jp 

rem 取得したAPIキーを設定
set KEY=************

rem プロジェクト名を設定
set PROJECT=PUROJEKUTO

rem プロジェクト内の課題数を設定
set MAXISSUE=100

rem UTF-8で処理(添付ファイル名の文字化け対策)
chcp 65001

rem 添付ファイル情報(課題キー、添付ファイルID、添付ファイル名)を取得しCSVで保存
if exist %PROJECT%.csv del %PROJECT%.csv
for /l %%I in (1,1,%MAXISSUE%) do (
echo getinfo: %PROJECT%-%%I
curl "%URL%/api/v2/issues/%PROJECT%-%%I/attachments?apiKey=%KEY%" -s | jq-win64.exe -r ".[]|[%%I,.id,.name]|@csv" >> %PROJECT%.csv
rem リクエスト毎に1秒待機
timeout /nobreak 1 > nul
)

rem 添付ファイル情報を1行ずつ読み込み、課題キー別のフォルダにダウンロード
for /f "delims=, tokens=1-3" %%a in (%PROJECT%.csv) do (
if not exist %PROJECT%-%%a md %PROJECT%-%%a
cd %PROJECT%-%%a
echo getfile: %PROJECT%-%%a %%c
curl "%URL%/api/v2/issues/%PROJECT%-%%a/attachments/%%b?apiKey=%KEY%" -s -o %%c
cd ..
rem リクエスト毎に1秒待機
timeout /nobreak 1 > nul
)

pause

参考にさせていただいた記事

BacklogのAPIを使って課題添付ファイルをまるごとダウンロードしてみた

Windowsのバッチファイルで「〇秒休止(sleep)」するには?

【バッチファイル】CSVファイルを読み込む

UTF-8のバッチファイルが文字化けする時の対処3選

 

にこごり
やってみた人しか気づかないことを書きます