分離型エルゴノミクスキーボードを買ったのでキーマッピング(論理配列)を自作した

# 前置き
Moonlanderというキーボードを購入しました。
![DSC_0067.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490812/e7c1137b-d520-e1a6-d321-c84634988bfb.jpeg)
↑コレ

いわゆる分離型でエルゴノミクスなキーボードで、メカニカルスイッチを搭載しています。分離していることで手を左右に開いてタイピングでき、列ごとに縦の位置がズレているため指の長さの違いをうまく吸収してくれます。非常に楽にタイピングできる良いキーボードです。

## qwerty配列は嫌だ
ところで皆さん論理配列というものをご存じでしょうか。あるいはqwerty配列やDovrak配列という名前は聞いたことがあるでしょうか。論理配列とは押したキーにどの文字を対応させるかを定義したものです。
一般的なキーボードではUSやJISといった国ごとの差異はあれど、ほぼ100%以下のような配列(qwerty)が採用されています。
![jis.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490812/ce8705c4-cfa9-bad6-e396-25246d2256da.png)
この並び、あまり出来が良くないと思うんです。
タイピングをしていると面倒な順番でキーを押さなければいけない場面に多々遭遇します。例えば、

-  エンターキーが遠い
日本語は変換を多用するのでエンターは押しやすい位置に欲しいです。
- 母音と子音が同じ列にある
「む(M-U)」とか「ざ(Z-A)」などが打ちにくいです。同じ指を連続で、しかも異なるキーを押すのは嫌ですよね。
- よく使うキーがホームポジションに無い
文字ごとに使用頻度が異なるので、よく使うキーとそうでないキーがあります。ならばよく使うキーはホームポジションにあるほうが楽に決まっています。

## 論理配列を自分で作ったらすごい世界だった

せっかく良いキーボードを買ったので、配列も自分好みの並びに変えて最高にストレスフリーなタイピングを実現しよう、というのが最初の動機です。そして試行錯誤の末配列が完成し、おおよぞの目標は達成できました(満足したというか力尽きたというべきかも)。まだ完成ではありませんが、せっかく考えた配列なのでここで公開します。
また、配列を考えるにあたって様々な方の考え方に触れ、考慮すべきことが山ほどある非常に奥が深い世界なのだと分かり、熱中してしまいました。この熱が冷めないうちに配配列を考える面白さも記事に表現できたらいいなと思います。

# 本編
作った配列はこちら。

![オリジナル配列.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490812/665ebcf8-3dec-ba13-afeb-0f56bc3c0ec1.jpeg)
この画像はMooonlanderのキーマッピングの設定画面をキャプチャしたものです。このようにブラウザから簡単に変更・保存ができます。
## 既存の配列はどうか？
買った当初は手っ取り早く世に公開されている配列をパクッて使うつもりでした。(一応)プログラミングもするためローマ字入力で有名なものを探しました。配列は無数に存在しますが有力だったのは以下の3つ。
1. Astarte
英語・日本語両方に最適化されており、Linuxでよく使う`ls` などのコマンドまで考慮されている配列です。万能選手でなおかつ私の用途によく合います。
![Astarte.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490812/4ea92a5c-9dcb-c549-8d4f-9ae5ca66278a.png)

1. Eucalyn
ローマ字入力に特化した配列です。左下の`Z` `X` `C` `V`はショートカットでよく使うためqwertyと同じ位置です。さらに`H` `J` `K` `L`はカーソルキーとして使用する場合があるので上下左右の位置を合わせています。qwertyからの移行を考慮しつつローマ字入力も快適な配列です。
![Eucalyn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490812/ee7fc560-7383-8545-9523-d22d39787401.png)
1. MTGAP
プログラムによって生成された配列です。英語用ですが母音をすべて片方の手で分担するというコンセプト(後で説明します)は日本語にも通用するため候補になりました。
![MTGAP-Thumbshift.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490812/45b88a7f-02c6-7c90-02aa-d551475968a8.jpeg)

## 採用に至らなかった理由
### 交互打鍵じゃなくていい
上に挙げた3つの候補はある共通のコンセプトに従っています。それが「交互打鍵」です。人間の発音は子音と母音の組み合わせで表現されるので、母音を片方の手に集めれば自然と右手と左手を交互に使用することになります。そして、片方の手の指を連続で使用するより左右交互に使用したほうが早く楽に打てるという理屈です。
さらに日本語入力においては子音が右手、母音が左手にあるという覚え方で初心者が配列を覚える助けになりそうです(ならば入力の順番的に母音は右側だろうと思いますが)。さらにさらに、世界中のあらゆる言語は話し言葉から始まっている(らしい)ため、発音に着目したこのコンセプトは言語によらず通用する可能性がある、、、気がします。
かなり良いコンセプトで、キー配列の世界標準を新たに一つ決めるとしたら交互打鍵は外せない要件じゃないかと思います。
しかしこのコンセプト、よくよく考えてみると私には必要ありません。交互打鍵の良さはタイピングを覚える際の敷居の低さであると思うからです。私は寿司打の高級をギリギリクリアできる程度ですが交互打鍵にこだわる必要は特に感じませんでした。

