ウェブサイトが振動する!?(Web Haptics)

BBetter Stack
Computing/SoftwareCell PhonesInternet Technology

Transcript

00:00:00Webサイトに、小さくも素晴らしいディテールを追加する
00:00:04最高なパッケージを見つけました。自分でも欲しかったことに気づきませんでした。
00:00:07「WebHaptics」はその名の通り、Webサイトで
00:00:11AndroidやiOSの「触覚フィードバック(振動)」を利用可能にします。
00:00:15これを入れるだけでサイトがネイティブアプリのような操作感になりますし、
00:00:20使い方も非常にシンプルで、関数を1つ呼び出すだけです。
00:00:21そう思っているのは私だけではないようで、Twitterでも話題になっていますし、
00:00:24Polymarketなどは、すでにこのパッケージを導入しているようです。
00:00:29それでは、なぜこれほど注目されているのか、中身を見ていきましょう。
00:00:33iOSで動作させるための非常に面白い「仕掛け」についても解説します。
00:00:43このパッケージの効果を動画でお見せするのは少し難しいです。
00:00:46スマホが物理的に振動するものだからです。YouTubeアプリで
00:00:50「チャンネル登録」を押した時の、あの振動と同じ感覚です。もし登録済みで
00:00:54試せないという方は、WebHapticsの公式サイトで体験できます。
00:00:59この動画を見た後に、ぜひチェックしてみてください。
00:01:02成功、エラー、ボタンクリックなどの一般的な振動パターンを試せます。
00:01:06また、独自の振動パターンを作成できるエディターも用意されています。
00:01:10これについては、後ほど詳しく紹介します。
00:01:11では実装に入りましょう。これはシンプルなnpmパッケージで、
00:01:15React、Vue、Svelte用のヘルパーも用意されています。もちろん、
00:01:19バニラのJavaScriptでも使えますし、実行用のtrigger関数は共通です。
00:01:24今回はReactを使います。コードは驚くほどシンプルです。
00:01:28「useWebHaptics」フックを使い、そこからtrigger関数を取得します。
00:01:32あとはそれをボタンなどのイベントに紐付けるだけで、振動が発生します。
00:01:36このフックからは、実行中の振動を止めるcancel関数や、
00:01:39ブラウザが対応しているかを確認するための
00:01:44isSupported(ブーリアン値)も取得できます。
00:01:45このコードを書くだけで、AndroidやiOSデバイスでボタンを押した時に
00:01:48小さな振動が起こります。今はPCで作業しているので
00:01:53何も起きませんが、
00:01:54開発中に動作を確認するための便利な方法が1つあります。
00:01:57フックのオプションで「debug」をtrueに設定することです。
00:02:00こうすると、ボタンをクリックした時に振動の代わりに
00:02:04シミュレートされた音が出るようになります。
00:02:05振動パターンのカスタマイズも非常に簡単で、
00:02:09すべてtrigger関数の中で行えます。
00:02:101つ目の方法は、パッケージに同梱されているプリセットを使うことです。
00:02:14「defaultPatterns」をインポートすれば、buzz、error、heavyなど
00:02:18多くのパターンを利用できます。これらがどんな感じかは、
00:02:21公式サイトで実際に体験して確認できます。
00:02:222つ目の方法は、完全に独自のパターンを作る場合です。
00:02:25trigger関数に配列を渡し、その中で振動を定義します。
00:02:29この例では4つの振動を設定しています。振動はオブジェクトで定義し、
00:02:33「delay(前の振動からの待ち時間)」、
00:02:37「duration(振動させる時間)」をミリ秒単位で指定し、
00:02:41さらに強さを表す「intensity(1が最大)」を設定します。
00:02:46このパターンでボタンを押すと、どんな音(振動)になるか
00:02:49デバッグ音で確認できます。実際にはスマホが振動します。
00:02:53カスタムパターンを作る際のコツは、公式サイトのエディターを使うことです。
00:02:57クリックで新しい振動を追加し、横にドラッグして時間を変更、
00:03:02上下にドラッグして強さを変更できます。再生ボタンを押せば
00:03:06音で確認できますし、スマホで操作すれば、
00:03:09実際の感触を確かめながら調整することができます。
00:03:11動画でこの良さを伝えるのは難しいですが、便利さは伝わったでしょうか。
00:03:14最後に、これがどう仕組みで動いているかを解説します。
00:03:19実は、iOSでこれを実現するのは一筋縄ではいかないんです。
00:03:21本来、スマホの振動機能を呼び出すためのAPIとして、
00:03:24「navigator.vibrate」というものが存在します。
00:03:27Androidでは問題なく動きますが、iOSは全くサポートしていません。
00:03:32しかし、iOSで触覚フィードバックを発生させる別の方法があります。
00:03:36それは、typeが「switch」のinput要素をクリックさせることです。
00:03:41このライブラリは、その仕組みを巧みに利用しています。
00:03:44振動を実行すると、裏側で「見えないスイッチ」を高速でクリックし、
00:03:49振動パターンを再現しているんです。この下のチェックボックスのように、
00:03:53トリガーされると、iOSのスイッチのように何度もオンオフを繰り返します。
00:03:56デバッグ中にこのスイッチを実際に目で確認したい場合は、
00:03:59フックの設定で「showSwitch」をtrueにしてみてください。
00:04:03パッケージのソースコードを見ると、何をしているかがよくわかります。
00:04:06navigator.vibrateが使える(Androidなどの)場合は、それを使って実行します。
00:04:11サポートされていない場合は、こちらの処理で
00:04:15スイッチをクリックします。この関数が、
00:04:19スイッチを複数回クリックして振動パターンを作り出している核心部分です。
00:04:23これは本当に賢い回避策だと思いました。Appleがこれを
00:04:27塞いでしまわないことを願います。もし修正されるにしても、同時に
00:04:31vibrate関数の公式サポートを追加してほしいものですね。
00:04:32このパッケージの紹介は以上です。使ってみたいと思った方は
00:04:35ぜひコメントで教えてください。チャンネル登録も忘れずに。
00:04:38それでは、また次回の動画でお会いしましょう。
00:04:41[音楽]

