🧐

40%キーボードに移行する前に知っておきたかったこと

に公開

はじめに

この記事ではエンジニアが30%~40%とキー数の極端に少ないレイアウトにする場合の注意点についてまとめました。

用語について

ShiftやCtrlといった「修飾キー」と、記号などを打つための「レイヤー切り替えキー」は、どちらも「他のキーと組み合わせて別の機能を持たせる」という点で本質的に同じものです。この記事では、これらをまとめて Metaキー と呼ぶことにします。

40%レイアウトの基本ルール

結論を先に言うと、 日常的にコマンドを叩くような作業をするエンジニアは5カラムなど極限までキー数を削ったキーボード配置に安易に移行するのは推奨しない というのが主な主張です。もちろんそれでうまくいっている人は全然問題ないです。これから40%キーボードを検討しようとしている人に向けて、私自身がつまずいた内容を共有することが目的です。

主張したい点は以下です。

  1. 親指のホールドキーの割当は最小限にすべき
  2. 片手6列(6カラム)を推奨

親指のホールドは最小限に

親指にホールドキーをたくさん割り当てると、親指が腱鞘炎になるというのは割とよく聞く話だと思います。私も最初は、「いやそんなわけないだろう」と思っていましたが、 何も意識せずにキーを割り当てていると簡単に腱鞘炎になりました

腱鞘炎を治すには、患部(親指)を安静にすることが重要ですが、エンジニアは毎日キーボードを長時間叩く職業です。一度、腱鞘炎になると患部を完全に安静にするのが難しく、完治するのに時間がかかります。従って、親指の腱鞘炎を防ぐことはキーレイアウト設計において最もプライオリティが高い要件だと思います。


腱鞘炎になった右腕

私が腱鞘炎になった要因は複数あると思いますが、 親指のキー割り当てが多すぎる ことが要因の一つだったのではと考えています。当初、「どうせキーを減らすのなら極限まで減らそう」と考え、最初から5カラムのキー配置を検討しました。そうすると取り得る選択肢としては以下の2つになってきます。

  1. 親指にMetaキーを割り当てる
  2. 親指以外にMetaキーを割り当てる

私は当初1のパターンを採用し、左右の親指にシフトとレイヤー切り替えの2つの機能をTap&Holdで割り当てていました。


親指のHoldキー割り当てが多すぎる例

特にホールド動作の多用が親指の内転筋を酷使するらしく、医学的・解剖学的な根拠については詳しくないのですが、親指の痛みを予防するという意味ではこのパターンは避ける方が無難だと思います(もちろんそれでうまくいっているという場合は問題ないと思います)。

次に2番目のケースですが、親指以外のキーにMetaキーを割り当てるという方式だと、Home Row Modsのパターンがよく取られると思います。私もこれをまず試しました。

Home Row Modsとは、親指以外の指のホームポジション、つまり左側であれば ASDF 、右手であれば JKL;(セミコロン) 、この位置にMetaキーを割り当ててTap&Holdにするというパターンです。

こうすれば親指の仕事量は減って問題解決、となるかと思いましたが、実際には別の問題が生じました。

Tap&Holdのキーペアの黄金律

Metaキーには以下の2つのグループが存在すると考えています。

  1. ショートカットキーとして押されるキー: 高速打鍵中はあまり押さない。例: Cmd, Alt, Ctrl
  2. キーの役割を変えるキー: 高速打鍵中に押される。例: Shift, layer(x)

2の具体例は、記号レイヤーに切り替えて記号を打つ、あるいは数字レイヤーに切り替えて数字を打つといった場合ですが、これは見えているキーの役割を変えるというもので、シフトキーも同じような役割があります。これらは高速打鍵中に頻繁に押されるキーです。

1については、基本的にはどのようなキーとTap&Holdに割り当てて良いと考えますが、2番目のパターンについては注意が必要と考えます。具体的には英数キーのような高速打鍵するキーとTap&Holdにすると誤爆が頻発するという問題があります。

具体的なケースについて考えてみます。例えば、以下の図のように左手の F キーと右手の J キーをTap&Holdにして、ホールドキーをそれぞれレイヤ切り替えキーに割り当てたとします。


Homeキーにレイヤ切り替えキーを割り当てる例

前回の投稿『自作キーボードに機械学習モデルを仕込む』でも議論しましたが、基本的に人間というのは一つ目のキーを離してから次のキーを押すということはやっていません。高速打鍵中はキー同士の重なりが頻繁に生じています。

また、高速打鍵中のシフトキーあるいはレイヤー切り替えキーストロークのパターンを考えてみると、これらのキーはホールドキーに割り当てられますが、ホールドキーというのは 一定秒数を待たないと確定しないキー なので、高速打鍵中であっても、一定時間押し続けるまで判定を待たなければならなくなります。これを意識せずに高速打鍵すると、これらのキーがタップとして確定されて誤爆します。

したがって、個人的な結論としては、 シフトとレイヤー切り替えのキーは、流れの中で打つキー(特に英文字キー)とはTap&Holdのペアにしない、あるいは個別のキーに割り当てる というのが黄金律かと思います。

6カラム(片手6列)の方が無理のないレイアウトを作りやすい

以上の内容を踏まえると、5カラム(片手5列)のレイアウトに安易に移行するのは個人的には推奨しません。