### 親指は使わないの？
3つの候補ではローマ字の打鍵に親指を使用しません。しかし我がキーボードMoonlanderは親指で3つのキーを押すことができます。これを使わない手はないでしょう。
親指にアルファベットを割り当てることで、ローマ字入力においてわずかに残っていた同じ指による連続打鍵を0にできます。そのうえ人差し指で2列担当する必要がなくなります。私としては人差し指はあまり酷使したくないのでこれは大きなメリットです。

### 自分で作りたい！
結局は作りたくなっただけです。
上の2つは論理配列を作るための言い訳に過ぎません。

## 自作論理配列の作成
ここで作成した配列を再掲します。アルファベットとスペース、エンターがこだわったキーです。ほかのキーは優先度が低いため割と適当です。
![オリジナル配列_ 2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490812/5f4bd8db-e58f-1eea-4202-4e93da036dec.jpeg)

主なポイント
- ローマ字入力が最優先
- 英語も一応考慮してある
プログラミングでは英単語を使うので一応考慮しました。
- 速さより快適さを重視
  - ホームポジションから指の曲げ伸ばしだけですべてのキーに届きます。
  - ローマ字入力において同じ指の連続打鍵は基本的にありません。
撥音とか母音の連続など一部の入力は諦めました。
  - 中指を曲げると薬指が伸ばしにくいので中指下段はローマ字入力では使用しません。
  - 「nn(ん)」や「ai」「ou」「ei」 の専用キーはありません(場所があれば欲しかった)。
- 人差し指は横に動かしたくない
私の場合手首も動いちゃうのでタイピングが安定しないからです。
- ショートカットは考慮しない(`Z` `X` `C` `V`なども配置換えの対象)
- 母音は内側に集める
  - 外側→内側の順のほうが打ちやすいためです。
  - `E` の位置ミスったかも。。。でも結構練習しちゃったから変えたくない。。。
→変えるなら`W`と入れ替えですね。

## 移行した結果
少なくともqwertyよりはかなり楽にタイピング可能です。タイピングしていて嫌な打鍵が来ないのが気持ちいいです。Moonlanderの物理的な形状の良さもあり、本当に手の負担が少ないです。
速度はまだqwertyには及びませんが寿司打のお勧めコースは安定してクリアできるようになりました。この記事もMoonlanderとオリジナルの配列で書いていますがそんなにストレスはありません。
仕事では会社のノートパソコンしか使えないためqwertyのままです。オリジナルの配列との両立は特に問題なくできています。二刀流です。キーの並びが物理的に違うのが良いのかもしれません。

**追記**
寿司打の高級を安定してクリアできるようになりました。4.5打鍵/秒くらいは出せており、qwertyの速度とほぼ並びました。
というわけで同程度の入力速度で今作の配列とqwertyを比較できるようになったわけですが、やはり明確に今作の配列は楽です。しかも、実はまだまだキーの位置を間違えたり思い出すのに一瞬もたつくこともあるので、タイピング速度はまだ伸びる余地があります。
一方のqwertyでは指の動きに限界が来ており、今以上の速度を求めるには手を物理的に鍛えるしかなさそうです。

**さらに追記**
このキーボードで文庫本にして5冊分くらいの分量の小説を執筆しましたが、かなり快適でした。長時間、長文の入力（そして私の手）においてqwertyと比較してかなり少ない負担でタイピングが出来る配列だと再確認しました。

 ## 今後
このまま使い続けるか`E`の位置を変えるか迷っていますが多分変えます。ここまで来たら半端では終われないです。
いつかキーボードを作ってみようかと考えています。やはり快適性を求めるならキーピッチを小さくして指の移動量を減らしたいです。Moonlanderにも不満がないわけではなく、もう少し自分好みの形のキーボードが欲しいところです。薄く、小さく、キーは多めが良いですね。

# まとめ
Moonlanderを買ったのでキーの論理配列を変えようとしたら沼にはまった。
オリジナルの論理配列を作成・公開した。
楽しかった。