左手デバイスって何?なぜシフターなのか?
左手デバイスとは
「左手デバイス」 とは、キーボードの左側に置いて使う専用の入力補助装置のことです。ボタンやダイヤルに好きなショートカットや操作を割り当てることで、作業効率を劇的に向上させます。
主な用途:
- 動画編集: カット、再生、音量調整などをワンタッチで操作
- イラスト制作: ブラシ切り替え、「戻る」、キャンバスの拡大縮小を素早く
- プログラミング: よく使うコマンドや定型コードを瞬時に入力
- 配信: シーン切り替え、マイクミュートなどを即座に実行
代表的な製品:
- Stream Deck(Elgato社): 液晶ボタンが並んだ定番デバイス(1.5万〜3万円)
- TourBox: ダイヤルとボタンの複合型でクリエイターに人気(2.5万円前後)
「便利そうだけど、高いな……」
そう思いながら部屋を見渡すと、埃を被った数万円の 「レーシングゲーム用シフター」 が目に入りました。
レーシングシフターとは
PlayStationやPC用のレーシングゲーム(Gran Turismo、Assetto Corsaなど)で使用する、車のギアチェンジを再現した周辺機器です。
本記事で使用したシフター:
- Logicool G29: ハンコン(ハンドルコントローラー)セット付属のシフター(6速+R)
Thrustmaster TH8S: 高級シフター単体(金属製、約2万円)
これらはUSB接続でPCに認識されるため、 「これをキーボード代わりにできるのでは?」 と閃きました。
「これしかない!」
そう思って遊び半分で構築し始めたはずが、いつの間にか本気になってしまい、最終的にPCデスクが某戦隊ロボのコックピットのようになっていました。
気に入り過ぎて、貯めたお小遣いでTH8A(高級シフター)まで買い足す始末。当初の 「金がないから代用する」 という理由はどこかへ行きました。
しかし、この 「よくわからないシステム」 を大学の総合型選抜でアピールした結果、第一志望に合格できてしまったのです。
完成したもの
Hyprland(Linuxのタイル型ウィンドウマネージャー)のワークスペース(仮想デスクトップ)を、車のシフトチェンジのようにガチャンと切り替えるシステムです!
デモ動画
ワークスペースとは?
WindowsやMacにおける 「仮想デスクトップ」 と同じ概念です。
通常は Super+1 〜 Super+8 などのショートカットキーで切り替えますが、数が増えるとキーが足りなくなったり、指が届かなくなったりします。
そこで、シフターを使って 「物理的なギアの位置」 で画面を直感的に切り替えるシステムを構築しました。
システムの主な特徴
- 直感的な操作: レーシングシフターをガチャンと入れるだけで画面が切り替わる。
- 圧倒的な拡張性: 「レイヤー」機能の実装により、5つのレイヤー × 8つのギア = 合計40ワークスペースを管理可能。
- 視覚フィードバック: Waybar(ステータスバー)に現在のギアとレイヤー状態をリアルタイム表示。
半年使ってみた感想
この奇抜なシステムを半年以上使い続けての正直な感想です。
良い点
- 意外と実用的: すぐに飽きて捨てる予定でしたが、キーボードショートカットを探すよりも 「身体で覚える(手続き記憶)」 ため、慣れると爆速で操作できます。
- アイデンティティになった: いつの間にか周囲から 「シフターでタブ切り替えてる変人」 として定着しました。名刺代わりになります。
- ロマンの塊: これ以上のロマンは存在しないと言えるほど、最高の作業環境を手に入れました。
欠点
- うるさい: 操作のたびにガチャン、ガチャンという音が響きます。でも、それも含めてロマンです。
結果
自分にとってのデメリットはなく、ロマン重視に見えて実は効率も良いシステムが完成しました。
そして、大学の総合型選抜の面接時。シフトレバーを持参し、アイスブレイクで 「こういうよくわからないものも作っています」 と紹介したところ、面接官全員が大爆笑。場の空気が一気に和み、その後の質疑応答もリラックスして臨めました。
その結果、無事に合格。今ではこのシフトノブに手を合わせて拝んでいます。マジで神。
【技術編】実装の要点
ここからは技術的な解説です。ソースコードの全文や詳細なセットアップ方法はGitHubリポジトリを参照してください。
https://github.com/kurimogo/SisterBoard
システム全体の構成
大枠の仕組みは以下の通りです。Rustでデバイス入力を監視して仮想キーボードとして振る舞わせ、Hyprlandのスクリプトを叩きます。
G29/TH8A(物理デバイス)
↓ (Linux Input Event)
Rustアプリケーション(デバイス監視・非同期処理)
↓ (uinputで仮想キーボード化)
Hyprland + Bashスクリプト群(レイヤー計算)
↓
40ワークスペース(5レイヤー × 8)へ切り替え
↓
Waybar(状態表示)
1. Rustアプリケーション(入力処理)
最初はPythonで作っていましたが、「コンパイル言語の方が速いのでは?」という安直な理由で、触ったことのないRustを採用しました。…
技術スタック:
-
Rust & tokio:
async/awaitによる非同期処理で、複数のデバイス(G29とTH8Aなど)を同時に低遅延で監視。 -
uinput (Linuxカーネル機能): ユーザー空間から仮想入力デバイスを作成。Rustからキーボードショートカット(例:
Win+Shift+F1)を発行します。 - serde: JSON設定ファイルで「どのギアに入れたらどのキーを押すか」を柔軟に定義。
工夫した点:
- チャタリング防止: アナログ軸(シフターの位置)の値を監視し、閾値を超えた瞬間だけイベントを発火させる「エッジ検出」を実装。
-
自動検出:
/dev/input/eventXを手動で指定せず、デバイス名から自動的に対象を特定するロジックを実装。
2. Hyprlandのレイヤー管理システム
Hyprland標準ではキーバインドが足りないため、「レイヤー」という概念を自作スクリプトで導入しました。
レイヤーの仕組み:
車のギア(1速〜8速)は物理的に8つしかありませんが、「レイヤー」を切り替えることで機能を拡張します。大型トラックの多段シフトのような仕組みです。
ワークスペースIDの計算式(Bashスクリプト):
シフターからの入力は単なる数字(1〜8)ですが、スクリプト内で以下の計算を行い、実際のワークスペース(ID: 1〜40)に振り分けます。
# ワークスペースID = レイヤー番号(0-4) × 8 + ギア番号(1-8)
ws=$((layer * 8 + number))
hyprctl dispatch workspace "$ws"
これにより、同じ「1速」に入れても、現在が「Midレイヤー」なら「ワークスペース17」に移動する、といった挙動を実現しています。
3. Waybarとの連携
現在のレイヤー状態が分からないと迷子になるため、レイヤー名をファイルに書き出し、Waybarのカスタムモジュールでリアルタイム表示させています(signal機能を使用して即座に更新)。
まとめ
「高い左手デバイスが買えないから、もっと高いシフターを使った」 という本末転倒な話でしたが、結果的に非常に満足度の高いシステムになり、おまけに大学合格まで付いてきて幸せになれました。
「普通じゃない作業環境を作りたい」 という方に、ぜひおすすめです。