30%キーボードの多くは、左右それぞれで「行数3 × カラム数(列数)5」の、合計30キー程度の割り当てになると思います。この場合、レイヤー0にある英文字以外のキーが、QWERTY配置の場合は、右手のわずか4キー(;, ,, ., /)に限定されます。


30%配列(QWERTY)でシフト・レイヤ切り替えを快適に配置できるポジション

この配置だと 左手には親指以外にシフトとレイヤー切り替えが置けなくなり 、右手だけにしか置けないことになります。それを許容するという考え方もありますが、個人的にはあまり押しやすい配置ではないと思います。

QWERTY配列をやめて左右に記号キーを分散するという考え方もありますが、いずれにせよ、 本来自由なキー配置が売りのはずの自作キーボードなのに、 キーのレイアウトが限定される という本末転倒な状況になります。

したがって、 親指のホールドキーの割り当てを最小にするという原則と、流れるように打つキーにTap&Holdを割り当てないという原則を両立させようとするなら、無理して5カラムに絞るよりは、6カラムにして小指にMetaキーを担当させる方が無理のない配置を作りやすい というのが私の意見です(あるいは、基本的に自作キーボードは大は小を兼ねるので、ハードウェアは6カラムを買っておき、途中でいけるなと思ったらRemapなどのソフトウェアで5カラムのレイアウトに移行するのもありだと思います)。

実運用におけるTips

メインの主張は以上です。ここからは、実運用における細かなTipsを2つ紹介します。

サーバー作業での誤爆対策

エンジニアがキー数の少ないキーボードに移行するにあたって、問題となるのがサーバー作業での誤爆だと思います。具体的には、コマンドで作業中に Ctrl+C でプログラムを強制終了するとか、 Cmd+C で変な文字列を貼り付けるというのは、事故になりうる極めて危険な状況だと思います。

私がこの問題でとっている対策は非常にシンプルで、 ホールドと確定される確率を低くする ことです。具体的にはQMKの設定で、 TAPPING_TERM というタップとホールド判定の閾値を設定するパラメータがありますが、この値をホームポジションのみ個別に長めに取るということをやっています(具体的には 250ms)。

これは安全側に倒した対策で、ホールドのつもりで打ったのがタップになるのはそこまで問題ではなく、タップのつもりで打ったのがホールドになるというのは極めて危険なので、こういう対応をとっています。本当にサーバー作業での誤爆を完全に阻止したいというのであれば、 そもそも40%キーボードにしない、あるいは Tap&Holdを使わない というのが一番安全な対策だと思います。

レイヤ切り替えと後続のキーを同じ手で押さない

続いての内容は指の保護、特に親指の腱鞘炎対策につながる内容です。

基本的に30%〜40%キーボードは、一つのレイヤーに配置できるキー数が少ないので、なるべく一つのレイヤーにたくさんキーを敷き詰めようという考え方になりやすいと思います。

そこで問題になるのが、レイヤ切り替えと後続キーを同じ手で押すようなレイアウトです。


レイヤ切り替えと後続のキーを両方左手で押す前提のレイアウト

こちらも医学的なエビデンスはありませんが、個人的に 親指に無理な姿勢を取らせない のが良いと思っていて、私はレイヤ切り替えやシフトキーと後続のキーは別々の手で押す前提でレイアウトを設計しています。

レイアウト例

最後にこれまでの設計パターンを踏まえたレイアウト例を紹介します。これが最適だと主張するつもりは全くなく、これまでに述べてきた内容を具体的にどうレイアウトに反映すればいいかの参考として捉えていただければと思います。

ホームレイヤ

まず、親指のレイアウトですが、 shift layer(1) 切り替えを左右のホームポジションにそれぞれ1つずつ割り当て、「親指のホールドは1キーまで」というルールで設計しています(実際はマウスカーソル移動用のレイヤー4も割り当てていますが、現状ほぼ使っていないので無視してください)。

左右の SDFJKL をHome Row Modsにしており、それぞれTAPPING_TERMに相当する閾値を250msと長めに設定することでコマンド作業での誤爆を防いでいます。

右手の小指に関しては、ホームポジションのセミコロンに layer(2) の記号レイヤへの切り替えを割り当てています。セミコロンは「高速打鍵するキー」ではないという前提の設計です。まれに誤爆は生じますが、TAPPING_TERMに相当する閾値(実際はSVMのパラメータ)を調整することで対応しています。

数字と記号

「レイヤ切り替えキーと後続のキーは左右別々のキーで打鍵する」というルールに従い、それぞれレイヤ切り替えキーのある手とは逆側の手に配置しています。

数字レイヤ

記号レイヤ

まとめ

以上、40%レイアウトにする上で個人的に重要だと思うルールをまとめておきます。

親指の保護

  1. 親指のホールド操作を最小限にする
  2. レイヤ切り替えと後続のキーは別々の手で打鍵する

誤爆対策

  1. 流れるように打つキー(英数など)とMetaキーはペアにしない
  2. サーバ作業で誤爆したらやばい修飾キー(Cmd, Alt, Ctrl)はホールド判定されにくくする

これらはあくまで、私の環境において「こうするとうまくいった」という一つのケーススタディです。最適なレイアウトは、手の構造や打鍵の癖、日常的な作業の特徴などによって大きく異なるはずです。

この記事が、皆さんの理想のキーボードレイアウトを探求する上での参考になれば幸いです。

GitHubで編集を提案

Discussion