自作キーボードのキーの減らしかた

自作キーボード界隈の人はキーボードのキー数を減らすことに熱心です。キーが減るとキーボードが小さくなって机が広くなるうえ、キー配置がホームポジション近辺に整理されることで打鍵時の指の移動距離を最小化できるからです。そして何より小さいキーボードはかわいい。いいことしかないわけですね。自分も順調にキーを減らしていき、今は39キーまでたどり着きました。

最近設計したSlab30。この写真は41キーだが、今は左下右下のCtrlを取って39キーで使っている

しかし効率を求めるあまりキー配置やキーボード形状を大きく変えてしまうと、職場で使わざるを得ない普通の日本語キーボードのノートPCが逆に使いづらくなってしまいます。これは自分のポリシーに反するので、キー数を減らすにあたっては次のようなことを念頭に置いて進めました。

  • 一体型のロースタッガード形状を維持すること
  • 元の位置から大幅に異なる極端な配置換えを行わないこと

そしていきなり30%を目指すのではなく、ある程度のまとまりで段階的にキーを削っていくことで無理なく移行できたと思っています。下記の通りステップごとにまとめておきますので、誰かの参考になれば幸いです。

STEP 0: なぜキーを減らしても困らないのか

レイヤー機能

キーを減らした結果、減らしたキーの文字が打てなくなってしまうようでは困ります。なので減らしたキーの文字は「ある特別なキーを押している間にキーを打つと本来とは別のキー入力を行う」機能を使って入力できるようにするわけです。これはレイヤー機能と呼ばれています。ノートPCのFnキーと同じ機能ですね。

例えばレイヤー側の「1キー」に「F1入力」を割り当てておけば、レイヤーキーを押しながら1キーを押すことで、F1が入力されるようにできます。そうすると物理的なF1キーは不要になりますね。このようにして実用性を損なわずに物理的なキーの数を減らしていけるわけです。

Slab30ではメイン+3枚のレイヤーを定義しています。
写真1枚目がメイン(0番目のレイヤー)、写真2枚目が1枚目のレイヤー

レイヤー切り替え用のキーをどれに割り当てるかは重要で、かつ好みの分かれるところです。レイヤー切り替え中はそのキーを押し続ける*1都合上、手の動きが制限されてしまうからです(Shiftキーを押しているときなどを想像してください)。

私はスペースキーにレイヤー機能を割り当てています。スペースキーは左手と右手どちらの親指でも自然に押せる位置にあるのと、もともと親指はスペースキーを押すくらいしか仕事がなく他の指を邪魔しないため、レイヤーキー係として都合が良いのです。

Mod-Tap

スペースキーをレイヤーキーにしてしまったら、スペースは入力できなくなってしまうのでしょうか。大丈夫です。Mod-Tapと呼ばれる機能を使うと、長押しの場合と短押しの場合それぞれに別のキー入力を割り当てられます。

先ほどの私の例だと、スペースキー短押しでスペース入力、長押しでレイヤー切り替えを割り当てています。レイヤー切り替え用に専用のキーを確保しなくて済むので、キー数削減にも貢献していますね。

Vialに対応したファームウェアだとグラフィカルにModTapが設定できて便利

STEP 1: ファンクションキー行の削除

では具体的なキー削減の話に入っていきます。

よくあるノートPCの日本語配列は次のような感じですが、ここからファンクションキーの行と最下段のかなキーを減らせば、いわゆる60%サイズに移行できます。

よくあるノートPCの日本語配列

つまり、下記のような感じになります。この図では67キーです。

拙作60%キーボードのYM60JIS

この記事では、レイヤーに割り当てたキーはキーの前面(灰色部分)に記載することで表現しています。

下の図の例では、1~3キーの前面にF1~F3の記載があります。これはレイヤーキー+1~3キーでF1~F3が入力できることを表しています。

ファンクションキー

ファンクションキーはレイヤーに移動し、数字の1~0キーの位置にそれぞれF1~F10を割り当てています。物理的な位置もほぼ同じですし、キーの名前も数字と対応しているため違和感はほとんどありませんでした。

また、ファンクションキーに割り当てられている機能には代替となるショートカットキーがあることが多いので、今回を機になるべくショートカットキーを使うように矯正しました。

私がよく使うのは下記の通りです。

