もうこれ以外いらない。究極のホットキーライブラリ (TanStack Hotkeys)

BBetter Stack
Computing/SoftwareInternet Technology

Transcript

00:00:00TanStackが、JavaScriptの世界を改善すべく、また新たなパッケージをリリースしました。
00:00:03今回彼らが手を入れたのは「ホットキー」です。そんなの簡単そうだし、
00:00:07最近ならAIが書いてくれるだろうと思うかもしれませんが、考え直してください。TanStack Hotkeysは、
00:00:11複数のキーボードレイアウトやOS、ホットキーの競合など、
00:00:16AIが見落としがちなエッジケースや、スコープの競合など、山ほどある課題を解決してくれます。
00:00:20さらに、キーシーケンスや録音機能も備えつつ、型安全でフレームワークを選びません。
00:00:26ホットキーが必要なら、これを使うかAIエージェントにこれを使えと言えば間違いありません。
00:00:30TanStack製なので開発体験(DX)も抜群です。それでは、さっそく
00:00:35実際に動いているところを見てみましょう。
00:00:41非常にシンプルなので、すぐにコードの解説に入ります。
00:00:45今回はReactアプリで実装しているので、TanStack React Hotkeysパッケージを使用していますが、
00:00:49バニラJavaScript用のパッケージもありますし、
00:00:52他のフレームワーク用も近日公開予定です。現在はアルファ版なので多少のバグはあるかもしれませんが、
00:00:56私のユースケースではすべて完璧に動作しました。まずは、
00:01:01最も基本的な「useHotkey」フックから見ていきましょう。下の方で、
00:01:05パッケージからインポートしているのがわかります。やるべきことは、ホットキーの定義と、
00:01:09そのキーが押された時に実行する関数を定義するだけです。今回は、
00:01:13ホットキーを押すとコマンドパレットが開くという、よくある例を用意しました。
00:01:17何を押して何が起きたか分かりやすいように、トースト通知も表示されるようにしています。
00:01:20見ての通り、このフックは非常にシンプルで、期待通りの動きをします。
00:01:24しかし、TanStackの真髄は開発体験と型安全性にあります。ここでもそれが発揮されています。
00:01:28まず、ホットキーの定義からして凄いです。
00:01:32このパッケージでホットキーを扱う場所はすべて型安全になります。これは驚異的です。
00:01:37入力可能なすべてのキーと、その組み合わせを把握しています。
00:01:41例えば、これを「meta + s」に変更すると、これはmacOSでは「Command + S」になります。
00:01:46アプリに「保存」のホットキーを設定する場合など、これが有効な組み合わせであることを認識します。
00:01:50もしタイポすれば、型エラーが出て、無効なホットキーであることを教えてくれます。
00:01:54もう一つの便利な点は、ホットキーの定義方法です。現在、
00:01:58「meta + k」に設定しており、macOSでは「Command + K」として
00:02:02正しく動作していますが、このままだとWindowsなど、
00:02:06metaキーが存在しない他のプラットフォームでは動作しなくなります。
00:02:11そこで「meta」の代わりに「modifier」キーを使うことができます。
00:02:15こうすることで、macOSでは自動的にCommandキーに、
00:02:19それ以外のプラットフォームではControlキーに設定され、即座にクロスプラットフォーム対応が完了します。
00:02:24ホットキーの定義方法について最後にもう一つ。
00:02:27文字列での定義が好みでなければ、オブジェクト形式で定義することも可能です。
00:02:31これは先ほどの「Command + K」や「Control + K」と同じ意味になります。
00:02:35修飾キー以外のキーを指定し、「modifier」をtrueにするか、他の修飾キーを個別に指定するだけです。
00:02:38定義方法の話はこれくらいにして、
00:02:42次はフックの引数にある、実行される関数について見ていきましょう。
00:02:46中身は自由に書けますが、非常にシンプルです。
00:02:50必要であれば生のキーボードイベントにアクセスできますし、
00:02:54コンテキストも取得できます。この場合、コンテキストからは、
00:02:58押されたホットキーの文字列や、
00:03:02先ほど見たようなオブジェクト形式の定義情報を取得できます。そして最後に、
00:03:05「useHotkey」には他にも見せたい機能がたくさんあります。第3引数には、
00:03:09ホットキーの動作を制御するオプションを渡せます。そのほとんどは、
00:03:13名前から推測できるでしょう。プログラムでオン・オフを切り替える「enabled」、
00:03:17「keydown」か「keyup」かを選ぶ「eventType」などがあります。
00:03:21「requireReset」は、現状ではfalseに設定されているため、
00:03:25「Command + K」を押しっぱなしにすると、繰り返しトリガーされます。
00:03:29しかし、これをtrueに設定すると、一度キーを離さない限り、
00:03:33再度トリガーされることはありません。今押し続けていますが、一度しか反応しません。
00:03:37次に「ignoreInputs」です。これは、インプットフィールドの中にいる時に
00:03:41「Command + K」を押しても、現状では完全に無視され、ホットキーは反応しません。
00:03:45もし入力中でもホットキーを有効にしたい場合は、これをfalseに設定します。
00:03:49そして最後にご紹介するオプションが「target」です。
00:03:53これを使えば、ホットキーにスコープ(有効範囲)を持たせることができます。
00:03:57デフォルトではドキュメント全体になっているので、
00:04:00ページのどこで「Command + K」を押してもコマンドパレットが起動します。
00:04:04これを特定の要素やReactのrefに変更することができます。例えば、
00:04:09「badgeRef」に変更してみます。ページ上をクリックして「Command + K」を押しても反応しませんが、
00:04:13下の「Command K」要素、つまりバッジにフォーカスを当てれば、
00:04:17そこからトリガーできるようになります。これでスコープ付きのホットキーができました。
00:04:21私がなぜこのパッケージを気に入っているか、既にお分かりいただけたでしょう。細部へのこだわり、
00:04:25優れた開発体験、そして完璧な型安全性。まだ1つのフックしか紹介していません。
00:04:30他にも見ていきましょう。次は「useHotkeySequences」フックです。
00:04:34これは複数のキーを連続して入力するシーケンスを可能にし、Vimスタイルのナビゲーションなどが作れます。
00:04:38使い方は「useHotkey」と似ていて、非常に直感的です。
00:04:43キーシーケンスを定義し、それが入力された時に実行する関数を書くだけです。
00:04:47ここでもオプションが指定できます。「timeout」は、
00:04:51次のキー入力をシーケンスの一部として認識するまでの許容時間です。
00:04:54今「gg」と設定していますが、これはリストの先頭にジャンプする設定です。
00:04:59ここで「gg」と押すと、その通りになります。また、
00:05:04「sub」と押すと一番下に飛ぶように設定しました。ちなみに、
00:05:09「sub」は「subscribe」の略なので、ぜひ登録をお願いします。次はもっとシンプルなフックです。
00:05:12まずは「useKeyHold」。追跡したいキーを指定するだけで、
00:05:16そのキーが押し下げられているかどうかを真偽値(boolean)で返してくれます。
00:05:20いくつかモニターしてみましょう。ShiftとAltを押し下げると、
00:05:24その真偽値に基づいてページの状態が変わるのがわかります。
00:05:28また、下の方で現在押されているキーを一覧表示していますが、
00:05:32これは2つ目のフック「useHeldKeys」によるものです。これは単純に、
00:05:36現在押されているキーを配列で返します。「sub」と押せば、配列に表示されます。
00:05:40便利なユーティリティ関数の前に紹介する最後のフックは、
00:05:43「useHotkeyRecorder」です。これを使うと、キーボードショートカットをカスタマイズする
00:05:47ユーザーインターフェースを簡単に作れます。とても優れたヘルパーフックです。
00:05:52使い方はとても簡単です。この「useHotkeyRecorder」からは、
00:05:56録音中かどうか、録音されたキー、録音開始・キャンセルの関数などが取得できます。
00:06:00フックのオプション内では、
00:06:05ホットキーが正常に記録された時の処理を登録できます。私の場合、
00:06:09パレットを開くホットキーを、ユーザーが決定したキーに更新するようにしています。
00:06:14これらをボタンと連携させれば、このようなUIが作れます。今は「Command + K」で
00:06:17パレットが開きますが、「Record」を押すと録音状態になります。
00:06:21ここで「Command + Backspace」と入力すると、それが新しいホットキーになります。
00:06:26実際には、これをデータベースに保存してユーザー設定として永続化させることになるでしょう。
00:06:29本当に素晴らしいヘルパーフックです。これまで見てきた他のフックと同様に、
00:06:33使い方は非常にシンプルで、デフォルト設定も気が利いています。
00:06:37例えばmacOSでCommandキーを使って記録しても、
00:06:42自動的に「modifier」キーに変換されるため、WindowsやLinuxに移ってもControlキーとして動作します。
00:06:46フック以外にも、このパッケージについてお見せしたいことがいくつかあります。
00:06:49まずは、表示形式の調整を助けてくれる関数です。
00:06:53「formatForDisplay」という関数が「tanstack/hotkeys」から提供されています。
00:06:57「modifier + backspace」のような指定を渡すと、自動的にユーザーのプラットフォームに合わせた
00:07:02アイコン付きの形式に変換してくれます。ここでは「⌘ Backspace」と表示されていますね。
00:07:06Windowsなら「Ctrl Backspace」になります。また「formatWithLabels」という
00:07:10関数もあり、これはほぼ同じですが、修飾キーをアイコンではなく
00:07:14正しいラベル(文字列)に変換します。この場合は「Command Backspace」となり、
00:07:18Windowsなら「Control Backspace」になります。そして最後に、
00:07:22私がTanStackを愛してやまない理由の一つ、DevToolsについてです。このパッケージも例外ではありません。
00:07:27DevToolsを開くと、ページに登録されているホットキーや
00:07:30シーケンスが一目でわかります。状態やトリガーされた回数、
00:07:33「keydown」か「keyup」のどちらで反応するかも確認できます。さらに、
00:07:37ドキュメント全体を監視しているのか、特定の要素なのかもわかります。
00:07:41詳細を開けば、設定されたオプションを確認したり、手動で実行(トリガー)させたりもできます。
00:07:45さらに上部では、現在押し下げられているキーが表示されます。
00:07:49設定時にキーの名前がわからなければ、ここで実際に押してみれば
00:07:52正確な値を確認できます。何度も繰り返しているようですが、
00:07:56TanStackは本当に開発体験というものを理解しています。AIコーディングの時代になっても、
00:08:00こうしたツールが提供されるのは非常に嬉しいことです。ホットキーの実装が必要なら、
00:08:05ぜひチェックしてみてください。感想をコメント欄で教えてくださいね。
00:08:08チャンネル登録も忘れずに。それでは、また次の動画でお会いしましょう!

