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[音楽]