Skip to content

input_data list: バルク系APIで補助情報を取得してAPI呼び出しを100倍削減#1490

Draft
Copilot wants to merge 4 commits intomainfrom
copilot/optimize-input-data-list
Draft

input_data list: バルク系APIで補助情報を取得してAPI呼び出しを100倍削減#1490
Copilot wants to merge 4 commits intomainfrom
copilot/optimize-input-data-list

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Nov 18, 2025

--with_supplementary_data_countオプション使用時、各入力データIDごとにgetSupplementaryDataList APIを呼び出していたため、1000件で1000回のAPI呼び出しが発生していました。

変更内容

  • AddingDetailsToInputData.add_supplementary_data_count_to_input_data_list()をバルク系API getSupplementaryDataInBulkを使用するように変更
  • APIの制限に対応: 最大100個のinput_data_idを1回のAPIで処理
  • 進捗ログの改善(1000件ごと + API呼び出し回数の表示)

パフォーマンス

入力データ件数 API呼び出し回数 (旧) API呼び出し回数 (新) 改善率
100件 100回 1回 100倍
1,000件 1,000回 10回 100倍
10,000件 10,000回 100回 100倍

実装例

# get_supplementary_data_in_bulk APIは最大100個のinput_data_idを受け付ける
MAX_INPUT_DATA_IDS_PER_REQUEST = 100

# 最大100件ずつ処理
end_index = min(initial_index + MAX_INPUT_DATA_IDS_PER_REQUEST, len(input_data_list))
sub_input_data_id_list = [e["input_data_id"] for e in sub_input_data_list]

# バルク系APIを使用して複数の入力データIDの補助情報を一度に取得
supplementary_data_list, _ = self.service.api.get_supplementary_data_in_bulk(
    self.project_id, 
    query_params={"input_data_id": sub_input_data_id_list}
)

# 各入力データに補助情報の個数を設定
supplementary_count_dict: dict[str, int] = {}
for supplementary_data in supplementary_data_list:
    input_data_id = supplementary_data["input_data_id"]
    supplementary_count_dict[input_data_id] = supplementary_count_dict.get(input_data_id, 0) + 1

影響範囲

Original prompt

This section details on the original issue you should resolve

<issue_title>input_data list : バルク系APIで補助情報を取得する</issue_title>
<issue_description># 現在の挙動
--with_supplementary_data_countを指定した場合は、入力データの個数だけ、getSupplementaryDataList APIを実行している。

$ annofabcli input_data list --project_id p1  --with_supplementary_data_count

解決したいこと

最近バルク系のAPIが作成されました。これは、複数の入力データIDの補助情報を1回のAPIで取得できます。
https://annofab.com/docs/api/#tag/af-supplementary/operation/getSupplementaryDataInBulk

このバルク系APIを使って、APIの実行回数を減らし、高速化したいです。

対応すべきコマンド

  • input_data list
  • input_data list_all</issue_description>

Comments on the Issue (you are @copilot in this section)


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI and others added 2 commits November 18, 2025 16:37
Co-authored-by: yuji38kwmt <6350027+yuji38kwmt@users.noreply.github.com>
Co-authored-by: yuji38kwmt <6350027+yuji38kwmt@users.noreply.github.com>
Copilot AI changed the title [WIP] Optimize input data list API for bulk supplementary data retrieval input_data list: バルク系APIで補助情報を取得してAPI呼び出しを200倍削減 Nov 18, 2025
Copilot AI requested a review from yuji38kwmt November 18, 2025 16:46
logger.debug(f"入力データの{initial_index}件目から{initial_index + len(sub_input_data_list) - 1}件目に紐づく補助情報を取得します。")

# バルク系APIを使用して複数の入力データIDの補助情報を一度に取得
supplementary_data_list, _ = self.service.api.get_supplementary_data_in_bulk(self.project_id, query_params={"input_data_id": sub_input_data_id_list})
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot get_supplementary_data_in_bulk APIのquery params であるinput_data_idに渡せる最大のinput_data_idは100個です。
また input_data_idには、カンマ区切りで指定する必要があります。

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ご指摘ありがとうございます。APIの100件制限に対応しました。

変更内容:

  • 最大100個のinput_data_idを1回のAPIで処理するように修正
  • URLクエリ長の計算ロジックを削除し、シンプルな実装に変更
  • input_data_idをカンマ区切りでAPIに渡す処理を追加

コミット: 08cb720

Co-authored-by: yuji38kwmt <6350027+yuji38kwmt@users.noreply.github.com>
Copilot AI changed the title input_data list: バルク系APIで補助情報を取得してAPI呼び出しを200倍削減 input_data list: バルク系APIで補助情報を取得してAPI呼び出しを100倍削減 Nov 18, 2025
Copilot AI requested a review from yuji38kwmt November 18, 2025 17:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

input_data list : バルク系APIで補助情報を取得する

2 participants