Apexlog 使い方マニュアル

English · ホーム · プライバシーポリシー

Apexlog は走行中の GPS+モーション テレメトリを記録し、再生・解析できるアプリです。 本マニュアルでは使い方に加え、重要な点として、エクスポートした記録を自分で解析 できるよう、オープンな NDJSON データ形式を解説します。


記録する

  1. スマホをマウント(またはポケットに)して Apexlog を開く。
  2. Record をタップ。ステータス欄に経過時間・サンプル数・現在速度・現在 G が表示。
  3. Stop で終了。走行は自動的に .ndjson ファイルとして保存されます。

開始した瞬間から、各記録は以下を取得します(レートは既定値。下記 「録画モード」参照)。

録画モード:Sport と Travel

設定(歯車)→ Recording でモードを選べます。

旅モードと Pro: 旅モード自体は無料ですが、画面ロックやポケットの中でも記録を 続けるにはバックグラウンド録画(Pro)が必要です。Pro なしで開始しようとすると 「画面ロックで停止します」という確認が表示されます。

前面録画 と バックグラウンド録画


記録一覧(ライブラリ)

ホーム画面に記録が新しい順で(ファイルサイズ・開始時刻つきで)並びます。タップで再生。

ゴミ箱アイコンで削除(完全削除・取り消し不可)。


再生・解析

記録を開くと、上から順に表示されます。

スライダーでシーク、再生ボタンでアニメーション、速度メニュー(0.5×〜8×)で再生速度を 変更。リーン・ピッチ・方位は加速度・ジャイロ・GPS を融合(相補フィルタ)して算出し、 走行自体から導いた端末→車両キャリブレーションを適用しています。

旅モードの記録(IMU なし)では、車両ゲージの代わりにジャーニーゲージが 表示されます:速度に連動するアクティビティアイコン+トリップメーター(そこまでの 累積 km)。On foot のログは 休憩 ☕/徒歩 🚶/道路 🚌/電車 🚆/飛行機 ✈️、 Vehicle のログは 停車 🚦(静止 1 分以内:信号・渋滞)/休憩 ☕(それ以上=駐車)/ 下道 🚗(60 km/h 未満)/高速 🏎(それ以上)を出し分けます。地図・速度チャート・ 数値表示は通常どおり動きます。

アプリ内解析は、スマホの任意の取り付け向きを車両軸に合わせるキャリブレーションを 使います。生ログには端末座標系のセンサーデータが保存されます。車両座標系の計算を 自分で再現したい場合は下記を参照。


エクスポート

エクスポート/共有は Pro 機能です。 各記録の行にはエクスポートボタンと ⋮ メニューがあり、3 つの出力方法があります。

Google マップ / Earth で軌跡を開く

Mac/PC では USB 接続で端末から直接コピーも可能です(アプリの Documents ディレクトリ内)。


データフォーマット仕様

記録は UTF-8 の NDJSON(改行区切り JSON):1 行 1 JSON オブジェクト、1 行 1 サンプル。形式はオープンで、どの言語でも簡単に解析できます。

ファイル

apexlog-YYYYMMDD-HHMMSS.ndjson

録画開始のローカル壁時計から命名。例 apexlog-20260615-181241.ndjson

meta 行(先頭 1 行のみ)

{"type":"meta","app":"apexlog","ver":"0.2.1","startedAt":"2026-06-15T18:12:41.463902+09:00","device":"iPhone16,2","hz":{"imu":100,"gps":1},"mode":"sport"}
キー 意味
type 固定値 "meta"
app 固定値 "apexlog"
ver ログ形式/アプリのバージョン(例 "0.2.1"
startedAt 録画開始の壁時計。ISO 8601、ローカル UTC オフセット付き
device 端末機種名(例 "iPhone16,2""Pixel 8"。不明なら "unknown"
hz 要求サンプリングレート(実測ではなく設定値)。imu0 のログは IMU 無効(旅モード/IMU Off)で imu 行を含まない。gps は選択レート階層の公称 Hz。0 はサブ Hz(距離駆動の旅プリセット)
mode (0.2.1〜・任意)"sport" または "travel"。旧ログには無い
preset (0.2.1〜・任意)旅プリセット:"onFoot" または "vehicle"

サンプル行

各サンプル行は共通で以下を持ちます。

キー 意味 単位
t 記録開始からの経過秒(モノトニッククロック) s
s ストリーム:"gps" または "imu"

gps 行:

{"t":1.000,"s":"gps","lat":35.681236,"lon":139.767125,"alt":3.2,"spd":12.5,"hdg":270.1,"acc":4.0}
キー 意味 単位
lat / lon 緯度 / 経度 deg
alt 高度 m
spd 速度 m/s
hdg 進行方位(対地コース)。負値=取得不可(停車時など) deg
acc 水平位置精度 m

imu 行。 3 つの IMU センサーはそれぞれ別の時刻に独立したストリームイベント として届くため、そのセンサーの軸だけを含む 1 行として書かれます(他フィールドは 省略)。行は次のいずれか:

{"t":0.010,"s":"imu","ax":0.12,"ay":-0.03,"az":9.79}
{"t":0.011,"s":"imu","lax":0.05,"lay":-0.01,"laz":0.02}
{"t":0.010,"s":"imu","gx":0.001,"gy":0.000,"gz":-0.002}
キー 意味 単位
ax / ay / az 生加速度(重力込み m/s²
lax / lay / laz ユーザー加速度(重力除去 m/s²
gx / gy / gz ジャイロ(角速度) rad/s

補足:


データを解析する

最小の Python 例 — 記録を読み込み、ストリームを分離し、合計 G と km/h 速度を計算:

import json, math

meta = None
gps, accel, uaccel, gyro = [], [], [], []

with open("apexlog-20260615-181241.ndjson") as f:
    for line in f:
        o = json.loads(line)
        if o.get("type") == "meta":
            meta = o; continue
        if o["s"] == "gps":
            gps.append(o)
        elif "ax" in o:
            accel.append(o)
        elif "lax" in o:
            uaccel.append(o)
        elif "gx" in o:
            gyro.append(o)

# 合計加速度の大きさを G で(重力込み)
G0 = 9.80665
for a in accel:
    a["g"] = math.sqrt(a["ax"]**2 + a["ay"]**2 + a["az"]**2) / G0

# GPS 速度を km/h で
for p in gps:
    p["kmh"] = p["spd"] * 3.6

print(meta["device"], len(gps), "GPS,", len(accel), "accel")

よく使う変換:

Pandas のヒント:pandas.read_json(path, lines=True) で読み込み、先頭(meta)行を 落とし、列の有無(axlaxgxlat)で分割。


権限

権限は端末設定でいつでも取り消せます。依存機能は再付与まで停止します。


無料 と Pro

  無料 Pro(買い切り)
録画(Sport・旅モード) 前面のみ + バックグラウンド
ログ保有 直近3本 + 無制限
地図/G-G/姿勢/ジャーニー再生 ✓ フル ✓ フル
生データ共有・GPX/KML エクスポート

Pro は買い切り — ¥1,000 / US$6.99。サブスクなし。 以前の購入はペイウォールから 復元できます(Pro をタップ →Restore)。