ken_nogi/XVBA/新版着工要因閲覧シート/docs/superpowers/specs/2026-09-11-export-get-switch-design.md
Kenichiro NOGI 6f33339d43 docs: Export/Get方式切替の設計書を追加
Pleasanter Export APIとGet API(api-record-get-multi)の処理時間比較機能の設計をまとめた。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 11:02:14 +09:00

4.4 KiB
Raw Blame History

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 は既存の exportCSVDataexportCSVDataToSheet 呼び出しをそのまま移設したもの(ロジック無変更)。
  • runGetFlow は新規追加の getRecordsDatagetRecordsDataToSheet を呼ぶ。

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 と同様の手順を独自に実装する
  • テーブル名・出力先シートは targetSheettableIdを共用し、Export方式実行時に作られた既存テーブルを上書きする方式を切り替えるたびにヘッダ列構成が変わる点は許容する

変更対象・追加対象まとめ

  • 変更: init()fetchMethod 読み込み追加), Sub run()(分岐フローに書き換え)
  • 追加: runExportFlow, runGetFlow, getRecordsData, getRecordsDataToSheet
  • 無改造: exportCSVData, exportCSVDataToSheet, ParseCsv, CollectionToArray, callRestApi

非対象・考慮しないこと

  • 200件を超えるページング処理
  • Get方式でのヘッダの日本語ラベル化・Export方式との列対応付け
  • Get方式・Export方式のテーブルを別シートに分離すること同一テーブルを共用する