ErgoDoxならではの修飾キー配置を考える

この投稿は :calendar: [ErgoDox Advent Calendar 2016](http://qiita.com/advent-calendar/2016/ergodox) の 5日目の記事です。

----

今回は修飾キーの配置を考えてみたいと思います。

# 修飾キー

ってつまり、

- `Shift`
- `Ctrl`
- `Option(Alt)`
- `Cmd(Win)`
- `Fn`

などのことですが、いろいろ不可欠なものです。ではいったいErgoDoxの場合、それらをどこに配置したらいいのでしょうか。

## 実際に使えるキーの感覚

<img width="600" alt="unused_keys2.png" src="https://qiita-image-store.s3.amazonaws.com/0/117743/3a4fbeff-6f62-4096-ee5d-72267b351e11.png">

[My Ergodox EZ’s Custom Layout | implements Blog](https://implementsblog.com/2016/10/16/my-ergodox-ezs-custom-layout/)

こちらのブログで図解されてますが、ErgoDoxを運用していくと使いづらいキーというものがはっきりしてきます。特に文字配列を変更してホームポジション行を快適に利用できるようにしていく場合、ホームから遠いポジションや制御力に欠ける小指の運指を入れてしまうと台無しになってしまうのです。

そんなわけでピンク色の部分は使わないよという図なのですが、修飾キーが配置される左右端も使わないことになります。

ではどうするのでしょうか。

## 左右ホームポジションに割り当ててしまう

<img width="341" alt="modifier_keys3.png" src="https://qiita-image-store.s3.amazonaws.com/0/117743/298b8887-71a9-613b-e789-a2b520bbff76.png">

うーんなるほどー！と思ったのがこれです。

ErgoDoxだとfirmwareをいじってカスタムできるので、タップ押しとホールド押しで挙動を変えることも簡単です。

<img width="180" alt="default_highres.png" src="https://qiita-image-store.s3.amazonaws.com/0/117743/78155cfc-71b4-871f-7af7-716e805a6315.png">

[デフォルト配列](https://github.com/jackhumbert/qmk_firmware/tree/master/keyboards/ergodox/keymaps/default)でも`Z`をホールドで`Ctrl`にする設定が入っています。

```
KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
```

`CTL_T`や`ALL_T`など括ってるのがそうです。

一つのキーをタップ押しとホールド押しで使い分けるというのは「うーんキワモノっぽい、要らないな…」と思って最初すぐに消してしまっていました。しかし実際使ってみると、修飾キーというのは必ずホールドするのだから他のキーに被せてしまっても全然違和感なく利用できるのだと分かりました。

## 実際どうか？

ホームポジションでの修飾キー、これは良いなと思って設定してみたんですが…。

手をずらしたり小指を伸ばしたりせず、そのままの位置でホールドすれば修飾キーが使えるというのはとてもいい感触です。ただ普通の文字としてタイピングしていく場合、そこそこ速めに打つと押したキーをリリースする前に次のキーを入力する形になり、それだと同時押しとしてホールド判定にされてしまうようで上手く入力ができませんでした。

このへん後でちゃんと調べたいところですが、おそらくリリースされる前に他のキー入力があったら即座にホールド扱いにする処理っぽいので、そこに適切なウェイトを入れるとかすれば解決するのかもしれません。

# 親指で修飾キーを使う

修飾キーについて自分が以前から設定していたのは親指ポジションでした。ErgoDoxで左右端のキーを使わない場合、やはり使い出がある親指に修飾キーを割り当てて行くというのがスタンダードなのではないかと思います。

## 大きいキーでホールドする

親指で実用的なのは中央の大きなキー2つとホーム下段の2,3キー分あたりですが、特に大きなキーはポジション的にとても押しやすく、そして親指を載せてホールドするのに適しています。

<img width="500" alt="thumbs" src="https://qiita-image-store.s3.amazonaws.com/0/117743/043cd664-82d6-8aa0-a114-df779f9c803a.png">

自分の場合、親指のホームポジションとなる黄色部分に`Space`と`Enter`を割り当てていますが、これらのキーなら先程のような打鍵の絡みは発生しづらいのでホールドに別キーを割り当てても大丈夫です。

左側ホールドには`Cmd`(Windows用には`Ctrl`を割り当て)、右側ホールドにはレイヤー切り替えを設定しています。あとは隣に`Alt`と`Shift`で、これらを親指で押さえることによって残りの4指はホームポジションを保つことができます。

`Ctrl`はEmacserではないのであまり使っておらず、一応使えなくはないという位置です。`Esc`は単押しだしデフォ位置よりはマシということでここです。

## ホールド時レイヤーの活用

<img width="600" alt="nav" src="https://qiita-image-store.s3.amazonaws.com/0/117743/2939bc22-0d1f-2b87-6f1e-cc58a8f668d8.png">

右のEnterキーをホールドしたときにはこんなレイヤーに切り替えています。

主にナビゲーション用のレイヤーとして設定していて、とても多用しています。右手ホームポジションは凸型配置でカーソル移動、その周辺部にPgUp/Down, Home/Endも揃えています。普通のカーソルキーだとホームポジションから完全に手が離れてしまうので、そこのロスが無いのがとても気持ちいいです。Vimmerなら`HJKL`でいいのですが、凸型のほうがゲームにも使われるし直感的に動かしやすいと思います。

また、左手部分にも同様にホームポジションに凸型でマウス移動を割り当て、親指部分でマウスクリックもできるようにしてます。対称的な配置なのがオペレーション的になんとなくアガります。

ただカーソルと違ってマウス操作はキーボードではやはりつらいものがあり、基本的には実際のマウスを使ったほうが簡単なことが多いです。しかしキー操作だけでだいたい操作できるアプリケーションでもどうしてもマウス移動やクリックが必要になることも多く、そういうときに使うと指が完全にキーボードから離れないのでより満足度が高まります。

:innocent: **ErgoDoxから一時たりとも手を離したくないという人におすすめです。**:innocent: 

## 親指での問題

以上のようにErgoDoxでの親指は活用しがいがあります。ただ、複数修飾キーの組み合わせによってはちょっと厳しい場合もあります。左右で1キーずつならいいですが、前述の配置で`cmd + alt`を使う場合など、同じ側で複数だと親指1本では厳しいです。なので最初のホームポジション4指を使うやり方は理想的に思えたわけです。