Backlogにおける「課題へのファイル添付」と「共有ファイルへのリンク」の使い分け

こんにちは、金田です。
今回はちょっとだけプロジェクトの運営にも関わるお話です。
Backlogユーザーの皆さんは、課題にファイルを紐づける際に「課題へのファイル添付」と「共有ファイルへのリンク」のどちらを利用されているでしょうか?
多くの人は課題の作成時やコメント投稿に合わせて「課題へのファイル添付」を利用されているのではないかと思います。

弊社でもBacklog導入当初はそうでした。ですが、プロジェクトが長く続くにつれて課題の添付ファイルが不便だなと思うシーンが増えてきてしまいました。例えば下記のようなシーンです。

  • ファイル名で検索しても課題の詳細やコメントにヒットしてしまい、目的のファイルが添付された課題を思うように検索できない
  • 課題にファイルが添付された日付で探そうとしても、課題の更新日でしか探せない
  • 一つの課題に同名の複数ファイルが添付できてしまう
【47ファイルも添付されてしまった課題】

このような悩み、皆さんの周囲でも挙がっていませんか?同じような悩みを抱えていた弊社のとあるプロジェクトでは、「課題へのファイル添付をやめ、共有ファイルにアップロードしたうえで課題にリンクを貼る」ことをルールとしました。

ただ、長く続けているプロジェクトだけあってすべての課題から添付ファイルを取り出して共有ファイルに移し、さらに添付ファイル削除、共有ファイルへのリンク設定・・・と、これを手動でやるのには無理があります。(そのプロジェクトは課題数が8000を超えていました。)

【8000を超えた課題数】

ここでBacklog APIの登場です。Backlog APIでは「すべての課題の取得」「指定した課題からの添付ファイルのダウンロード」「課題への共有ファイルのリンク追加」などが可能ですので、実現は容易でした。また、共有ファイルの操作は「WebDAV」という機能を利用することができるので、共有ファイルへの移動も難しくありません。(いずれもPythonで作っています。以下はソースコードの一部です。)

save_file_path = os.path.join(download_save_dir, file_name)
 with open(save_file_path, 'wb') as save_file:
     save_file.write(attach_file_data.content)
 upload_path = consts.SLASH.join([server_path, file_name])
 client.upload_file(remote_path=upload_path, local_path=save_file_path)
 file_id = get_file_id(project_id, issue['issueKey'], file_name)
 link_result = backlog_util.set_link_to_issue(issue['issueKey'], file_id)

下図はBacklog助っ人デモ用のプロジェクトでAPIを利用して添付ファイルを共有ファイルへ移動した際のイメージです。ここでは同名ファイルの重複を避けるため、課題ごとにフォルダを作成しています。また、「ある意図」で添付ファイルのない課題の分のフォルダも作成するようにしました。

なお共有ファイルでは同名ファイルを保持できないので、このプロジェクトでは同一課題内に同一名称のファイルが複数存在する場合「後勝ち」にするようにしました。このあたりは例えばファイル名にタイムスタンプを足してすべての添付ファイルを残すなど、プロジェクト毎のさじ加減次第かと思います。

【自動で生成されたフォルダのイメージ】

ここまでの取り組みと合わせて、このプロジェクトではBacklogの「Webhook」を利用して、共有ファイルの課題ごとのフォルダにファイルがアップロードされたらその課題に共有ファイルのリンクを追加する仕掛けを作りました。これが前述の「ある意図」です。

【Webhookの利用】

この2つの仕組みで、このプロジェクトのファイル管理はかなりスッキリしました。あとは「課題が追加されたら共有ファイルにフォルダを作成するWebhook」を用意すれば完璧ですね。

いかがでしたでしょうか。もし同じような悩みをお持ちの方、この仕組みに興味を持たれた方は、お気軽にフォームからお問い合わせください!

助っ人サービスへのお問い合わせはこちら kintone for 助っ人サービス おっと発見OTTO