日本語配列に慣れきったエンジニアが「使いやすさ」の条件を吟味しつつErgodox EZの配列を考えた

# 前提

* 職業はスマートフォンアプリエンジニア
* 個人所有のマシンも仕事のマシンもMacbook Pro（JIS配列）
* 右利き
* 普段遣いはIntelliJ系IDE
* 上下左右移動が `hjkl` でも問題ない派
* コードだけでなく日本語の文章もよく書く
* 普段遣いは[FilcoのMajestouch2(赤軸、JIS配列)](https://www.diatec.co.jp/products/det.php?prod_c=883)

Ergodox, Ergodox EZについては他の方々が詳しく解説してくださっているので、ここでは説明は割愛します。

# Ergodox EZを使い始めた理由

実は2,3年前に購入していて、購入したあとに使いこなせず、ずっと自宅の棚の中に眠らせていたのでした。

## 購入した当時に使いこなせずお蔵入りした理由

いくつかあるので手短に。

* いきなり凝った配列に挑戦してしまった
    * 親指シフトやDvorak配列
* QWERTYに戻したものの、いきなり仕事で実戦投入しようとした
    * キーマップを吟味する時間がなかった
* 家に持ち帰ったものの、家では外付けキーボードが活躍する機会が少なかった
    * コードが多いので配置が面倒

## 今になって本格的に使い始めた理由

* コロナ禍によるWFHのため、Macbookを置く台を自宅用に買った
    * 首や背中を楽にしようとするとモニターを目線の高さに持ち上げる必要があり、そうすると腕を上げっぱなしにすることになってしまう
    * 腕を楽な位置にするためには外付けキーボードが必須
* 最近同僚になった人もErgodox EZを活用していた
    * いいなーって思った


# 使うとわかること

## 左右両方に修飾キーが欲しくなる

ここでは、Cmd(⌘), opt(⌥), Ctrl(^), Shift(⇧)の四種類のキーを指します。
通常の（Macbookの）JIS配列キーボードではCtrlが左にあることもあり、私はほぼ常に左側の修飾キーを使用していました。

が、Ergodoxは左右分離タイプのキーボードです。
一体型のキーボードでは「（右手でマウスを使いながら）左手のみで、Cmdを押しながらKを押す」ということが可能ですが、左右分離タイプではそうも行きません。
片手がマウスやトラックパッドを使用するために離れていても、キーコンビネーションを使用したいのです。
（幸い、トラックパッドを左右のキーボードの間に配置すれば、左手でトラックパッドを操作しながら右手でCmd-Kを押せます）

そうでなくとも、単純に「右手でCmdを押しながら、左手でCを押下する」などできると、 **両手に負担を分担することができ** 、扱いやすくなります。

## 意外と矢印キーはよく使う（しかも修飾キーとの組み合わせで）

エンジニアなら全部キーコンビネーションでどうにかせいや！　というお叱りがあるかもしれませんが、私はキャレットの移動には矢印キーをとても良く使います。

特にCmdと組み合わせた `行頭/行末に移動` 、optionと組み合わせた `単語単位で移動` 、そしてそこにShiftキーを組み合わせた選択をよく使います。

Ergodoxにはレイヤーという概念があり、レイヤーを切り替えることでキースイッチに割り当てているキーコードを変えることができます。
レイヤーで矢印キーを配置することも考えたのですが、レイヤーを切り替えながら修飾キーも扱って、というのは慣れるまで時間がかかりそうだったため避けることにしました。

## かな/英数キーはすごく便利

MacのJIS配列に慣れきった人間なので、IMEのモード切替はかな/英数キーに頼っています。
Cmd-Space（私の環境ではCtrl-Spaceはコマンドランチャー（Alfred）ですでに使用しているため、一応Cmd-SpaceをIME切り替えにしてある）で切り替える手もありますが、キーを押せば現在のモードに依存することなく目的のモードに切り替わるのはやはり便利なので、 **かな/英数キーはすぐに使える位置にほしい** ところです。

## キーの押しっぱなしはきつい

全然鍛えていない人間なので、指の筋肉の筋持久力は殆どありません。

かな英数キーの項でも書いたとおり、現在のモードに依存してアクションの結果が異なるのは考えることが増えて嫌だと考えているので、基本的にレイヤー切り替えは「キーを押しっぱなしにしている間のみ」となります。
それゆえ、後述のマウスキーを使用する際にはレイヤー切り替えのキーを押しっぱなしにする必要がありますが、私の指はそれができるほど筋持久力がありません。すぐに疲れます。根性なしめ！

しかし例外があります。

**親指** です。

親指は比較的重い指なので、自重でキースイッチを押しっぱなしにすることもあまり苦になりません。

## 親指は器用ではない

前述の通り、親指には力がありますが、大きい上に関節が一つしかなく短いので、器用な動き方はできません。
Ergodoxの親指周りには、大きなキー2つの他に小さなキーが4つありますが、小さなキーは最下段の一つしか親指で押すことはできません。

## 手を浮かせるのは面倒

前述のErgodoxの親指周りの親指では押せないキーですが、手を浮かせることで押すことができます。
が、実際に押すことは殆どありません。

なぜかといえば、一時的に手を浮かせることはあっても、常に手を浮かせていることはできないからです（疲れるから）。

ですので、手を浮かせないとアクセスが難しいキースイッチには常用しないキーを配置することになると思います。

また、キーボードから手を浮かすのがめんどうなので、できれば **キーボードから手を離したくない** のです。
マウスやトラックパッドも面倒。
というわけで、マウスキーも頑張って使ってみることにしたいところ。


# 現在のキーマップ

上記のようなことを考えながら試行錯誤中ですが、げんざいのところは以下のキーマップになっています。
（配置していても使用していないキーもある）

## ベーシックレイヤー

初期のレイヤーです。
基本的に常にこのレイヤーのキーを叩くことにしています。

```
| /* Keymap 0: Basic layer |
|:--|
|  * |
|  * ,--------------------------------------------------.           ,--------------------------------------------------. |
|  * |   ^    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    | |
|  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| |
|  * | Tab    |   Q  |   W  |   E  |   R  |   T  | ~L1  |           | ~L1  |   Y  |   U  |   I  |   O  |   P  |   @    | |
|  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| |
|  * | Ctrl   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |' / Cmd | |
|  * |--------+------+------+------+------+------| 英数 |           | かな |------+------+------+------+------+--------| |
|  * | LShift |   Z  |   X  |   C  |   V  |   B  | /~L2 |           | /~L2 |   N  |   M  |   ,  |   .  |//Ctrl|_/RShift| |
|  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' |
|  *   |  Esc |  '"  |  Alt | Left |  Up  |                                       | Down | Right|   [  |   ]  |   ¥  | |
|  *   `----------------------------------'                                       `----------------------------------' |
|  *                                        ,-------------.       ,-------------. |
|  *                                        | Cmd  | Alt  |       | Alt  | Cmd/Esc| |
|  *                                 ,------|------|------|       |------+--------+------. |
|  *                                 |      |      |SwchAp|       | PgUp |        |      | |
|  *                                 | Space|  Tab |------|       |------| Back   |Enter | |
|  *                                 |      |      | 英数 |       | かな |   space |      | |
|  *                                 `--------------------'       `----------------------' |
|  */ |
```
https://github.com/kikuchy/qmk_firmware/blob/fa73456e3112583ec5c67eadfebd6ad987f1067a/keyboards/ergodox_ez/keymaps/kikuchy_osx/keymap.c#L11-L31

こだわりポイントは以下

* なるべくJIS配列の右端にある記号キーを、オリジナルの配列に合わせて配置
    * 左右両端とも、修飾キー（にもなるような）配置
    * 左Shiftが純粋にShiftなのは、IntelliJでShift二回押しをする機会があるから
* あぶれた記号キーもなるべくわかりやすく配置
    * なるべく右側に配置
    * カッコは並べておく
    * `^`よりも `-` の方がよく使うので、オリジナルJIS配列に近い位置に配置
* オリジナルJIS配列でも親指で操作していたので、親指でかな/英数キーを押せるように

## シンボルレイヤー

主にFunctionキーを使うためのレイヤー。
今のところは、Functionキーを押すのとDelキーを押すためにしか使っていないです。
活用が今後の課題。

```
| /* Keymap 1: Symbol Layer |
|:--|
|  * |
|  * ,--------------------------------------------------.           ,--------------------------------------------------. |
|  * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  | |
|  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| |
|  * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  | |
|  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| |
|  * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        | |
|  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| |
|  * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |  Up  |   3  |   \  |        | |
|  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' |
|  *   |      |      |      |      |      |                                       | Left | Down | Right|   =  |      | |
|  *   `----------------------------------'                                       `----------------------------------' |
|  *                                        ,-------------.       ,-------------. |
|  *                                        |      |      |       |      |      | |
|  *                                 ,------|------|------|       |------+------+------. |
|  *                                 |      |      |      |       |      |      |      | |
|  *                                 |      |      |------|       |------|  Del |      | |
|  *                                 |      |      |      |       |      |      |      | |
|  *                                 `--------------------'       `--------------------' |
|  */
```
https://github.com/kikuchy/qmk_firmware/blob/fa73456e3112583ec5c67eadfebd6ad987f1067a/keyboards/ergodox_ez/keymaps/kikuchy_osx/keymap.c#L54-L74

## メディア＆マウスレイヤー

TouchBar搭載前のMacのキーボードであればfnキーとのコンビネーションで使うようなキーを配置しています。
また、マウスもここ。

```
| /* Keymap 2: Media and mouse keys |
|:--|
|  * |
|  * ,--------------------------------------------------.           ,--------------------------------------------------. |
|  * | RESET  |      |      |      |      |      |      |           | Prev | Play | Next | Mute |VolDn |VolUp | Power  | |
|  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| |
|  * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        | |
|  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| |
|  * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|MsLeft|MsDown| MsUp |MsRght|      |  Play  | |
|  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| |
|  * |        |      |      |      |      |      |      |           |      |MsWLft|MsWDwn| MsWUp|MsWRgt|      |        | |
|  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' |
|  *   |      |      |      | Lclk | Rclk |                                       |      |      |      |      |      | |
|  *   `----------------------------------'                                       `----------------------------------' |
|  *                                        ,-------------.       ,-------------. |
|  *                                        |      |      |       |      |      | |
|  *                                 ,------|------|------|       |------+------+------. |
|  *                                 |      |      |      |       |      |      |      | |
|  *                                 |      |      |------|       |------| Lclk | Rclk | |
|  *                                 |      |      |      |       |      |      |      | |
|  *                                 `--------------------'       `--------------------' |
|  */
```
https://github.com/kikuchy/qmk_firmware/blob/fa73456e3112583ec5c67eadfebd6ad987f1067a/keyboards/ergodox_ez/keymaps/kikuchy_osx/keymap.c#L96-L116

こだわりポイント

* 昔のMacbookのEjectキー（一番右上）で画面ロックをかけていたので、ここにPowerキーを配置
* マウスは右手で操作、左手はレイヤーを維持するために使用
* 実はマウス速度なんかもデフォルトから変更しています
    * [ソースコード](https://github.com/kikuchy/qmk_firmware/blob/fa73456e3112583ec5c67eadfebd6ad987f1067a/keyboards/ergodox_ez/keymaps/kikuchy_osx/config.h)
    * こちらの記事を参考にさせていただきました [Ergodoxのマウススピード](https://qiita.com/kmtoki/items/b3d039654995db1f91e8)
* いちいちファームウェアの書き込みのためにピンでリセットスイッチを押し込まなくて良いようにResetスイッチを配置


# おわりに

これで普段遣いのキーボードに近い使い勝手を確保することができました！
このキーマップにしてからまだ2週間程度なので、まだ多少慣れないこともありますが…
（EnterとBackspaceを押し間違えるなど）

また、以下の課題も見つかっているので、こちらも解決していきたいところ。

* 以下のキーを殆ど使わない
    * 左手親指のTab
    * 左手最下段の外側3つ
    * 親指周りの小さなキー（最下段を除く）
    * 最も内側の列、最上段のキー
* シンボルレイヤーも活用してない

まだまだカスタマイズして、何が使いやすい条件なのか、どうしたら使いやすいのかを明らかにしつつ、公表していけたらいいなと思います。