Key Takeaway

TanStack Hotkeysは、型安全性、クロスプラットフォーム対応、高度なカスタマイズ性を兼ね備えた、現代のWeb開発における究極のホットキー管理ライブラリです。

Highlights

TanStack Hotkeysは、OSごとのキー配列の違いや競合など、AIが見落としがちな複雑な課題を解決する。

「modifier」キーを使用することで、macOS(Command)とWindows/Linux(Control)のクロスプラットフォーム対応が自動化される。

完全な型安全性を備えており、無効なキーの組み合わせやタイポを開発中に即座に検知できる。

キーシーケンス(Vimスタイル)や長押し判定、録音機能など、高度なホットキー操作を簡単に実装可能。

専用のDevToolsが用意されており、登録済みのキーやトリガー回数、入力状態を視覚的にデバッグできる。

Timeline

TanStack Hotkeysの概要と導入

TanStackがリリースした新しいホットキー管理ライブラリの概要が紹介されます。単純な実装に見えて実は複雑な、OSごとのレイアウト差異やスコープの競合といったエッジケースをこのパッケージが解決します。型安全でフレームワークに依存せず、キーシーケンスや録音機能などの強力な機能を備えている点が強調されています。開発体験(DX)が非常に高く、現代のフロントエンド開発においてAI任せにするよりも信頼できる選択肢であると述べられています。まずはReactでの実装例を通じて、その真価を探っていきます。

