変更履歴 — Hapbeat JavaScript SDK
This content is not available in your language yet.
@hapbeat/sdk の主要な変更点をまとめます。
形式は Keep a Changelog に、バージョン付けは
Semantic Versioning に従います。
0.3.0 - 2026-08-03
Section titled “0.3.0 - 2026-08-03”Node / React Native transport(直接 UDP)のみが対象です。Browser transport は hapbeat-helper 経由のため、送信経路は helper 側が決めます。
変更(Changed)
Section titled “変更(Changed)”- PLAY / STOP / STOP_ALL とクリップストリームを、PING に応答した既知デバイスへ
ユニキャスト送信するようになりました(
{ unicast: false }で従来のブロード キャストに戻せます)。Wi-Fi AP は、同じ AP に省電力状態の端末が 1 台でもいると ブロードキャストフレームを次の DTIM ビーコン(100〜300 ms 周期)まで保留します。 これが単発コマンドの発火遅れ、連続ストリームの周期的な途切れとして出ていました。 デバイス側の設定では回避できない(原因は無関係な他端末)ため、送信側で対処します。 Unity SDK で実測・検証済みの方針をそのまま移植したものです。- 応答があったデバイスが 1 台も無い間はブロードキャストで送ります(起動直後など)。
- ユニキャストとブロードキャストの二重送信はしません。
targetに一致しないデバイスは宛先から外します。アドレス未報告のデバイスは 宛先に残します(デバイス側で同じ判定をするため、外すと取りこぼしになる)。- 既知デバイスがいて全て
target不一致だった場合、コマンドはブロードキャストに フォールバックします(キャッシュしたアドレスが古いときに STOP が消えて ループ再生が止まらなくなるのを防ぐため)。ストリームは送信しません (数百パケット分の電波を無駄にするため。取りこぼしても何も残らない)。 - PING と CONNECT_STATUS はデバイス検出のためブロードキャストのままです。
- キープアライブが PING も送るようになりました(従来は CONNECT_STATUS のみ)。
デバイスが PONG を返すのは PING に対してだけなので、これが無いとユニキャストの
宛先表が
deviceTtlMsで空になり、以後ずっとブロードキャストに戻ってしまいます。appNameを渡していない接続でもキープアライブが動くようになりました。
追加(Added)
Section titled “追加(Added)”unicast(既定true)/deviceTtlMs(既定 15000)オプション — ユニキャストの 有効・無効と、最後の PONG から何 ms デバイスを宛先として保持するか。protocol.addressMatches(target, deviceAddress)— ファームウェアのaddressMatch()と同一セマンティクスの判定関数。contracts §4.2 の例表を そのままテストに移植しています。
- 部分ワイルドカードは使えません。
*はセグメント全体が*のときだけ ワイルドカードとして働きます(player_1/pos_*は不一致、player_1/*は一致)。 contracts の例表に誤りがあったため、仕様側も併せて訂正しました。
0.2.1 - 2026-06-29
Section titled “0.2.1 - 2026-06-29”変更(Changed)
Section titled “変更(Changed)”- Node / React Native transport の受信ソケットを、既定で ephemeral
(OS 任せ)ポートに bind するよう変更しました(従来は well-known の
7700を先に試す挙動)。DEC-036 の方針に整合させたものです。7700を bind するのは デーモン(hapbeat-helper)だけにすべきで、SDK が先に7700を奪うと、後から 起動した helper(および Studio)が壊れる恐れがありました。送信は従来どおり7700宛てで、PONG は送信元 ephemeral ポートに返るため discovery は影響を 受けません。これにより Python / Unity SDK と挙動が揃います。
追加(Added)
Section titled “追加(Added)”bindPortオプション — ローカルの受信ポートを明示的に bind する opt-in (例: 非要求のブロードキャストを受けたいデーモン用途でbindPort: 7700)。 指定ポートが使用中なら ephemeral にフォールバックします。既定は0(ephemeral)。
0.2.0 - 2026-06-29
Section titled “0.2.0 - 2026-06-29”追加(Added)
Section titled “追加(Added)”- React Native transport —
connect()の 3 つ目のビルド。package のexportsの"react-native"条件で解決されます(dist/react-native.js)。 optional peer dependency のreact-native-udp経由で実 UDP ソケットを開き、 スマホから Wi-Fi で直接ブロードキャストします —hapbeat-helperは不要 (スマホはブラウザのようにサンドボックス化されていない)。wire 形式は Node と同一。react-native-udpは optional peer dependency。アプリ側でインストールします。TextDecoderの polyfill(fast-text-encoding)が必要です。RN Hermes (0.86 含む)はTextEncoderは持つがTextDecoderは持たないため。examples/react-native/参照。- 実機 Android で検証済み(RN 0.86 / Hermes / New Architecture): UDP ソケット bind・Hapbeat の discovery・command + streaming の発火を helper なしで確認。
examples/react-native/— 最小の Android デモ。ボタンタップで command (play)と 1 秒の合成ストリーミングバッファを送信します。
変更(Changed)
Section titled “変更(Changed)”- 内部: Node と React Native transport が
UdpTransportBaseを共有するように なりました(protocol / keepalive / discovery のロジックすべて)。差分はソケット 実装のみ。Node / Browser ビルドの公開 API 変更はありません。
修正(Fixed)
Section titled “修正(Fixed)”src/index.tsの wire レイヤ再エクスポートをexport * as protocolからimport * as protocol; export { protocol }に変更。React Native の Metro が@babel/plugin-transform-export-namespace-fromプラグインなしでバンドルできる ようになります。
0.1.0 - 2026-06-25
Section titled “0.1.0 - 2026-06-25”初回公開リリース。1 つの API・2 つの transport。
追加(Added)
Section titled “追加(Added)”connect(options?)— Node(@hapbeat/sdk→dist/node.js、UDP ブロードキャスト直送)と Browser(dist/browser.js、hapbeat-helperの WebSocketws://localhost:7703経由)。バンドラ / ランタイムが package のexportsマップから自動でビルドを選択します。Hapbeatファサード — level-1 の「fire」面:play(eventId, opts?)—EventMap(kit manifest)がモードを決定。 command(events)はデバイスにインストール済みの clip を再生、 clip(stream_events)はイベントの WAV をホストからストリームします。streamPcm(pcm, opts?)— その場の PCM16 バッファをストリーム(L/R 方向性 触覚向けにステレオ可)。openStream(opts?)→LiveStream— 連続変調する触覚向けの永続ストリーム (STREAM_BEGINを 1 回、以降handle.write()でチャンク送出、handle.close())。チャンクごとの teardown が不要。preloadClips(),stop(),stopAll(),ping(),discover(),close()。
EventMap— 直交する調整側。fromManifest()(kit manifest schema 2.0.0)、fromGains()、およびget/gainFor/has/ids/size。parseWav,ClipStreamer,LiveStreamを advanced 用途向けの named export として公開。さらにprotocol.*(Layer-1 wire の builder / parser)。- デバイス discovery(ブロードキャスト PING/PONG)と target addressing
(
"player_1/chest"/"*/chest"/""= ブロードキャスト)。 - サンプル:
examples/node-minimal.mjs、examples/browser-minimal.html、およびexamples/games/配下のブラウザ触覚デモ集。