1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM watsonx Orchestrate ADK を使って Backlog に接続する AI Agent を作ってみた

Last updated at Posted at 2025-07-11

はじめに

IBM watsonx Orchestrate ADK(Agent Development Kit)を使って、プロジェクト管理ツールの Backlog と連携する AI Agent を作成してみました。この記事では、実際に動作するコードと手順を紹介します。

前提条件

watsonx Orchestrate ADK の環境と Backlog の環境は構築済みとします。ADK の環境構築については以下を参照してください

今回作成するもの

Backlog の課題(Issue)を取得する AI Agent を作成します。この Agent は以下の機能を持ちます。

  • Backlog の全課題を取得
  • 特定のプロジェクトに絞った課題の取得
  • 課題の詳細情報(ステータス、優先度、担当者など)の表示

実装手順

1. Backlog との接続設定

まず、watsonx Orchestrate ADK に Backlog への接続情報を設定します:

# Backlog コネクションの追加
orchestrate connections add -a backlog

# 接続設定の構成
orchestrate connections configure -a backlog --env draft --kind key_value --type team

# 認証情報の設定
orchestrate connections set-credentials -a backlog --env draft -e host=https://xxx.backlog.com -e apikey=xxx

設定項目の説明:

  • host: Backlog のベース URL(https://your-space.backlog.com
  • apikey: Backlog で発行した API キー

yaml でも設定できますが、ここではコマンドで設定しました。

2. 必要なパッケージの定義

Python ツールで使用するパッケージを requirements.txt に定義します:

requirements.txt
requests==2.32.3

3. Python ツールの実装

Backlog の課題を取得する Python ツールを実装します:

from typing import List, Optional, Dict, Any
import requests
from ibm_watsonx_orchestrate.agent_builder.tools import tool
from ibm_watsonx_orchestrate.run import connections
from ibm_watsonx_orchestrate.client.connections import ConnectionType

CONNECTION_BACKLOG = 'backlog'
CONNECTION_BACKLOG_HOST = 'host'
CONNECTION_BACKLOG_APIKEY = 'apikey'


@tool(
    expected_credentials=[
        {"app_id": 'backlog', "type": ConnectionType.KEY_VALUE}
    ]
)
def get_backlog_issues(project_id: Optional[int] = None) -> List[Dict[str, Any]]:
    """
    Fetch issues from Backlog.

    :param project_id: Optional project ID to filter issues by project
    :returns: List of Backlog issues with details
    """
    # 接続情報の取得
    base_url = connections.key_value(CONNECTION_BACKLOG)[
        CONNECTION_BACKLOG_HOST]
    url = f"{base_url}/api/v2/issues"

    headers = {
        'Accept': 'application/json'
    }

    # Backlog APIのパラメータ設定
    query_params = {
        'apiKey': connections.key_value(CONNECTION_BACKLOG)[CONNECTION_BACKLOG_APIKEY]
    }

    # オプションパラメータの追加
    if project_id:
        query_params['projectId[]'] = project_id

    # Backlog API の呼び出し
    response = requests.get(
        url,
        headers=headers,
        params=query_params
    )
    response.raise_for_status()
    data = response.json()

    # レスポンスの簡略化
    simplified_issues = []
    for issue_data in data:
        simplified_issue = {
            'id': issue_data['id'],
            'issueKey': issue_data['issueKey'],
            'keyId': issue_data['keyId'],
            'summary': issue_data['summary'],
            'description': issue_data.get('description'),
            'status': issue_data['status']['name'],
            'priority': issue_data['priority']['name'],
            'issueType': issue_data['issueType']['name'],
            'assignee': issue_data['assignee']['name'] if issue_data.get('assignee') else None,
            'created': issue_data['created'],
            'updated': issue_data['updated'],
            'startDate': issue_data.get('startDate'),
            'dueDate': issue_data.get('dueDate'),
            'estimatedHours': issue_data.get('estimatedHours'),
            'actualHours': issue_data.get('actualHours'),
            'category': [cat['name'] for cat in issue_data.get('category', [])],
            'versions': [ver['name'] for ver in issue_data.get('versions', [])],
            'milestone': [mile['name'] for mile in issue_data.get('milestone', [])]
        }
        simplified_issues.append(simplified_issue)

    return simplified_issues

コードの解説:

@tool デコレータで watsonx Orchestrate ADK のツールとして関数を定義しています。expected_credentials パラメータで必要な認証情報を指定することで、事前に設定した接続情報を自動的に利用できます。

connections.key_value() を使用して、事前に設定した接続情報を安全に取得しています。API キーなどの機密情報がコード内にハードコーディングされることを防げます。

response.raise_for_status() を使用して、HTTP エラーが発生した場合に適切な例外を発生させています。

Backlog API のレスポンスは非常に詳細なため、AI Agent が処理しやすいよう必要な情報のみを抽出して返却しています。

4. ツールのデプロイ

実装したツールを watsonx Orchestrate ADK にデプロイします:

orchestrate tools import -k python -f ./tools/get_backlog_issues.py -r ./tools/requirements.txt --app-id backlog

5. Agent の定義

ツールを呼び出す Agent の定義を行います(詳細な手順は省略)。Agent は自然言語での指示を受け取り、適切なツールを選択して実行します。

使用例

デプロイ後、以下のような自然言語で AI Agent に指示できます:

  • "Backlog の課題を教えて"
  • "プロジェクト ID 123 の課題を取得して"
  • "未完了の課題はありますか?"

まとめ

IBM watsonx Orchestrate ADK を使用することで、比較的簡単に Backlog と連携する AI Agent を作成できました。このパターンは他の REST API を持つサービスにも応用できるため、様々な業務システムとの連携が可能になります。

今後は課題の作成や更新機能も追加して、より実用的な AI Agent に発展させていきたいと思います。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?