Suburi / CSV & JSON

エクスポートデータ仕様

最終更新日:2026年10月8日 · JSON schemaVersion 1

次回アップデートで追加予定の記録エクスポート機能の仕様です。対応版のアプリでご利用いただけます。

iPhone アプリの「設定 > データ > 記録をエクスポート」で出力されるファイル(CSV / JSON)の仕様。


1. 概要

形式 用途 単位 時系列データ
CSV Excel / Numbers での集計・閲覧 1 稽古 = 1 行 含まない
JSON データの保管、プログラムでの分析 1 稽古 = records の 1 要素 含む(1振りごとの加速度、心拍)

どちらの形式も、出力対象の稽古記録は同じ(後述の「出力対象」で決まる)。アプリへのインポート機能は将来の対応を予定しています。

出力対象

条件 選択肢 判定
競技 すべての競技 / 1つの競技設定 configurationId の一致
期間 全期間 / 今年 / 期間を指定 startedAt が範囲内(下記)

期間の範囲は端末のカレンダーとタイムゾーンで計算する。

期間 範囲(from <= startedAt < to)
全期間 制限なし
今年 今年の 1月1日 0:00 〜 翌年 1月1日 0:00
期間を指定 開始日の 0:00 〜 終了日の翌日 0:00(終了日を丸1日含む)。開始日と終了日が逆でも入れ替えて扱う

並び順は常に startedAt の新しい順。

対象はこの端末に保存されている記録だけ。iCloud 同期が終わっていない記録は含まれない。

無料版(お試し)の制限

課金済み(拡張パック) 無料
出力件数 対象の全件 新しい順に直近 3 件
各記録の中身 全項目 全項目(時系列も省略しない)

対象が 3 件を超えていて、実際に切り捨てが起きたときだけ「サンプル」扱いになり、次の2点が変わる。

対象が 3 件以下なら、無料でも全件が出力されるのでサンプル扱いにはならない。課金状態はエクスポートを実行した瞬間に判定する。


2. 共通ルール

ファイル名

suburi_export_{yyyyMMdd}_{HHmm}[_sample].{csv|json}

日時の表記

すべての日時は ISO 8601(秒まで、端末タイムゾーンのオフセット付き)。

2026-10-08T09:00:00+09:00

文字コード

競技名・単位の決め方

sport_name / count_unit(JSON では sportName / countUnit)は、記録の configurationId に対応する現在の競技設定から取る。


3. CSV 仕様

形式

列定義

列の並びは下表の順で固定。

# 列名 型 内容 例
1 practice_id 文字列 稽古記録の ID(UUID) 95493221-87AE-4A03-A6D6-274361380DDD
2 started_at 日時 稽古の開始日時 2026-10-08T07:00:00+09:00
3 ended_at 日時 稽古の終了日時 2026-10-08T07:02:53+09:00
4 sport_type 文字列 競技の種類(下記の値) kendo
5 sport_name 文字列 競技の表示名 剣道
6 count 整数 回数(素振りの本数など) 173
7 count_unit 文字列 回数の単位 本
8 exercise_time_sec 整数 運動時間(秒) 173
9 satisfaction 整数 満足度(0〜5、0 は未評価) 4
10 measurement_type 文字列 計測方法(下記の値) apple_watch
11 tag 文字列 日誌タグ。複数ある場合はカンマ区切り 基本,朝稽古
12 memo 文字列 日誌のメモ(改行を含むことがある) 面打ちを重点的に

例

practice_id,started_at,ended_at,sport_type,sport_name,count,count_unit,exercise_time_sec,satisfaction,measurement_type,tag,memo
95493221-87AE-4A03-A6D6-274361380DDD,2026-10-08T07:00:00+09:00,2026-10-08T07:02:53+09:00,kendo,剣道,173,本,173,4,apple_watch,基本,"面, 小手
胴の順で"
1EE319AA-5667-4043-B408-2DF003AB6429,2026-10-07T07:00:00+09:00,2026-10-07T07:02:39+09:00,kendo,剣道,159,本,159,0,apple_watch,,

(実際のファイルは先頭に BOM が付き、行区切りは CRLF)


4. JSON 仕様

形式

全体構造

{
  "meta" : { ... },
  "records" : [ { ... }, { ... } ]
}

meta

キー 型 内容 例
schemaVersion 整数 この JSON 構造のバージョン(現在 1) 1
exportedAt 日時文字列 エクスポートした日時 "2026-10-08T11:12:57+09:00"
appVersion 文字列 | null 出力したアプリのバージョン。取得できない場合は null "3.0.0"
timeZone 文字列 日時の表記に使ったタイムゾーン(IANA 名) "Asia/Tokyo"
isSample 真偽値 無料版の制限で一部だけを出力した場合に true true
totalRecords 整数 選んだ条件に一致した記録の総数 4
includedRecords 整数 このファイルに含まれる記録の数 3

