Pleasanter Export APIとGet API(api-record-get-multi)の処理時間比較機能の設計をまとめた。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4.4 KiB
4.4 KiB
Export/Get方式切替 設計書
背景・目的
現状 Module1.bas はPleasanterの Export API(CSV全件取得)でデータを取得し、CSVパース後にテーブルへ書き込んでいる。これに加えて Get API(api-record-get-multi)でデータを取得する方式を追加し、基本情報シートのセルで方式を切り替えて実行できるようにする。両方式の処理時間を比較できるよう、開始・終了時刻と経過秒数をシートに記録する。
対象件数は200件以下を想定し、ページング処理は考慮しない。
セル配置(基本情報シート)
| セル | 内容 |
|---|---|
| D3 | ステータスメッセージ(「取込処理中...」「取込処理完了」) |
| D4 | 処理開始時刻(Now) |
| D5 | 処理終了時刻(Now) |
| D6 | 経過秒数((D5 - D4) * 86400 の数値) |
| D7 | 取得方式("Export" または "Get"。未入力・それ以外の値は "Export" 扱い) |
全体フロー(Sub run())
Sub run()
Call init ' defaultSh, tableId, apiKey, baseURL, fetchMethod(D7の値) をセット
defaultSh.Range("D4").Value = Now
defaultSh.Range("D3").Value = "取込処理中..."
Application.ScreenUpdating = False
Application.Calculation = xlManual
Select Case fetchMethod
Case "Get"
Call runGetFlow
Case Else
Call runExportFlow
End Select
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
defaultSh.Range("D5").Value = Now
defaultSh.Range("D6").Value = (defaultSh.Range("D5").Value - defaultSh.Range("D4").Value) * 86400
defaultSh.Range("D3").Value = "取込処理完了"
End Sub
init()にfetchMethod = defaultSh.Range("D7").Valueの読み込みを追加する。runExportFlowは既存のexportCSVData→exportCSVDataToSheet呼び出しをそのまま移設したもの(ロジック無変更)。runGetFlowは新規追加のgetRecordsData→getRecordsDataToSheetを呼ぶ。
Export方式(既存・無改造)
exportCSVData / exportCSVDataToSheet / ParseCsv / CollectionToArray は一切変更しない。
Get方式(新規追加)
getRecordsData(tableId As String) As Collection
Pleasanterの api-record-get-multi を呼び出し、レコード配列(Collection of Dictionary)を返す。
- エンドポイント:
POST {baseURL}/pleasanter/api/items/{tableId}/get - リクエストボディ:
ApiVersion,ApiKey,View: { PageSize: 200 }(200件以下想定のため1回のリクエストで取得しきる) - レスポンス:
res("Response")("Data")("Results")を返す(各要素はレコードのDictionary) - 既存の
callRestApiをそのまま利用する
getRecordsDataToSheet(records As Collection, targetSheet As String)
exportCSVDataToSheet とは完全に独立した新規関数として実装する(既存ロジックへの影響を避けるため共通化しない)。
records.count = 0の場合はメッセージ表示して終了- ヘッダは 1件目のレコードのキー一覧をそのまま使用(
Title,Body,ClassA,DateAなどPleasanterの内部キー名。日本語ラベルへの変換は行わない) - 各レコードの値をヘッダ順に2次元配列へ格納
- シート・テーブル(ListObject)の取得/新規作成、ヘッダ設定、
DataBodyRangeのクリアと書き込みはexportCSVDataToSheetと同様の手順を独自に実装する - テーブル名・出力先シートは
targetSheet(=tableId)を共用し、Export方式実行時に作られた既存テーブルを上書きする(方式を切り替えるたびにヘッダ列構成が変わる点は許容する)
変更対象・追加対象まとめ
- 変更:
init()(fetchMethod読み込み追加),Sub run()(分岐フローに書き換え) - 追加:
runExportFlow,runGetFlow,getRecordsData,getRecordsDataToSheet - 無改造:
exportCSVData,exportCSVDataToSheet,ParseCsv,CollectionToArray,callRestApi
非対象・考慮しないこと
- 200件を超えるページング処理
- Get方式でのヘッダの日本語ラベル化・Export方式との列対応付け
- Get方式・Export方式のテーブルを別シートに分離すること(同一テーブルを共用する)