基本的な使い方と型安全な定義

最も基本となる「useHotkey」フックの使用方法と、その驚異的な型安全性について解説されます。ホットキーの定義は文字列だけでなくオブジェクト形式でも可能で、タイポがあれば即座に型エラーで通知されます。特筆すべきは「modifier」キーワードで、これによりmacOSのCommandキーとWindowsのControlキーを自動で使い分けることができます。プラットフォームごとの個別設定を書く手間が省け、コードのポータビリティが大幅に向上します。デモンストレーションでは、コマンドパレットを起動する実用的な例が示されています。

詳細な制御オプションとスコープ設定

ホットキーの動作を細かく制御するための第3引数、オプション設定についての詳細が語られます。キーの連打を防ぐ「requireReset」や、入力フォーム内での動作を制御する「ignoreInputs」などが紹介されます。また、「target」オプションを使用することで、特定の要素やRefにホットキーの有効範囲(スコープ)を限定することが可能です。これにより、ドキュメント全体ではなく、特定のUIコンポーネントがフォーカスされている時だけ反応するロジックが簡単に組めます。これらの細部へのこだわりが、優れたユーザー体験に直結することが示唆されています。

高度な機能:シーケンス、長押し、録音

「useHotkeySequences」を用いたVimスタイルの連続キー入力の実装方法が解説されます。「gg」でページ最上部へ移動するといった、複数のキー入力を組み合わせた高度な操作が直感的に定義できます。また、キーが押されているかを判定する「useKeyHold」や、現在押されているキーを配列で取得する「useHeldKeys」も紹介されます。さらに強力な「useHotkeyRecorder」は、ユーザーがブラウザ上で自分好みのショートカットを設定できるUIを構築するのに役立ちます。録音されたキーは自動的にプラットフォーム共通の形式に変換されるため、保存後の再利用も容易です。

表示用ユーティリティと専用DevTools

ユーザーインターフェース上にショートカットを表示するための「formatForDisplay」などの便利なユーティリティ関数が紹介されます。これにより、OSに合わせて「⌘」や「Ctrl」といった適切なアイコンやラベルを動的に表示することが可能になります。最後に、TanStackシリーズでお馴染みの強力なDevToolsについて触れられ、登録されたキーの状態確認や手動トリガーの方法が示されます。開発中にどのキーがどのスコープで生きているかを視覚化できるため、デバッグ効率が飛躍的に高まります。総評として、このライブラリがホットキー実装の新たなスタンダードになることを確信させて締めくくられます。

Community Posts

View all posts