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)」するには?