kbigwheelのプログラミング・ソフトウェア技術系ブログ

プログラミング・ソフトウェア技術系のことを書きます

Universal Keymapシリーズ① 多彩な自作キーボードを使う上でのキーマップの問題

最近自作キーボードにハマっておりいろんなキーボードを作っています。 ただ、キーボードの数が増えるにつれてある問題が浮上してきました。そう、キーマップです。

目次

多数のキーボードを使うときのキーマップの問題

数年前にErgodox Ezを買ったときも結構時間をかけて決めていました( [Ergodox Ez] Apple JIS キーボードに寄せたキーマップを晒す - Qiita)。 ただErgodox Ezは80%キーボードであるため既存のキーボードとの差分は比較的少なくそれほどキー配置にこまることはありませんでした。そのとき私が持っていた非標準なキーボードはErgodoxだけであったこともあります。

しかし、今僕が持っているキーボードは以下です。

  • Ergo系80%
    • Ergodox Ez
  • Ergo系40%
    • Claw44
    • Caravele BLE
  • 一体型40%
    • Bat43
    • treadstone48
  • 一体型30%
    • nomu30

nomu30, Ergodox Ezを除いては概ね40%キーボードではあるものの、親指周辺のキー数、配置などは微妙に違います。また各キーボードのデフォルトのキーマップもLayer0はQWERTY・レイヤー数も3枚(いわゆるRaiseとLower)という点こそ共通であるものの、Layer1, 2は各々かなり異なります。 数字をQWERTY行に横へ並べたもの、QWERTASDFGへ1~0を割り当てたもの、矢印キーをvim風にHJKLへ割り当てたもの、JIKMへ割り当てたものなどなど・・・。これらのキーボードそれぞれのデフォルトキーマップを覚えるのはちょっと現実的ではないでしょう。

そこで、異なる物理キー配置のキーボード間でも一貫したキーマップを作る必要が出てくるわけです。

一貫したキーマップに求められるもの

キーマップが一貫するようにする

直近で持っている自作キーボードは前述の通り分割型40%ないし分割型40%に似たキーボードが多いです。 これに加えてErgoDox Ezという80%キーボードがあります。 これらをほぼ同時期に使うなら、キーマップがある程度揃っていることはほぼ必須です。おそらく一番利用する分割型40%キーボード(親指キーが3つずつ型)をベースにそれ以上のキーがあるものは1キーへ2つ以上のキーを割り当てているものを改めて1つの物理キーへ割り当てたり、数字キーの列があるものは単に追加の数字キーとして扱う、などのようにすれば良いと思います。逆に30%キーボードは親指へ割り当てているキーをZの行へ割り当てるなどをして極力基本とUpper / Lowerのレイヤーは揃えるようにします。

なるべく40%分割型の標準形に合わせる

今回決めるキーマップを長く使えるものにしたいと思っています。 長く使えるためにはなるべく突飛な配置ではなく、既存のキーマップの最大公約数的なものにしておいたほうがよいということが言えます。なるべく標準的なキーマップにしておけば新しいアイデアなどが出てきたときにその新しいアイデアだけを取り込みやすいです。突飛な配置にしていると、まずそれとそのアイデアの部分を自分一人で折り合わせなければならず、結果的にキーマップがobsoletedになるということが容易に想像できます。

また可能であれば他の人にも使ってもらえれば最高ですし、他人と共有・あわよくばpull requestがもらえるようになればメンテナンスを自分一人でやる必要がなくなります。1人ではなく複数人でメンテナンスすることによるクオリティの上昇は説明するまでもありません。

キーマップはUS配列をベースにする

JIS配列とUS配列、以前からUS配列には興味がありましたが移行コストやあえてUS配列のキーボードを買う動機がなかったためJISで満足していました。 しかし、自作キーボードの場合基本的にASCIIキーボードが多いこと、記号キーなどの点でASCII配列に利点があること、キーキャップの印字がUSキーボードのものがほとんどであることなど総合的に勘案してこの期にUS配列へ移行することにしました。 上記の標準形に合わせる話とも少し関係しています。

