Backlog×AI検索を実現する「backlog-exporter」を作ってみた

Backlog×AI検索を実現する「backlog-exporter」を作ってみた

Backlogのデータをローカルにマークダウンファイルとしてエクスポートし、AIツールで効率的に検索できるようにする「backlog-exporter」を紹介。コマンド一発で課題とWikiを一括ダウンロードでき、情報検索の効率が大幅に向上します。
Clock Icon2025.03.03

こんにちは、リテールアプリ共創部の戸田駿太です。
今回は Backlog の検索を効率化するツールを作成したので、その紹介をします!

はじめに

みなさん、Backlog で情報を探すのに苦労したことはありませんか?私は最近の案件で、Backlog、Notion、Slack、GitHub など複数のツールに情報が散らばっていて、必要な情報を見つけるのにかなり時間を取られていました。

今回は Backlog に焦点を当てて以下の内容を解決したいと思いました。

  • 検索機能だけでは欲しい情報がなかなか見つからない
  • 課題と Wiki が分かれていて、両方を検索する必要がある
  • 複数のワークスペースを行き来する必要があり、非効率

「これはなんとかならないか?」と思い、backlog-exporter というツールを作ってみました!

backlog-exporter とは?

backlog-exporter は、Backlog のデータをローカルにマークダウンファイルとしてエクスポートするシンプルな CLI ツールです。エクスポートしたデータを Copilot や Cursor などの AI ツールで検索することで、RAG(Retrieval Augmented Generation)のような機能を実現できます。

使い方はめちゃくちゃ簡単!

npm をインストールしている環境であれば、以下のコマンド一発で実行できます:

npx backlog-exporter@latest all --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー

これだけで、Backlog の課題と Wiki がローカルにダウンロードされます!

必要情報の取得方法

コマンドを実行するには 3 つの情報が必要です。それぞれの取得方法を説明します。

1. ドメインとプロジェクトキーの取得方法

Backlog のプロジェクトページを開くと、URL から簡単に取得できます。

例えば、以下のような URL の場合:

https://example.backlog.jp/projects/PROJECT1
  • ドメイン: example.backlog.jp
  • プロジェクトキー: PROJECT1

2. API キーの取得方法

こちらの公式の記事を参考にしてください。
https://support-ja.backlog.com/hc/ja/articles/360035641754-APIの設定

何ができるの?

backlog-exporter では、以下の 4 つのコマンドが使えます:

1. 課題だけをエクスポートする

npx backlog-exporter@latest issue --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー

2. Wiki だけをエクスポートする

npx backlog-exporter@latest wiki --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー

3. 課題と Wiki を一括エクスポートする

npx backlog-exporter@latest all --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー

4. データを更新する(新機能!)

npx backlog-exporter@latest update

出力先を変えたい場合は、--outputオプションを追加するだけです:

npx backlog-exporter@latest all --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー --output ./my-backlog-data

コマンドオプションの詳細

backlog-exporter の各コマンドには、様々な便利なオプションがあります。

共通オプション

以下のオプションは、すべてのコマンド(issue、wiki、all)で使用できます:

  • --domain <値>: Backlog のドメイン(例:example.backlog.jp)【必須】
  • --projectIdOrKey <値>: Backlog のプロジェクト ID またはプロジェクトキー【必須】
  • --apiKey <値>: Backlog の API キー(環境変数 BACKLOG_API_KEY からも自動読み取り可能)
  • --output <値>: 出力ディレクトリのパス(デフォルトはコマンドによって異なる)

issue コマンドの特有オプション

