Skip to content

feat(app): frametap.toml を読んで panic を残す - #18

Merged
torabit merged 1 commit into
mainfrom
torabit/feat/app-config
Sep 27, 2026
Merged

torabit merged 1 commit into
mainfrom
torabit/feat/app-config

Conversation

@torabit

@torabit torabit commented Sep 27, 2026

Copy link
Copy Markdown
Owner

変更内容

  • frametap.toml を実行ファイルの隣から読む。キーは fps trial_gap_ms stick_deadzone trials_shown の 4 つ。ファイルが無ければ既定値で動く
  • 受け付けられない値と読めない行は既定値のままにして、警告を画面の上に出す
  • release build で console を出さない。#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
  • panic の内容と backtrace を実行ファイルの隣の frametap-panic.txt に追記する
  • frametap.toml.example を置いた

なぜ

設定が const に埋まっていたので、対象のゲームのフレームレートや試行の区切りを変えるには build が要った。実機を持つのは別の人なので、その人の手元で値を変えられないと 1 往復が丸ごと無駄になる。

console を消すと、既定の hook が書く panic の内容がどこにも出なくなる。落ちた理由を手元に残せないと「落ちた」以外を返せない。だから hook を差し込んでファイルに追記する。上書きにしないのは、再現の回数と間隔も判断の材料になるため。

値を受け付けられなかったときに黙って既定値へ落とさないのは、設定を書いたのに効いていない状態を画面から区別できないため。

判断したこと

汎用の TOML パーサを入れずに自前で読んだ。値は数値 4 つだけで、section も配列も文字列も要らない。この 4 行のために serde を引くと、依存の重さが釣り合わない。eframe の feature を削っているのと同じ判断にした。

実行ファイルの隣が書けない場合がある。Program Files の下に置かれた場合と、読み取り専用の媒体から起動した場合になる。そのときは一時ディレクトリに回す。

時刻は epoch 秒で書く。書式を整えるために依存を増やさない。並べ替えと間隔だけが要る。

検証

  • cargo fmt --check
  • cargo clippy --all-targets -- -D warnings
  • cargo test (100 件)
  • cargo coupling --check --min-grade=B --max-circular=0 ./src は Grade A (35%)

test は先に落ちるものを書いてから実装した。config が 16 件、panic_report が 7 件、配線が 3 件。

test で押さえていないもの

stick_deadzone が Timeline::new に届く経路。pump はデバイスを開かないと通らず、Timeline は閾値を読み出す口を持たない。読み出す口をテストのために足すのは避けた。

Windows でのみ効くものは Linux で確かめられない。console が開かないこと、frametap-panic.txt が実行ファイルの隣に落ちることは、実機で走らせるまで未検証になる。

Closes #7

設定を const に埋めていたので、対象のゲームのフレームレートや試行の区切りを
変えるには build が要った。実機を持つのは別の人なので、その人の手元で値を
変えられないと 1 往復が丸ごと無駄になる。

release build では console を出さないようにした。常時置いておく道具なので、
起動のたびに黒い窓が並ぶのは邪魔になる。そのぶん既定の hook が書く panic の
内容がどこにも出なくなるので、実行ファイルの隣の frametap-panic.txt に追記する。
落ちた理由を手元に残せないと「落ちた」以外を返せない。

設定の値を受け付けられなかったときは既定値に落として警告を画面に出す。黙って
落とすと、設定を書いたのに効いていない状態を画面から区別できない。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@torabit
torabit merged commit 67903e3 into main Sep 27, 2026
1 check passed
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.

app の配線と設定ファイル

2 participants