基本はQWERTY

DVORAKやOEAなどの選択肢もありますが、今の所それほど必要性を感じていないこともあり主たるキーの配列は一般的なQWERTYで行きます。

個人的な追加要件

一般的なMAC JIS配列、109配列キーボードとの併用が前提

業務上、MacBookのキーボードを使ったりとっさにその辺の109キーボードを使うことが一定あります。今後もそういった機会はずっとあるでしょう。なので新しいキーマップはそれらのキーボードと併用したときに混乱しないものでなければなりません。例えば自作キーボードの方のみにあるキー、具体的には親指周辺のキーに新しいキーを割り当てることは何ら問題ありませんが109キーボードでいう左Winキーや左Alt, 左Ctrlなどに矢印キーなどを割り当てるととても混乱するでしょう。

OS側でのキー設定は極力いじらないようにする

具体的には「カタカナ/ひらがな」ボタンとEscapeをスワップしたり、CtrlキーとCapsLockキーをSwapしたりなどです。 一般的なキーボードで使い勝手を良くするために実行するのですが、そういった設定をしているOSへファームウェア的にCapsLockとCtrlを入れ替えている自作キーボードを接続するとまたAの左がCapsLockへ戻ってしまったりします。 こういった設定はOSレベルでしかできず接続している特定のキーボードでのみ入れ替えるといったことはできないこと、今後は自作のキーボードをメインで使うためこういった設定が必要になることは多くないことなどからこういったキー設定は基本的にしないこととします。なので、もしキー配置を変える場合はキーマップ側で対応することになります。

備考: Windowsでは以下で説明されているように 変換 無変換IMEのON / OFFを設定する前提とします

101キーのすべてのキーを網羅する

様々なキーマップを見ていると以外なことに PageUpPageDown を配置していないキーがかなり見つかります。 特に InsertPrint Screen Scroll Lock Pause はめったに配置されていません。 これらのキーは確かに使用頻度が低いですがまれに必要になることがありその際自作のキーボードでは押せないとなると著しく汎用性が落ちることになります。 そこで、それらのキーについても1箇所以上へ必ず割り当てられていることが必要です。

日本語入力に関わるキーを配置する余地を残す

qmk_firmwareで配布されているキーマップのほとんどは 半角/全角 変換 無変換 かな 英数 などのキーが配置されていません。これらがない場合日本語入力のためにAlt - `のように入力する必要が出てきます。これではとても不便です。 しかし、一方でこのキーボードはANSIベースを目指しており用途を日本人専用にもしたくありません。そこで、あくまでANSIキーボードベースでありつつ かな 英数 のような日本語入力・LANG1 / LANG2のような他の言語の言語辺関係キー入力もできるようにします。

具体的にはQMK Firmware で Raise/Lower と変換/無変換を同じキーに割り当てる - Okapies' Archiveを使ってレイヤー切り替えキーへそれらを割り当てる余地を残しておきます。 よってレイヤー切り替えキーは基本として M(...) を割り当て、言語系のキーを割り当てたいときのみ LT(...) を使います。

(want) MACとPCの両方で一貫して使用できるようにする

MAC用のキーボードとWindows用のキーボードでは特に左下のメタキーの位置が違ったりします。その辺りの挙動が一貫するようにしたいところ。

以上と、既存のmacbookや他人のキーボードをとっさに触る必要があるケースなども加味してキーマップを決める基準として以下を設定しました。

ネクストアクション

というわけで、まずは40%分割型キーボードのキーマップの最大公約数を求めてqmk firmwareのキーマップの海に潜ります。 幸い、分割型キーボードは親指部分のキー 2 ~ 4個、アルファベット部分36個前後に収束しつつあるので、それに該当するキーマップを調べていけば大多数の人間が合意できるキーマップが浮かび上がるんじゃないかと思います。

続く。