npx backlog-exporter@latest issue --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー [オプション]
  • --count <値> または -c <値>: 一度に取得する課題数(デフォルト: 100)
    • 大量の課題がある場合に調整すると便利です
  • --statusId <値>: 特定のステータス ID でフィルタリング
    • 例えば、「未対応」や「処理中」の課題だけを取得したい場合に使用します
  • --output <値> または -o <値>: 出力ディレクトリのパス(デフォルト: ./backlog-issues

wiki コマンドの特有オプション

npx backlog-exporter@latest wiki --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー [オプション]
  • --output <値> または -o <値>: 出力ディレクトリのパス(デフォルト: ./backlog-wiki

all コマンドの特有オプション

npx backlog-exporter@latest all --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー [オプション]
  • --count <値> または -c <値>: 一度に取得する課題数(デフォルト: 100)
  • --statusId <値>: 特定のステータス ID でフィルタリング
  • --issueOutput <値>: Issue 出力ディレクトリパス(デフォルト: ./backlog-issues
  • --wikiOutput <値>: Wiki 出力ディレクトリパス(デフォルト: ./backlog-wiki

update コマンドの特有オプション(新機能!)

npx backlog-exporter@latest update [ディレクトリ] [オプション]
  • ディレクトリ: 更新対象のディレクトリ(設定ファイルが保存されている場所)
  • --force または -f: 確認プロンプトをスキップする
  • --issuesOnly: 課題のみを更新する
  • --wikisOnly: Wiki のみを更新する
  • --apiKey <値>: Backlog API キー(環境変数 BACKLOG_API_KEY からも自動読み取り可能)
  • --domain <値>: Backlog ドメイン(設定ファイルが存在する場合は上書きされます)
  • --projectIdOrKey <値>: Backlog プロジェクト ID またはキー(設定ファイルが存在する場合は上書きされます)

使用例

特定のステータスの課題だけを取得する:

npx backlog-exporter@latest issue --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー --statusId 1

一度に取得する課題数を増やす(大規模プロジェクト向け):

npx backlog-exporter@latest issue --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー --count 500

課題と Wiki を別々のディレクトリに保存する:

npx backlog-exporter@latest all --domain あなたのドメイン.backlog.jp --projectIdOrKey プロジェクトキー --apiKey あなたのAPIキー --issueOutput ./issues --wikiOutput ./wikis

カレントディレクトリとそのサブディレクトリのデータを更新する:

npx backlog-exporter@latest update --apiKey あなたのAPIキー

指定したディレクトリとそのサブディレクトリのデータを更新する:

npx backlog-exporter@latest update --apiKey あなたのAPIキー ./my-project

確認プロンプトをスキップして更新する:

npx backlog-exporter@latest update --apiKey あなたのAPIキー --force

課題のみを更新する:

npx backlog-exporter@latest update --apiKey あなたのAPIキー --issuesOnly

エクスポートされるファイルのフォーマット

backlog-exporter でエクスポートされるファイルは、検索しやすいように整形されたマークダウン形式です。

課題(Issue)のフォーマット

課題は以下の形式で Markdown ファイルとして保存されます:

# 課題のタイトル

## 基本情報

- 課題キー: PROJ-123
- ステータス: 処理中
- 優先度: 高
- 担当者: 山田太郎
- 作成日時: 2023/01/01 10:00:00
- 更新日時: 2023/01/02 15:30:45
- [Backlog Issue Link](https://example.backlog.jp/view/PROJ-123)

## 詳細

ここに課題の詳細説明が入ります。

## コメント

### コメント 1

- **投稿者**: 佐藤次郎
- **日時**: 2023/01/01 11:15:30

コメントの内容がここに表示されます。

---

### コメント 2

- **投稿者**: 鈴木三郎
- **日時**: 2023/01/02 09:45:12

返信コメントの内容がここに表示されます。

Wiki のフォーマット

Wiki は以下の形式で Markdown ファイルとして保存されます:

# Wiki のタイトル

[Backlog Wiki Link](https://example.backlog.jp/alias/wiki/12345)

ここに Wiki の本文内容が入ります。
Backlog の書式がそのまま保持されます。

このようにフォーマットされたファイルは、テキストエディタでの閲覧だけでなく、AI ツールでの検索・解析にも最適化されています。

データの更新機能について(新機能!)

エクスポートしたデータを最新の状態に保つために、updateコマンドが追加されました。このコマンドは、ディレクトリ内のbacklog-settings.jsonファイルを探索し、見つかったディレクトリでデータを更新します。

更新機能の特徴

  • 再帰的な探索: 指定したディレクトリとそのサブディレクトリを再帰的に探索し、設定ファイルが見つかった場所でデータを更新します
  • 選択的な更新: 課題のみ、または Wiki のみを更新することができます
  • 確認プロンプト: 更新前に確認メッセージを表示し、ユーザーの承認を得るようになっています(--forceオプションでスキップ可能)
  • 設定の上書き: コマンドラインで指定したパラメータで設定ファイルを上書きすることができます

更新の流れ

  1. updateコマンドを実行すると、指定したディレクトリ(デフォルトはカレントディレクトリ)とそのサブディレクトリを探索します
  2. backlog-settings.jsonファイルが見つかったディレクトリで、設定に基づいてデータを更新します
  3. 更新前に確認プロンプトが表示され、ユーザーの承認を得てから更新を実行します
  4. 更新が完了すると、設定ファイルのlastUpdatedフィールドが更新されます

この機能により、一度エクスポートしたデータを簡単に最新の状態に保つことができます。定期的に更新することで、常に最新の情報を手元に持つことができます。

使ってみる

手順

  1. コマンドを実行してローカルに保存する
  2. Cursor で検索をする

実際の出力

プロンプト

ファイルの内容を検索して、次に行うべき課題を締め切り順にリストアップしてください

AI の回答

まず、プロジェクト内のファイルを探索して、課題に関する情報を見つけていきます。

AI がファイル検索している時のログ

Ran tool

プロジェクト内に「issues」というディレクトリがあるようです。これは課題に関連する情報が含まれている可能性が高いので、まずはこのディレクトリの内容を確認します。

Ran tool

多くの課題ファイルが見つかりました。これらのファイルから締め切り順に課題をリストアップするために、いくつかのファイルの内容を確認して、締め切り情報を探します。

まず、優先度が高いと思われるファイルを確認してみましょう。

Read file: issues/タスク 1:プロジェクト A.md
Read file: issues/タスク 2:プロジェクト B(対象 1、対象 2).md
Read file: issues/20250120 テスト実施.md
Read file: issues/タスク 1:プロジェクト A.md
Read file: issues/タスク 2:プロジェクト B(対象 1、対象 2).md
Read file: issues/タスク 3:プロジェクト C.md
Read file: issues/タスク 1:プロジェクト A.md

これまでの調査結果から、締め切り順に課題をリストアップします。

# 締め切り順の課題リスト

## 3 月中に完了すべき課題

1. **タスク 1:プロジェクト A**

   - 締め切り: 2025 年 3 月末まで
   - 優先度: 中
   - ステータス: 未対応
   - 概要: 定期的な対応として、毎年 3 月中に必要な作業を実施する必要がある。

2. **タスク 2:プロジェクト B**
   - 締め切り: 2025 年 3 月 10 日
   - 優先度: 中
   - ステータス: 処理中
   - 概要: 複数対象への機能展開作業と関連システム改修作業

## 2 月末までに完了すべき課題(緊急対応が必要)

1. **タスク 3:プロジェクト C**
   - 締め切り: 2025 年 2 月 20 日(本番リリース)
   - 優先度: 中
   - ステータス: 受入テスト中
   - 概要: 特定機能の設定作業。現在、外部からの問題報告があり対応が必要。

## その他の進行中の課題

以下の課題も進行中ですが、具体的な締め切りが明確でないか、すでに完了している可能性があります:

1. **タスク 4:プロジェクト D の設定追加**
2. **タスク 5:プロジェクト E の恒久対応**
3. **タスク 6:プロジェクト F**
4. **タスク 7:プロジェクト G の見直し**
5. **タスク 8:ドキュメント作成**
6. **タスク 9:特殊対応の実施**
7. **タスク 10:ツール開発**
8. **タスク 11:システム間連携の改善**
9. **タスク 12:エラー処理の改善**
10. **タスク 13:ユーザー操作時の処理改善**

これらの課題については、詳細な締め切り情報が見つからなかったため、優先順位を正確に判断するには追加の情報が必要です。

## 注意事項

- タスク 3 は 2 月 20 日が本番リリース予定でしたが、現在外部から問題の報告があり、緊急対応が必要かもしれません。
- タスク 2 は 3 月 25 日に実施予定の作業があり、事前準備が必要です。
- タスク 1 は 3 月末までに完了する必要があります。

以上が現在確認できた締め切り順の課題リストです。より詳細な情報や他の課題の締め切りを知りたい場合は、追加の調査が必要です。

実際に使ってみた感想

このツールを使ってみて、情報検索の効率が格段に上がりました!
先ほどの「使ってみる」で実施した内容も本来であればいくつも Backlog のページを開いて検索する必要があります。それを AI がまとめてくれるおかげで作業効率爆上がり間違いなしです!

既存の手順との違い

例えば、「認証機能の仕様について調べたい」と思ったとき、以前なら:

  1. Backlog にログイン
  2. Wiki を検索
  3. 見つからなければ課題も検索
  4. 別のワークスペースも確認
  5. それでも見つからなければ Slack や Notion も...

という感じで、かなり時間がかかっていました。

しかし、backlog-exporter を使うと:

  1. ローカルのエクスポートしたデータフォルダを VS Code で開く
  2. Copilot や Cursor のチャット機能で「認証機能の仕様について教えて」と質問

これだけで、関連する情報がすぐに見つかります!Copilot や Cursor のチャット機能を使えば、AI が関連情報を整理して要約してくれるので、さらに便利です。

開発してみた感想

このツールの開発には Cursor のエージェント機能を活用しました。ほとんどのコードはエージェントが生成し、私は最初の設計と名前変更などの軽微な修正を行うだけでした。わずか 5 時間ほどで開発が完了したのは、AI の力のおかげです!

今後の展望

今後は以下の機能を追加していきたいと考えています:

  • 他のプロジェクト管理ツール(Jira や Asana など)への対応
  • マークダウン変換の精度向上
  • 定期的な自動同期機能
  • MCP(Microsoft Copilot)との連携強化:エクスポートしたデータを MCP のプラグインとして利用できるようにし、AI がより効率的に情報を検索・要約できる環境を構築したいと考えています。MCP の進化に合わせて、より使いやすいインターフェースを提供することで、チーム全体の生産性向上を目指します。

その他の特徴

  • 環境変数サポート: 環境変数 BACKLOG_API_KEY を使用して API キーを設定可能
  • 自動ディレクトリ作成: 出力ディレクトリが存在しない場合は自動的に作成
  • 並列処理: 並列処理による高速なダウンロード
  • ファイル名サニタイズ: ファイル名の自動サニタイズ(不正な文字の除去)
  • 階層構造の保持: Wiki の階層構造を保持したエクスポート

まとめ

情報過多の時代において、必要な情報を効率的に見つけ出す方法は常に課題です。backlog-exporter は、API と AI の力を組み合わせることで、この課題に対する一つの解決策を提供しています。

ぜひ試してみてください!フィードバックもお待ちしています。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.