【Backlog】課題の添付ファイルを一括でダウンロードする

Webディレクター
この記事は約6分で読めます。

はじめに

Backlogから他のツールへの移行時など、今までBacklog上に積み上がったデータをバックアップしたくなる機会があると思います。

基本的には、公式の対応が充実しているため、バックアップは容易に行えるようになっていますが、一点、課題の添付ファイルのダウンロードはGUIとして機能が提供されていないため、若干ハードルが高くなっています。とはいえ、APIとして必要な機能が提供されていますので、やり方さえわかってしまえば意外と簡易に対応が可能だったりします。

参考となる情報もネット上で様々な方が共有してくれているので、自分でもそれらの情報を参考に実行してみることにました。

結果的に、スムーズに実行できましたので、ここで行なったことをまとめて記載してみます。

事前に必要な情報を集める

API Key

Backlogの設定画面から簡単に発行が可能です。

発行方法は、下記の公式ドキュメントを参照してください。

Just a moment...

ドメイン

xx.backlog.jp
または
xx.backlog.com
です(xxは組織によって異なる)

課題のIDまたは課題キー・添付ファイルのID

APIアクセスに利用します。
※実際の使い方は公式ドキュメント参照。

課題添付ファイルのダウンロード | Backlog Developer API | Nulab
Backlog APIを使って、プロジェクト管理ツール Backlog と連携

課題のIDまたは課題キーの取得方法

1.
作業をしたいプロジェクトの課題一覧ページ画面を開きます。

2.
検索条件:高度な検索
その他にある添付ファイル有:チェック入れる

3.
自動的に添付ファイルがある課題の一覧が表示されます。

4.
課題一覧が表示されている右上の方の「・・・」をクリックします。(まとめて操作、表示設定の右にあります)

5.
CSVを選ぶと、表示されている課題の一覧がそのままcsvファイルでダウンロードされます。

6.
ダウンロードされたファイルを開き、「キー」列にある情報が課題キーになります。
件名などを見て、添付ファイルをダウンロードしたいキーをコピペしてメモしておきます(まとめてダウンロードしたい場合は、すべてコピペしてメモしておきます)

なお、添付ファイルのIDはスクリプト上で取得するので、手作業での取得は不要です。

手順

準備ができましたので、実際にダウンロードを行なっていきます。

参考とさせていただきました、元となるスクリプトは下記となります。
元のスクリプトでは、該当する課題に存在する添付ファイルの一覧をcsvファイルにまとめて出力するという機能でしたので、それにプラスして添付ファイルをダウンロードする機能を追記しています。
元ファイルがRubyで記載されており、それを流用していますので、こちらもRubyでの動作になります。

【Backlog API】プロジェクト内の課題添付ファイルの一覧やファイル容量を取得する方法
はじめにこんにちは。GMO NIKKOの石丸です。私が所属する部署では案件管理にBacklogを活用していますが、Backlogプロジェクトの容量削減の一環で課題に添付されたファイルやファイル容量の一...
require 'rest-client'
require 'json'
require 'csv'
require 'open-uri' # 追記

# 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', 'ID', 'ファイル名', 'ファイルサイズ(バイト)'] # 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['id'], attachment['name'], attachment['size']] # IDを追記

        # ダウンロード処理を追記
        uri_str = "https://#{backlog_domain}/api/v2/issues/#{issue_id}/attachments/#{attachment['id']}?apiKey=#{api_key}"
        URI.open(uri_str) do |res|
          IO.copy_stream(res, "#{issue_id}_#{attachment['id']}_#{attachment['name']}")
        end
      end

      sleep 0.1 # APIのレート制限を避けるため待機
    rescue RestClient::ExceptionWithResponse => e
      puts "エラーが発生しました: #{e.response}"
    end
  end
end

puts "#{output_file} に出力されました。"

上記を適当なファイル名(backlogdownload.rbなど)で保存します。

ファイル上にコメントがありますが、実行前にそれぞれ自分で書き換えないといけない場所があります。

backlog_domain = ‘YOUR_BACKLOG_DOMAIN’

「YOUR_BACKLOG_DOMAIN」に、先ほど準備したドメイン名をいれます。
backlog_domain = ‘xx.backlog.jp’
といった表記になります。

api_key = ‘YOUR_API_KEY’

「YOUR_API_KEY」に、先ほど準備したAPI Keyをいれます。
api_key = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’
といった表記になります。

issue_ids = [‘YOUR_ISSUE_ID1’, ‘YOUR_ISSUE_ID2’]

「’YOUR_ISSUE_ID1′, ‘YOUR_ISSUE_ID2’」に先ほど準備した課題キーをいれます。
issue_ids = [‘XXX-3’, ‘XXX-43’]
といった表記になります。

以上3点を書き換えてし、スクリプトを実行すると、該当する課題の添付ファイルのダウンロードと、該当ファイルの一覧をcsvで出力することができます。