いつ張り替えるかを決めるのは、日付ではなく使用量です。同じ1か月の中でも、週1回プレーする人と週4回プレーする人とでは、コート上で過ごす時間が4倍違います。カレンダーは同じペースで進みますが、ストリングにかかる負荷はそうではありません。
String GOATも最初は同じ発想でした。張り替えた日付と、日数によるサイクルです。私自身も自分のラケットにストリングを張るので、この基準が崩れる場面に何度も出くわしました。ハードに練習した週と、ほとんどプレーしなかった週が、同じ日に同じリマインダーを出すのです。
基準を日付から使用量に移すのは当然の解決策でしたが、まさにそこでつまずきました。プレー時間は、セッションを終えて「今日は2時間半くらいだったかな」と見積もった瞬間に、データではなく記憶になってしまいます。ショット数に至っては、そもそも数えようがありません。私は、ストリングが実際にどれだけ働いたかを記録する手段のないまま、ストリング記録アプリを作っていたのです。
ウォッチアプリは、このギャップを埋めるために存在します。Apple WatchまたはGalaxy Watchでセッションを開始すれば、ショット数とプレー時間が記録され、その記録が張り替えの判断に活かされます。
これを作るには、ひとつの制約を乗り越える必要がありました。テニスコートでは通常、ラケットを持たない方の手首にウォッチを着用します。ラケット側の手首だと、グリップの邪魔になり、衝撃をそのまま受けてしまうからです。ところがショットを数えるうえでは、この習慣が不利に働きます。ボールが当たった瞬間の衝撃は、ラケットを持っている腕に最もはっきりと現れ、反対側の腕にはずっと弱くしか伝わらないからです。そのため、手首センサーによるショット検出は通常「ウォッチはラケット側の手首に着ける」という前提から出発します。
String GOATは、その前提を変えないことを選びました。もともと着けている場所、つまりラケットを持たない方の手首のままで構いません。
この記事は、自分でラケットにストリングを張る、あるいは自分で張り替えのサイクルを管理しているプレーヤー向けです。検出の仕組み、実際の精度、そしてその記録がどう張り替えの判断につながるかを解説します。
要点
- 対応機種 — watchOS 9.0以降(Apple Watch Series 4以降)、Wear OS 3.0以降(Galaxy Watchを含む)。ペアリングされたスマホアプリと連携して動作します。
- 着用位置 — ラケットを持たない方の手首。
- 記録される項目 — ショット数、プレー時間、心拍数、消費カロリー、屋外でのGPSルート。
- 精度 — 素振りや歩行はカウントされません。グラウンドストローク全体ではおおむね4分の3程度の検出率で、片手バックハンドは過小にカウントされます。
- 用途 — 累積プレー時間をストリングの種類ごとの寿命基準と比較することで、リマインダーがカレンダーではなく実際の使用量に基づくようになります。
弱い信号からショットを読み取る
反対側の腕にも振動は伝わります。ただ、それが弱いだけです。必要なのは信号を強くすることではなく、弱い信号を読み取れるように訓練されたモデルです。
String GOATは、KAISTの研究チームが発表したSilent Impactモデルを採用しています。これは、ラケットを持っていない方の腕の動きからインパクトを識別するために作られたモデルです。UIST 2024(ACM Symposium on User Interface Software and Technology、Park, Yang, Jo)で発表され、商用利用も可能なCC BY 4.0のもとで公開されています。String GOATはアプリのオープンソースライセンス画面でこれをクレジット表記しています。論文はACM Digital Libraryで公開されています。
解析はウォッチではなくスマホ側で行われます。ウォッチはセンサーデータを収集して送信し、スマホがそれをモデルに通します。すべて端末上で処理されるため、コートの電波状況が不安定でも検出には影響しません。
セッションで記録される内容
ラケットを選び、ウォッチアプリでセッションを開始すると、終了するまで以下が蓄積されます。
| 項目 | 詳細 |
|---|---|
| ショット数 | 検出されたインパクトの回数 |
| プレー時間 | セッションの開始から終了まで |
| 心拍数 | 平均、最大、ゾーン別の時間 |
| 消費カロリー | ウォッチのヘルスデータから算出 |
| 距離とルート | GPSを有効にした屋外セッション |
対応機種はwatchOS 9.0以降(Apple Watch Series 4以降)と、Wear OS 3.0以降(Galaxy Watchを含む)です。ウォッチアプリはペアリングされたスマホのString GOATアプリと連携して動作するため、スマホアプリが必須です。
精度はどれくらいか
ショット数は、画面に表示された瞬間から「本当に合っているのか」という疑問を招きます。以下の数値は、論文で報告された性能ではなく、私たち自身のアプリで実測したものです。ウォッチのハードウェアやその周辺の処理が変わると、同じモデルでも挙動が変わってきます。
まず、成立している部分から。ボールを打たない素振りはカウントされません。屋内テストでは、素振り30回は0としてカウントされ、歩行や静止も同様に0でした。このモデルはスイングそのものではなくボールの接触を検出する方式のため、ラケットを持ってコートを歩き回ったりボールを拾ったりしている間にカウントが増えることはありません。フォアハンド中心のテストでは、実際に打った球数とほぼ一致する結果になりました。
一方、精度が及ばない部分もあります。
- グラウンドストローク全体(ベースラインからバウンド後に打つフォアハンドとバックハンド)では、おおむね4分の3程度の検出率です。実際に打った数より少なく記録されることがあります。
- 片手バックハンドが最も過小カウントされます。モデルの学習データに、片手バックハンドのプレーヤーがごく少数しか含まれていなかったと見られます。
- 速いボレーは検出漏れが起こり得ます。連続して素早く打つショットが1回にまとめられてしまうことがあります。
- ショットの種類は分類されません。フォアハンド、バックハンド、ボレーといった内訳はありません。
つまり、これは審判のような正確なカウントではありません。むしろセッション間で比較するための負荷の目安に近いものです。今日は先週より練習量が多かったか、このストリングがこれまでどれだけの負荷を受けてきたかを把握するには十分ですが、額面通りに使う数値ではありません。
蓄積された記録がリマインダーをどう動かすか
ここで当然の疑問が出てきます。カウントが正確でないのに、どうやって判断に使えるのかということです。実際にリマインダーを動かしているのはショット数ではなくプレー時間です。時間はセッションの開始と終了から取得されるため、推定ではなく計測された値です。
セッションが保存されると、プレー時間はラケットごとに蓄積されます。String GOATは、その累積時間をストリングの種類ごとの寿命基準と比較します。ポリエステル、マルチフィラメント、ナチュラルガットではそれぞれ耐久性の期間が異なるため、種類ごとに個別の基準が設定されており、その数値は公開されている資料の調査に基づいています。ストリングは切れる前に性能が落ちることがあるという点は、Tennis Warehouse Universityのテストでも報告されています。
変わるのはリマインダーが届くタイミングではなく、その根拠です。「張ってから1か月」ではなく、「このストリングが実際に何時間使われたか」が基準になります。月1回プレーする人と週4回プレーする人が、同じ日に同じリマインダーを受け取ることはもうありません。
ショット数もラケットごとに蓄積されます。プレー時間と並べて見ることで、多くのインパクトを受けたストリングと、同じ時間でも打球数がずっと少なかったストリングを区別できます。
テンション測定と組み合わせると、判断はさらに鋭くなる
プレー時間とショット数だけでも、すでにカレンダーより優れています。ただ、それらが表すのはあくまでストリングがどれだけ使われたかであり、今どんな状態にあるかではありません。
状態を示す数値は別にあります。張り替え直後のテンションと、その後測定するDT(動的テンション、ストリングベッドの硬さ)です。ストリングを登録する際に初期DTを入力するとそれが基準値になり、以降の測定がその都度データ点として加わっていきます。
ウォッチのデータは、そこに2つ目の軸を加えます。「何日でテンションがどれだけ落ちたか」ではなく、「何球打ってどれだけ落ちたか」を問えるようになるということです。任意の2回の測定の間のショット数は、ウォッチが提供します。
データ点が蓄積されると、String GOATはその推移を延長して、閾値に到達する時期を推定します。閾値は基準値に対する損失率と主観的な評価スコアの組み合わせで、出力は予想される張り替え日、または残りのショット数です。テンション測定が存在する場合は、この方式が自動的に使われます。どの信号を使うかは設定ではなく、利用可能なデータによって決まります。
