ぼくのかんがえたさいきょうのキーマップ への挑戦

せっかく自作キーボードを使い始めてキーレイアウトが今までと変わったんだし、キーマップも変えて色々試してみよう、と思い 挑戦中。

以前までの使い方

今までの自分はMBP持ち歩いているとき以外はキーボードはHHKB(Professional? 英語配列のもの)を外付けして使用してきた。 使い方の特徴としては、

  • CtrlキーがAの左、Emacs派だったので当然多用している
    • 以前はKarabinerで 今はHammerspoonを使用して、遠い位置にあるキーをカスタマイズ
      • Ctrl + JReturn
      • Ctrl + HDelete
      • Ctrl + [Escape
      • など
  • 日本語入力にはAquaSKKを使用、 ; キーによる Sticky-Shiftを利用 (やはり現在はHammerspoonで)
  • 左手親指が キー、右手親指が Space キーを担当

という感じ。 十分慣れていたしそれほど不便を感じることは無かったけど、やはり数字キーとかが遠くて打ち間違えることが多かった、と思う。

40%キーボードでの挑戦

HelixPico を使い始めて、初めて 「数字キーの無いキーボード」という世界を経験。 慣れないとやはり大変だったけど、無くてもどうにかなる、というのを実感した。

むしろホームポジションからほぼ移動せずに何でも出来ればそれはラクだし最高なのでは?!

ということで、せっかくだから少ないキーで上手く使いこなしていけるようキーマップを考えて練習してみることにした。

やることとしては

  • 人差し指〜小指 の4本は 上下左右1個分までしか移動しない
    • 3行×6列の範囲
  • 親指は基本的に2キー(以上)使えるのでコンビネーションでカバーする
  • できるだけ疲労しないよう 指への負担を分散させる

ということ。 最低で20キーずつで 基本的な入力を出来るようにする。 片手4行6列(+1)のHelixPicoはちょうど良くて、これで問題なく使えればどんなキーボードでもだいたい大丈夫なはず。

キーマップ

設定したのは以下のような感じ。

  /* Qwerty
   * ,-----------------------------------------.             ,-----------------------------------------.
   * | Tab  |   Q  |   W  |   E  |   R  |   T  |             |   Y  |   U  |   I  |   O  |   P  |  \   |
   * |------+------+------+------+------+------|             |------+------+------+------+------+------|
   * | Ctrl |   A  |   S  |   D  |   F  |   G  |             |   H  |   J  |   K  |   L  |   ;  |  '   |
   * |------+------+------+------+------+------|             |------+------+------+------+------+------|
   * | Shift|   Z  |   X  |   C  |   V  |   B  |             |   N  |   M  |   ,  |   .  |   /  |Enter |
   * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
   * |Adjust| Esc  | Alt  |Lower | GUI  |Space |EISU  |KANA  |Shift |Raise | Left | Down |  Up  |Right |
   * `-------------------------------------------------------------------------------------------------'
   */
[_QWERTY] = LAYOUT( \
      KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                      KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS, \
      KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                      KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
      KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                      KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
      ADJUST,  KC_ESC,  KC_LALT, LOWER,   KC_LGUI, KC_SPC,  EISU,    KANA,    KC_RSFT, RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
      ),

/* Raise
   * ,-----------------------------------------.             ,-----------------------------------------.
   * | Esc  |   !  |   @  |   #  |   $  |   %  |             |   ^  |   &  |   *  |   (  |   )  | Del  |
   * |------+------+------+------+------+------|             |------+------+------+------+------+------|
   * |      |   _  |   +  |   {  |   }  |   ~  |             |   `  |   -  |   =  |   [  |   ]  |      |
   * |------+------+------+------+------+------|             |------+------+------+------+------+------|
   * |      |   1  |   2  |   3  |   4  |   5  |             |   6  |   7  |   8  |   9  |   0  |      |
   * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
   * |      |      |      |      |      |      |      |      |      |      | Home |PageDn|PageUp| End  |
   * `-------------------------------------------------------------------------------------------------'
   */
  [_RAISE] = LAYOUT( \
      KC_ESC,  KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                   KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
      _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TILD,                   KC_GRV,  KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, _______, \
      _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                      KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______, \
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END  \
      ),
  • 通常のQWERTY と もう一層のレイヤー を用意し 2層の切り替えで入力を行う
  • 親指は
    • 左手は GUI (⌘)Space
    • 右手は Raise (レイヤー=切り替え) と Shift

という感じ。

Modifierキーたち

Ctrl, は従来通り 左手の小指と親指で担う。ここを変えるのは負担が大きすぎるので。 ただし Shift キーは 従来左手小指で使っていのを右手親指に移動している。

右手の親指でレイヤー切り替えを1個だけ使うことにする。 QMK Firmwareの設定では複数のレイヤーを作って複雑に切り替えることが出来るようだけど、そこまでは必要ないはず、ということで1個だけのレイヤーを用意して使うことにした。

Raise レイヤー

いわゆる zxcvb, nm,./ の列、ホームポジションの1段下の部分を数字キーとして利用する。 遠くない上に横並びになっていて分かりやすく打ち間違える確率が減る。

!@#$%, ^&*()などの、通常 Shift + 数字キーを使って入力する記号類は 数字とは逆の ホームポジションの1段上の位置に並べる。 例えば * なんかは 従来だったら Shift + 8 と押していたところを Raise + I で打つようになる。

-, =, [, ], ` などの 通常のキーボードで微妙に遠い位置にあるキーを 右手のホームポジションに、それらと Shift で組み合わせるキーを 左手のホームポジションの位置に配置した。 RaiseShift を横並びに配置しているので、基本的に Raise + Shift + 何か というキーの組み合わせは存在せず 通常 Shift + 何か で打っていたキーはすべて Raise + 何か で代用できるようになっている。

Space を 左手親指に、 Shift を右手親指に

今までは右手親指は space しか打っていなくてだいぶサボっていたのに対し、 前述の通りレイヤー切り替えを割り当てたことで忙しくなってきた。 左手の親指は でしか使っておらずヒマなはずなので こっちに Space を任せるように変更した。

ターミナルでコマンドを打つときの ls -l みたいに Space 直後に - があるときに 右手に Space があると Raise + J で打つ - と相性があまりに悪い、というのもある。

+ 何か で動かすショートカットなどがあったときに Raise キーが と並んでいると親指が足りなくなってしまうが、 Raise が右手親指であれば多少複雑なショートカットも問題なく押せる。たぶん。

色々考えながら試していたら 左手小指で CtrlShift も押しているのが疲れるよな… と感じ、右手親指は Raise に使っているものの Space からは解放されてまだもう一つキー押せるはず、ということで Shift をここで行うようにしてみた。 多少右手親指が忙しくなるが、左手小指を酷使するよりは良さそう。 これによって 今までAquaSKK; の Sticky-Shiftを利用していたのが 別に使わなくても良さそうだな、と思い 設定をオフってみることにした。

矯正

自分がずっと馴染んでいた 右手親指での Space と 左手小指での Shift をそれぞれ逆の手に移動したのはすごい戸惑いがあって まだまだ慣れない。 1週間くらい続けてようやく いちいち「えぇと、これを打ちたいときはこっちを押してからこっち…」と脳内で考えなくても多少自然に指が動くようになってきたかな、という感じ。

考えてみると ; のSticky-ShiftでSKK入力を始めた頃だって しばらくは全然上手く打てていなかったはずなので 慣れるまである程度時間がかかるのは当然なはず。

現時点では何を書くのにしても今までの2〜3倍の時間がかかってしまう感じだけど、ちゃんと慣れてくればほぼ遜色なく早く打てるようになるのでは…?とは思っている。 入力が遅いのは 単純にキーマップの配置が良くないのか 慣れていないからなのか を切り分けるためにも、まずはとにかく慣れていくしかない。

一つ問題があると感じているのは () => {} みたいなのを入力するときの => の記号。 これは Raise + K= を入力した直後に 今度は Shift + . を押す必要があるので 右手親指がとても忙しくなる。つらい。 とはいえこの => って従来のキーボードで入力するときだって 左手小指で Shift 押したまま 右手の小指?薬指? を頑張って伸ばして = を入力して そっから戻って右下の . を押しにいって、と移動が多く大変だったはずなので 多少押しづらい組み合わせのものがあるのは当然なのかな、とも思っている。

今後

とにかく練習して馴染んでみないとまだ分からない部分もあるので、この配置に慣れるよう頑張って文章やコードをたくさん書く。もちろんこの記事も頑張って上述のキーマップでHelixPicoを使って書いている。

ある程度慣れても打ちづらい、などまた課題が見えてきたら配置を考え直せば良さそう。

左手と比較して右手の小指はまだ遊んでいるし 端で余っているキーも少しあるので そこらへんまた何か割り当てを考えた方が良いかもしれない。