Key Takeaway

WebHapticsは、ブラウザの制限を賢く回避することで、iOSとAndroidの両方でWebサイトに直感的な触覚フィードバックを簡単に追加できる画期的なライブラリです。

Highlights

WebHapticsは、Webサイトにネイティブアプリのような触覚フィードバック(振動)を追加するパッケージです。

React、Vue、Svelte、Vanilla JSに対応しており、非常にシンプルな関数呼び出しで実装可能です。

iOSが標準のVibration APIをサポートしていない問題を、非表示のスイッチ要素を高速クリックさせるという独自の回避策で解決しています。

公式サイトには、プリセットの振動パターン体験や、独自のパターンを作成できるGUIエディターが用意されています。

デバッグモード(debug: true)を使用することで、PC上でも振動の代わりに音でパターンを確認しながら開発できます。

Timeline

WebHapticsの概要と注目される理由

Webサイトに「触覚フィードバック」というディテールを追加できる新しいパッケージ、WebHapticsが紹介されています。このツールを使うことで、Webサイトでありながらネイティブアプリのような操作感を実現できるのが最大の特徴です。Polymarketなどの有名なプラットフォームでも既に導入されており、開発者の間で大きな話題となっていることが語られます。使い方は非常にシンプルで、1つの関数を呼び出すだけで実装が完了します。後半の技術解説では、特に難しいとされるiOSでの動作を実現する面白い「仕掛け」についても触れることが予告されています。

実際の体験と実装方法の基礎

スマホの物理的な振動を動画で伝えるのは難しいため、YouTubeのチャンネル登録時の振動を例に挙げて感覚を説明しています。実際の感触を確かめたい視聴者に向けて、公式サイトで成功やエラーなどのパターンを体験することを推奨しています。実装面ではnpmパッケージとして提供されており、ReactやVueといった主要なフレームワーク用のヘルパーが用意されている点が魅力です。バニラのJavaScriptでも共通のtrigger関数を使用して、簡単に振動を発生させることが可能です。開発の導入ハードルが非常に低く、モダンなWeb開発に適した設計になっています。

Reactでのコード記述とデバッグ機能

Reactを使用した具体的な実装コードが示され、useWebHapticsフックの使いやすさが強調されています。このフックからは、振動を実行するtrigger関数のほか、停止用のcancel関数やブラウザ対応を確認するisSupportedが取得できます。PCでの開発中には振動が発生しないため、オプションで「debug: true」を設定する便利なテクニックが紹介されています。これを有効にすると、振動の代わりにシミュレートされた音が出るようになり、物理デバイスがなくてもパターンの確認が可能です。開発効率を高めるための細やかな配慮が、このライブラリには組み込まれています。

振動パターンのカスタマイズとエディター活用

振動のカスタマイズには、同梱のプリセットを使う方法と、完全に独自のパターンを定義する方法の2種類があります。プリセットでは「defaultPatterns」をインポートするだけで、エラーや重い振動などを即座に呼び出せます。カスタムパターンを作る際は、遅延、持続時間、強度(intensity)を配列形式で指定して、細かなニュアンスを調整できます。特筆すべきは公式サイトのエディターで、直感的なドラッグ操作で視覚的に振動をデザインし、音や実機で即座にテストできます。これにより、専門的な知識がなくても、ユーザー体験を向上させる最適なフィードバックを作成可能です。

iOSでの動作原理と技術的な「仕掛け」

最後に、iOSで振動を実現するための驚くべき技術的背景が詳しく解説されています。通常、iOSのブラウザは標準のnavigator.vibrate APIをサポートしていませんが、本ライブラリはこれを巧妙に解決しています。具体的には、iOSの「switch」タイプのinput要素がクリック時に振動を発生させる性質を、見えない場所で高速に実行することで利用しています。ソースコードの中身を覗くと、Androidでは標準APIを使い、iOSではこのスイッチクリックを繰り返す処理へと条件分岐していることがわかります。この「賢い回避策」への称賛と共に、将来的な公式サポートへの期待を込めて動画は締めくくられます。

Community Posts

No posts yet. Be the first to write about this video!

Write about this video