records[]

キー 型 内容 CSV の対応列
practiceId 文字列 稽古記録の ID(UUID) practice_id
configurationId 文字列 競技設定の ID(UUID 文字列) (なし)
sportType 文字列 競技の種類 sport_type
sportName 文字列 競技の表示名 sport_name
count 整数 回数 count
countUnit 文字列 回数の単位 count_unit
exerciseTimeSeconds 整数 運動時間(秒) exercise_time_sec
satisfaction 整数 満足度(0〜5、0 は未評価) satisfaction
measurementType 文字列 計測方法 measurement_type
tag 文字列 日誌タグ(カンマ区切り) tag
memo 文字列 日誌のメモ memo
startedAt 日時文字列 開始日時 started_at
endedAt 日時文字列 終了日時 ended_at
createdAt 日時文字列 記録が作られた日時 (なし)
modifiedAt 日時文字列 記録が最後に更新された日時 (なし)
accelerations 配列 1振りごとの加速度(下記)。elapsedTime の昇順 (なし)
heartrates 配列 心拍(下記)。date の昇順 (なし)

records[].accelerations[]

Apple Watch が振りを1回検知するたびに 1 要素記録される。そのため Apple Watch で計測した記録では、通常 accelerations の要素数は count と一致する。

キー 型 単位 内容
elapsedTime 数値 秒 稽古開始から、その振りを検知するまでの経過時間
x 数値 G 検知した振りの加速度(X 軸)
y 数値 G 検知した振りの加速度(Y 軸)。アプリ内の「打突力」グラフはこの値を使う
z 数値 G 検知した振りの加速度(Z 軸)

records[].heartrates[]

キー 型 単位 内容
date 日時文字列 — 計測した日時
bpm 数値 拍/分 心拍数

例(抜粋)

以下の例では、記録 2 件と時系列の一部を省略しています。includedRecords はファイル全体の件数です。appVersion は例示であり、リリース番号の告知ではありません。

{
  "meta" : {
    "appVersion" : "3.0.0",
    "exportedAt" : "2026-10-08T11:12:57+09:00",
    "includedRecords" : 3,
    "isSample" : true,
    "schemaVersion" : 1,
    "timeZone" : "Asia/Tokyo",
    "totalRecords" : 4
  },
  "records" : [
    {
      "accelerations" : [
        { "elapsedTime" : 0.92, "x" : 0.41, "y" : 4.87, "z" : -0.63 },
        { "elapsedTime" : 1.85, "x" : 0.38, "y" : 5.12, "z" : -0.58 }
      ],
      "configurationId" : "0F6C3E7A-2B1D-4C59-9A8E-5D2F7B3C1A90",
      "count" : 173,
      "countUnit" : "本",
      "createdAt" : "2026-10-08T07:03:10+09:00",
      "endedAt" : "2026-10-08T07:02:53+09:00",
      "exerciseTimeSeconds" : 173,
      "heartrates" : [
        { "bpm" : 96, "date" : "2026-10-08T07:00:05+09:00" },
        { "bpm" : 104, "date" : "2026-10-08T07:00:10+09:00" }
      ],
      "measurementType" : "apple_watch",
      "memo" : "面打ちを重点的に",
      "modifiedAt" : "2026-10-08T07:03:10+09:00",
      "practiceId" : "95493221-87AE-4A03-A6D6-274361380DDD",
      "satisfaction" : 4,
      "sportName" : "剣道",
      "sportType" : "kendo",
      "startedAt" : "2026-10-08T07:00:00+09:00",
      "tag" : "基本"
    }
  ]
}

(実際の出力は配列の要素も1行ずつ展開される)


5. 値の一覧

sport_type / sportType

値 表示名(既定) 単位(既定)
kendo 剣道 本
baseball 野球 回
golf ゴルフ 回
tennis テニス 回
badminton バドミントン 回
table_tennis 卓球 回
squash スカッシュ 回
cricket クリケット 回
hockey ホッケー 回
fencing フェンシング 回
bowling ボウリング 回
music 音楽 回
guitar ギター 回
metronome メトロノーム 回
generic その他 回

既定の表示名・単位は SuburiType.displayName / defaultCountUnit の値(言語設定に関係なく日本語)。ユーザーが競技設定で名前・単位を変えている場合は、そちらが出力される。

measurement_type / measurementType

値 意味 時系列データ
apple_watch Apple Watch で計測 あり(通常 count と同数の加速度、心拍)
manual 手入力 なし(accelerations / heartrates は空配列、exercise_time_sec は 0、started_at と ended_at は同じ)

6. 互換性の方針

7. 取り扱いの注意