ファンクションキー 用途 代替ショートカットキー
F2 ファイル名の変更(エクスプローラー)、セルの編集(Excel (残念ながら)なし
F5 再読み込み(Chrome Ctrl+R
F6 ひらがな変換 Ctrl+U
F7 全角カタカナ変換 Ctrl+I
F8 半角カタカナ変換 Ctrl+O
F9 全角英数字 Ctrl+P
F10 半角英数字 Ctrl+T, もしくはCtrl+Pの後にCtrl+O
F12 デベロッパーツール(Chrome Ctrl+Shift+I

よく使う割に替えが効かないのはF2だけですね。Microsoftはこれなんとかしてほしい・・。

半角/全角キー

日本語入力のOn/Offに使うキーです。60%の段階だとまだ居場所がありますが、いずれ40%になると置き場所に困ることになります。

加えて、そもそも頻繁に使うキーの割に位置が遠すぎるという問題もあります。キー数の削減を抜きにしても、日本語入力のOn/Offは別の使いやすいキーに割り当てるべきだと思います。

Windows標準の日本語入力機能(MS-IME)は、設定で日本語入力のOn/Offのキー割り当てを変更できますので変えてしまいましょう。私のおすすめは無変換キーにIME Offを、変換キーにIME Onを割り当てることです。

OnとOffを別のキーに割り当てることで、今OnなのかOffなのか覚えておく必要がなくなります。日本語を打ちたいときは常に変換キーを押してから打ち始めるようにすれば、日本語入力Offのままで謎のアルファベットの羅列を打ってしまう事故を避けることができます。

Escキー

半角/全角キーは不要になったので、Escキーは半角/全角キーの位置に移動します。慣れるまで半角/全角キーを維持したいなら、Escはレイヤー側に割り当てておくと良いでしょう。

Home、Endキー

HomeキーとEndキーは主にテキストエディタで行頭や行末へ移動するのに便利ですね。私はレイヤーの←キーと→キーにそれぞれ割り当てています。←が行頭、→が行末と連想しやすく、またPageUpとPageDownがレイヤーの↑キーと↓キーに割り当てられていることもあり、移動系がカーソルキーにに集約されてしっくりきます。

Delキー

レイヤーのBackspaceキー位置に割り当てます。元々の位置とも近いですし、いずれも字消しのキーですからイメージしやすいです。

かなキー

かな入力を使わない人にとっては誤爆の原因にしかならない邪魔なキーなので単純に捨てます。これで1キー分の空間が空くので、拙作YM60JISではスペースキーと変換/無変換をホームポジション中央に対象となるようにサイズ変更と移動を行っています。

STEP 2: 英語キーボード風BackspaceとEnterの導入

日本語キーボードの大きなEnterキー(ISO Enter)は2行に渡って空間を占有しているため、キー数を減らして「土地」を効率的に使いたいという観点では少々贅沢です。そのためEnterはANSI風の横長キーに置き換えるべきだと考えました。

Enterが横長になるとホームポジションから近くなるというメリットもあります。ホームポジションを維持できるとタイプミスを減らすことができるので大変重要なことです。より遠いBackspaceについても同様のため、こちらもANSI風の横長のキーを採用することにしました。

拙作YM60A。あくまで日本語キーボード

これらの変更により閉じ角括弧キーの位置が変更、円記号キーが削除され、キー数は66キーとなりました。

角括弧キー

閉じ角括弧キーは今までEnterキーの上半分が占有していた位置に移動となります。ただ、開きと閉じの位置関係が今までの縦配置から横配置に変わったため、なかなか違和感が拭えませんでした。

結局、私はその違和感を克服するよりも、角括弧キーをレイヤーの山括弧キーの位置に割り当て、そちらをメインで使うことを選びました。

山括弧キーは元々横配置のため打ち慣れていますし、同じ括弧仲間なのでイメージもしやすいです。この配置はすぐに慣れることができました。

円記号キー

円記号はWindowsにおけるパス区切り文字であるため多用しますから、これがなくなると結構不便です。しかし円記号はバックスラッシュキー(いわゆる「ろ」キー)でも打つことができるので、そちらを使うようにすれば苦労はありません。

しかしながらパイプ(|)記号を打つには依然として円記号キーが必要なので、レイヤーのバックスラッシュキーの位置に円記号キーを割り当てることにしました。行の位置が元の位置から大きく変わるものの、同じ円記号のキーとしてイメージしやすいと思ったためです。

ちなみに「ろ」キーは英語キーボードには存在しませんが、拙作YM60Aでは残してあります。

ちなみに一時はEnterキーの上半分の位置のキーに割り当ていましたが、この位置はイマイチ慣れませんでしたね。閉じ角括弧として使っていた時期があったから混乱してしまったのかもしれません。

STEP 3: 数字行の削除

数字行を削除すると、いわゆる40%と呼ばれるサイズになります。数字行には数字キーの他にいくつかの記号キーが含まれますが、特にマイナスキーは日本語の長音記号の入力に使われるため、これをどう解決するかが難しいところです。

非対称なスペース分割も悪くないな、と思ったKeychon Q9 Plus

40%の時代はKeychron Q9 Plusを上記のようなキー配置で使っていました。これは53キー+ノブです。

数字キー

慣れなかった横一直線の配置

数字キーはそのままQの行に下げてレイヤーに割り当てました。数字キーに十分慣れている人は違和感なく移行できると思います。

しかし恥ずかしながら私は数字キーのブラインドタッチができなかったために、最後まで慣れることができませんでした。特に右手側の1つめの指である人差し指が7から始まるというのがどうしても違和感があって、毎回探してしまっていました。

さらに、Shift+数字キーで打つ記号の入力も難しくなっていました。レイヤーキーとShiftの2つのキーを押しながらの入力になるため、ホームポジションが大きく崩れるうえに、%や&あたりは指が遠くてプルプルします。

「&」を打つ際の運指。キツい

これらの問題は次のステップで一応の解決を見るのですが、Keychron Q9を使っていた時代は良いキー配置を見いだせず、結局40%を諦めてしばらくの間60%に戻っていました。

マイナスキー、ハット(^)キー、Backspaceキー

これらはそのまま1行下にずらし、Pの隣に移動しました。元々置いてあった@キーはレイヤー側に移動しています。日本語入力の関係でマイナスキーの方が利用頻度が高かったため、このような判断となりました。

しかし元々@キーのあった位置に別のキーがあるわけですから混乱しがちです。@はSNSやチャットツールで利用頻度が高いこともあって悩みどころです。

角括弧キーはすでに山括弧キーのレイヤーに割り当て済みであり必須ではなかったため、そのままハットキーとBackspaceキーで置き換えとなりました。

Escキー

これはレイヤーのTabキー位置に配置しました。Escは利用頻度も低いですし、位置的にも特に違和感はなくすぐ慣れました。

STEP 3.5: 右手小指の記号キー削除

右手小指ゾーンは左手小指に比べてキー数が多く、EnterやBackspaceへの距離が遠くなっています。距離が遠いとホームポジションが崩れ、結果ミスタイプが増えがちです。

この問題に対して、多くの40%キーボードはLの隣のセミコロンキーやコロンキーを削ってEnterキーをホームポジションに近づけています(これらが残っているKeychron Q9は珍しい方です)。

右手小指の列を1列削るか2列削るかは大きな問題です。2列削ると右手小指の真下にEnterキーが来て指の負担が最小化しますが、記号キーの置き場所がメイン側になくなってしまい、特に日本語入力時の長音記号の取り扱いに著しい支障が出ます。

1列削りの拙作KeeBar S

2列削りの拙作PinKey。数字キー維持と外側に4キー設置しているので長音記号問題が救われてる

また、削られた記号キーはレイヤー側に逃がすことになりますが、右手小指キー位置の割り当てが渋滞するため、元の位置と全く関係ない場所に割り当てる必要性が出てきます。こうするともう無理矢理新しい位置を覚えるしかなく、冒頭に掲げたポリシーに合わなくなってしまいます。

結局私は、サブレイヤーを2枚に増やしそれぞれのレイヤーのPキーとセミコロンキー位置に割り当てることにしました。しかしどっちがどっちのレイヤーかがまだ慣れません。

STEP 4: 矢印キー、および最下段行のAlt、Win、Ctrlの削除

40%からさらに矢印キーといくつかの修飾キーを削れば、30%の世界が見えてきます。矢印キーをレイヤーに移動し、利用頻度の低い修飾キーを削減していきます。

試作中のSlab30。39キー

矢印キー

矢印キーをレイヤーに移すわけですが、カーソル移動ごときにレイヤーキーが必要なのはさすがに煩わしいのでは、と疑念がありました。しかし実際にやってみるとホームポジションを崩す必要がなくなり、非効率どころかより効率が良いことに気づきました。レイヤーキーを押すのが面倒ではとも思いましたが、矢印キーを押したい場合は大抵キーボードに両手があるので問題ありませんでした。

割り当てる位置にはいくつか候補があります。

  1. HJKL (viのキーバインド)
  2. WASD (ゲームでよく用いられる)
  3. IJKL (WASDを右手ホームポジションに移動。キーボード愛好家の中では実績が多い模様)

viを使い慣れている人は1がベストでしょう。しかし私はそうではありません。2は親しみがありますが、左手というのがいただけません。またホームポジションから1つズレているのも気になります。

ということで私は3つめのIJKLを選択しました。カーソルキーは右手、という意識と合いますし、ホームポジションを維持できるので位置取りもしやすく、思った以上に違和感なく利用を始められました。

IJKL最高

あまりに快適なので、今は60%キーボードにもIJKL割り当てを逆輸入して使っています。AutoHotKeyを使えば会社のPCでも同じ操作が実現できそうなので、今度試してみようと思っています。

また、すべてのレイヤーのIJKLに割り当てることが重要です。一部のレイヤーのみにするとテキスト編集中の運指が複雑になってしまって非効率でした。今どのレイヤーにいるかを考えずとも、とにかくIJKLでカーソル移動できる、という状態にできると安心です。

Winキー、Altキー

AltとWinキーは、ほとんど使っていない右Shiftの位置に移動しました。誤爆時のダメージを最小化するため、メインをAlt、レイヤーをWinとしています。

しかしずっと左手Altに慣れていたせいで、右側にAltがあるのは違和感が拭えません。特にAlt + EnterやAlt + Tabの操作は体に染みついているし、これを右Altに矯正するのは冒頭に掲げたポリシーを逸脱します。

Slab30にはちょうど左Altキーの位置にレイヤーキーがありますので、レイヤー側でAlt + Enterを定義することで、レイヤーキーをAltを押しているかのように扱えないかと考えました。これが結構うまくいってお気に入りです。

Alt + Enterに近いキー配置

ただ、単発でいいAlt + Enterはともかく、Altを押したままTabだけを何度も押すという操作することの多いAlt + Tabはこの方法だとうまくいかないのですよね。ここはもう少し探求が必要そうです。

左下のCtrlキー

CapsLockの位置にCtrlキーを割り当てることで削減できます。が、自分は左下Ctrlが完全に体に染みついており、かつ会社のPCではCapsとCtrlの入れ替えが難しいということもあり悩み中です。ただ、CapsLockの位置のキーは今まで完全に役割がなく勿体なかったので、Ctrlとして使えるようにしばらく訓練してみようと思っています。

数字キー

40%で結局慣れなかった数字キーの配置ですが、6以降を左手側Aキーに割り当てるように変えたところ、違和感が幾分マシになりました。右手親指をレイヤーキーとして、数字入力専用のレイヤーを設定しています。

右手親指キーを押した状態では、左手は数字入力専用モードになる感じ

また、数字キーの記号が打ちにくい問題については、US ANSI Shifted Symbolsと呼ばれるShiftキーなしで直接記号を割り当てられる機能でさらに別レイヤーに割り当てます。こうすることでレイヤーキー+数字キーだけで対応する記号を打つことができます。

左手親指キーを押した状態では、記号入力専用モードになる感じ

さらに次のステップへ

私はまだ未到達ですが、Mod-Tap機能を駆使すればまだいくつかの修飾キーを削減できる余地があります。例えばQAZと呼ばれる配列ではAの長押しにCtrl、Zの長押しにShiftを割り当てることで、左手のTab、Ctrl、Shiftを削減しています。

制御コードの入力で知られるように、レイヤー+HにBackspaceを、レイヤー+MにEnterを割り当ててそれに慣れるようにすれば、右手の修飾キーをすべて落とせるかもしれません。

33キー。理論値か?

キー削減の道はまだまだ続きそうです。

*1:押したままという操作以外にもレイヤー切り替えする方法は色々あるが、ここでは割愛