Keyball39の自動マウスレイヤーで、如何に誤爆を少なくするか
生きることにこだわりを。魚住惇です。
前回の配信ではKeyball39のファームウェアをVialに対応させた話を書きました。それ以前もQMKをどうやってカスタマイズしたら、自分の理想の操作方法に近づけるんだろうと言うのを試行錯誤し続けました。ClaudeCodeと会話しながら実装した機能によって、やっと自分好みのKeyballにまた一歩近づきました。今回紹介するのは、その操作の考え方についてです。ちょっとしたこだわりに、お付き合いください。
AML(自動マウスレイヤー)について
まずはおさらいから。QMKにはいつからかAuto Mouse Layerという機能が実装されました。以前までは特定のレイヤーに左クリックや右クリックなどのマウス関連のキーを登録しておいて、そのレイヤーに手動で切り替えながらトラックボールを転がしたりクリックするなどしてKeyballをトラックボールとして使っていました。ただしこれだと、レイヤーを切り替えないまま左クリックを割り当てたキーを押してしまい、結果文字が入力されてしまうという誤爆が起こりました。
この不満に対して登場したのが、自動マウスレイヤーという機能でした。トラックボールを転がしている間は自動的にマウス関連のキーが登録してあるレイヤーに切り替わるというものです。これがかなり画期的で、もうボタンを押さなくてもレイヤーが切り替わってくれて、使ってみた時はウハウハでした。
しかしこれもまた次第に不満が出てきました。デフォルトの状態だと、ボールを転がし終わってから少し時間が経って、その後レイヤー0に戻ります。その時間そのものが調整できるわけなんですが、自分の場合はそれをどんな時間に設定しても誤爆することがありました。ここでいう誤爆というのは、「左クリックをしようとしたら既に自動マウスレイヤーからレイヤー0に戻ってしまっていて、「J」のキーが入力されてしまった」という状態を指します。これが人によっては「クリックしようとしたらJが入力されてしまった」という逆の場合もあるわけですね。
negokazさんの誤爆対策から派生した考え方
そんな中、negokazさんという方がこの考え方を提唱しました。
マウスカーソルを動かすのはほとんどの場合、何かをクリックしたいからであって、クリックするまでマウスレイヤー抜ける必要はないはず。
次の仕様によってこれらの誤爆を減らす。
その仕様というのはこちらの2つです。
マウスレイヤーに入ったら、マウスキーを押すまでマウスレイヤーに留まり続ける
マウスキーを押したら短時間でマウスレイヤーを解除する
マウスキーを押すまで Auto Mouse Layer に留まり誤爆を減らす by negokaz · Pull Request #2 · negokaz/keyball · GitHub
これをみた時、「なるほど!確かにこの方の言うとおりだ。何かをクリックした時点でLayer0に戻れば良いわけだし、次にクリックする時にはそれまでにボールだって転がっているだろう。」と思っていました。しかし実際にこの機能を自分のファームウェアに実装してみると、この「マウスをクリックする」と「キーボードを使う」という2つの行動がそのまま直結しないケースがいくつかあるなと考え直すことになりました。
この考え方そのものはすごく大事なんですよ。ただし、自分が本当にその通りの操作方法で誤爆が減るかどうか。実際に操作してみて確かめました。残念なことにまだまだ誤爆してたんですよね。一番感じたのは、「クリックしたいと思ったのに、Jが入力されてしまった」というパターンでした。要するに、マウスとして使いたいはずなのに、既にキーボードに戻ってしまっていたということです。これの原因は単純で、マウスレイヤーから抜けたことを自分が認識できていなかったからです。だからマウスとして使いたいのにキーボードとして動いてしまったのでした。
この感覚は本当に単純です。自分がコンピュータを操作していて、マウスを使っている時はマウスとして動いて欲しいし、キーボードを使っている時はキーボードとして動いて欲しいんです。たったそれだけ。これを1台でやっているのだからややこしくなります。
普通なら、キーボードとマウスは手を移動して持ち替えます。マウスを使いたいならマウスに手を伸ばすし、キーボードを使いたいなら手をキーボードがある位置まで移動させます。
逆に言えばそれは、利き手がマウスを持ち続けている限り、その手が触っているのはマウスのはずで、その手の指が触れたものがマウスなのです。キーボードも同様です。
つまり誤爆というのは、実際に目の前にあり操作しようとしているデバイスと、脳が認識しているデバイスが食い違うことによって起こるトラブルということです。だからマウスの左クリックとして押したボタンが「Jの入力」になってしまうし、文字を入力しようと思ったらマウス操作が起こってしまうのです。
じゃあどうやってこの誤爆を少なくするかですよね。これまで僕自身も試行錯誤を続けてきましたが、未だに完全に誤爆を防ぐことは難しいです。ただし、操作方法を工夫することで、9割くらいは減らせました。このためには、普段から自分がどんなことを考えながらマウスを操作し、キーボードで入力を行ってきたのかを言語化する必要がでてきます。特にマウスとキーボードで考えなければならないのは、
どういう時にマウスに手を伸ばすか
どのようにマウス操作を行うのか
どんなタイミングでキーボードに手を移動するのか
キーボードで操作したいことは何か
どんなときにマウスとキーボードを交互に使うのか
このあたりが中心です。僕自身がこれを考えたとき、AMLに対するnegokazさんの操作とは違った癖のような動きがあることがわかってきました。ここで大変便利なのが自作キーボードというデバイスで、自分が書いたプログラムの通りに動いてくれます。以前も似たよう話を語ったと思ったんですが、あれから更に追加された考え方が増えてきたので、今回はそれを紹介したいと思います。
意識的にキーボードに切り替える
AMLの挙動は前半と後半に分かれます。前半とはトラックボールを転がしてマウスレイヤーに移動する場面です。そして後半は、マウス操作が終わってキーボードのレイヤーに移動する場面です。先ほども説明したように、AMLの挙動と自分が考えていた動きが食い違うと誤爆が起こります。
特に自分の場合は、マウスとして動いてくれている間はずっとマウスであって欲しいんですよね。トラックボールを転がしたらすぐにマウスとして機能して欲しい。なぜならマウスとして操作している時には普段はキーボードを触っていないからです。マウスを操作しているときはマウスとして動いて欲しいんですよ。このタイミングで意図せずキーボードに戻ってしまうから誤爆します。
なので自分の場合は、一度AMLが発動したら、意図的に戻ろうとしない限りずっとマウスレイヤーに留まるようにしました。時間で区切ったりしません。お前はマウスだと言われたら良しと言われるまでマウスなんです。
その状態からキーボードとして操作したいときはどんなタイミングでしょうか。当然ですけどキーボードとして使いたいときというのは、入力をしたいんですよね。文字入力です。ただし日本人がキーボードを使うとなると、英数入力したいときと、日本語入力を行いたいときの2パターンあるわけですよ。なので最初に導入したのは、「日本語入力をオフにしてレイヤー0に戻るキー」と「日本語入力をオンにしてレイヤー0に戻るキー」でした。
AMLから他のレイヤーを経由してからレイヤー0に戻る
これで一件落着かと思いきや、これだけではまだまだ自分が思う「快適に使える」という領域には到達できていませんでした。次に考えたのが、「日本語入力オフ」「日本語入力オン」以外のAMLの終わり方です。要するに他にもパターンがあったんですよ。マウスからキーボードに戻りたいタイミングというのが。
こちらが現在の僕のレイヤー2の様子です。
このレイヤー2はレイヤー0にいるときの、左親指に割り当てています。タップすればスペースキー、ホールドでレイヤー2です。左親指でホールドしながらこれらのキーを使うということです。主な内容は右手でカーソル移動、左手でコピペなどのショートカットキーです。これまでは、このレイヤー2に移動する際は、必ず文字入力中だと思っていたんですよ。カーソル移動だって、コピペだって、ある程度文字を入力してから行うテキスト編集作業です。
ところが自分がKeyballを使っているとき、トラックボールを転がしてマウスポインタを移動させて、最終的にはクリックします。クリックした後に、カーソル移動したり、コピペのペーストを行いたい場合がありました。この場合はAMLからレイヤー2に移動してから操作します。問題はそのレイヤー2で使いたい機能を使った後です。僕の場合は、レイヤー2にあるキーの操作を行った後に、レイヤー0に戻りたかったんですよ。
しかしKeyballをそのまま使うと、AML中にレイヤー移動したとしても、またAMLに戻ってくるんですね。そうじゃなくて、AMLから他のレイヤーに移動したら、そのあとはキーボードとして操作したいんだから、AMLじゃなくてレイヤー0に戻って欲しいんです。じゃあマクロか何かで工夫すれば良いじゃんという話にもなると思うんですが、この機能をホールドで実現したかったんですよ。
AMLの様子がこちら。
これでいうと左親指で、これまでは日本語入力をオフにしてAMLを抜けたり、日本語入力をオンにしてAMLを抜けたりしていました。でもそれはタップの話。これら左親指のキーをホールド中は、それぞれレイヤー0にいた時のと同じようにレイヤー2などに移動したいんです。そして文字入力以外のキー操作を行ったあとは、AMLではなくキーボードとして使いたいので、レイヤー0に戻りたかったんです。
つまり、キーボードというのはただの文字入力のためだけの装置ではなく、カーソル移動したりショートカットキーを利用して入力補助を行うデバイスだということです。以前までは入力したい時だけAMLから戻せたら良いなとばかり思っていました。今回はそれに加えて、入力補助を行う際もAMLからキーボードに戻りたいということ。これをAMLからレイヤー0に戻ってから更にレイヤー2に切り替えていたのではワンテンポ遅れてしまう。これがストレスでした。このストレスを解消するために、ClaudeCodeにお願いしてその通りに動作するキーをユーザーキーとして用意してもらったわけです。
それをMermaidで図にしたものがこちらということです。トラックボールを転がしたらAMLが発動して、そこから5つのパターンを経てレイヤー0に帰ってくる。魚住のKeyball操作は、これがぐるぐる回っているということです。
こういう自分なりの仕組みを考えて言語化すると、それらをAIに投げて実際のコードとして書いてくれる。そして書いたコードをこれまでのProMicro以上に受け止めてくれるRP2040版のProMicro。これらの組み合わせで、Keyballがかなり使いやすくなりました。もう本当に快適で、ここ最近はずっと自分が望む機能を言語化してはコード化してもらい、実装し続けています。実装されたコードでKeyballを動かして、「おお!これこれ!」と思えばそのままにして、「いや、そうじゃない」と思えばまた修正。これを繰り返していき、常に「これだよこれこれ」と思えるキーボードに仕上げていくこの営みが楽しいんですよ。
ここ最近は無線分割トラボキーボードがどんどん登場して、主戦はそっちだと思ったんですがね。こうしてみると元祖であるKeyballだってまだまだ発展の余地はありまくりますし、Vial対応のおかげでさらに可能性が広がったと思います。理由はちょっと分かりませんが、ただのRP2040対応QMKよりもVial対応の方がトラックボールの感度も安定しています。これは良い誤算でした。
Slimbladeも、これだけプログラマブルだと嬉しいんですけどねぇ。
今回のnewsletterは以上となります。今回はKeyballについてのこだわりでした。
「いいね」を押していただけるとうれしいです。内容に関するご意見ご感想がありましたら、「#こだわりらいふ」をつけたツイートや、Substack内のコメントまでお願いします。





