GPD PocketにおけるDvorak使いのためのキー配列考察と実践

[GPD Pocket Advent Calender 2017](https://adventar.org/calendars/2085) 9日目の記事となります。

## はじめに

TwitterでGPD Pocketの事を検索すると

* キー配列が変態過ぎて慣れない
* キー配列が変態過ぎてタッチタイプできない
* 欲しいけど、キー配列ががが・・・

なんて呟きを見かけます。これは確かにそうで、私もGPD Pocketを入手後、かなり悩みました。

私の場合、まず気になったのが

1. Caps Lockが小さい（アルファベットキーの半分）
1. 「,<」「.>」「/?」の3つのキーも小さい
1. 「;:」が「L」の横にない
1. 「-_」「=+」「[{」「]}」「`~」「'"」が遠く馴染みのない位置

1.はCtrlと入れ替えますが、Emacsなどを使うときに押しにくそうです。
2.はDvorak配列にしたときに「w」「v」「z」に変わり、使用頻度がQwertyの時よりも上がるため、ここでタッチタイプ出来ないのはストレスになります。
3.は「s」に変わるため、Dvoakユーザーにとって大問題となります。
4.はきっと、この辺しかしかなかったんでしょう・・・。

と言うわけで、GPD Pocketの場合、__普通__にDvorak配列を実現しても、実用レベルを大きく下回ってしまいますし、慣れでどうにかなる状態ではありません。

## これまでのキーボード遍歴
キー配列のカスタマイズに入る前に、これまで私が愛用してきた、しているキーボードをいくつか上げておきます。

* [Kinesis Advantage](https://www.kinesis-ergo.com/shop/advantage-for-pc-mac-refurbished/)
* [Fingerworks TouchStream](https://youtu.be/FDW5zyjhCbc)
* [Truly Ergonomics Keyboard](https://www.trulyergonomic.com/store/truly-ergonomic-mechanical-keyboard-soft-tactile-kailh-cherry-mx-compatible-brown-keyswitches-227-english)
* [Happy Hacking Keyboard Professional](http://www.pfu.fujitsu.com/hhkeyboard/)
* [東プレ REALFORCE91UG-S](http://www.topre.co.jp/products/elec/keyboards/index.html)
* [TEX Yoda/Yoda2](https://www.facebook.com/TEX-Electronics-Co-Ltd-472792412756463/)

どれが一番と言うことはなく、どれも素晴らしいキーボードです。

## キー配列のカスタマイズ方法
Windows7までは、GUIでキー配列をカスタムできる便利なツールが色々とありましたが、Win8以降、特にWin10以降になってから、Win10対応を謳うソフトを余り見かけなくなってしまったように思います。ソフトを探したり、古いソフトを試すよりも、直接レジストリをいじった方が早いなーと思い、私の場合は.regファイルを作成し、それを読み込ませる方法でキー配列をカスタマイズしていきます。

ここからはあくまでも自己責任でお願いします。

レジストリを直接いじるので、キーボードのスキャンコードを知る必要があるのですが、[keymill](http://kts.sakaiweb.com/keymill.html)というソフトがとても便利だったのでオススメします。

GPD Pocketの.regファイルは[githubのリポジトリ](https://github.com/tkrworks/ExtendedDvorakLayout)に上げてあります。GPD Pocketのフォルダの中、[ext-dvorak-4GPDPocket.reg](https://github.com/tkrworks/ExtendedDvorakLayout/blob/master/GPD%20Pocket/ext-dvorak-4GPDPocket.reg)というファイルがそうです。

もし、ここからさらにカスタムしたい場合に、どこをどうすれば良いか分かりやすいように、.regファイルの中に下記のようにコメントを入れ、その後にスキャンコードを指定しています。

```
;; capls <- ctrl
3a,00,1d,e0,\
```

これは、CtrlキーをCapsLockキーに変更するための記述になります。
キー配列に関係するのは4行目から117行目です。
もし、ここからキーの変更する行を削除したり、追加した場合には4行目の

```
"ScanCode Map"=hex:00,00,00,00,00,00,00,00,38,00,00,00,\
```
の38となっている数値を変更してください。この数値はコメント行を除くスキャンコードの入れ替えを行った行数に対応しています。

## 配列の考察
まずは、何もしていない状態のGPD Pocketの配列を見てみましょう。

![GPD_Pocket_Normal_25p.png](https://qiita-image-store.s3.amazonaws.com/0/213301/a4145392-4e2e-f68f-4e9c-6599ffd0d02e.png)

これを下のように変更しました。

![GPD_Pocket_Dvorak_25.png](https://qiita-image-store.s3.amazonaws.com/0/213301/8717e6bc-eba3-6894-62d9-d9025b943388.png)

まず、アルファベットキーを極力自然な指の位置でタッチタイプ出来るように配置するため、Enterキーを「S」に、右Shiftキーを「Z」にします。「M」の横の3つのキーですが、元「,<」「.>」はどちらも「W」とし、「/?」を「V」としました。この3つのキーを別々にして、真ん中「.>」をタッチタイプで正確に打鍵することは無理と判断しました。

「S」キーの横に「-_」キーが欲しいところですが、ここは妥協しつつ、使用頻度が高いので、元「Del」の位置に。

また数字キーたちをひとつずつ左にずらしています。この方が運指の観点から一般的なキーボードに近くなると判断しました。これにより、コーディングやターミナルでの作業で使用頻度の高いTabキーが追いやられてしまいましたが、Tabは私の場合、コーディングやターミナルでの作業では「Ctrl-w」としており、その他では「Win+Tab」くらいなので問題ありません。

Enter、BS、Spaceキーですが、これはKinesisなどエルゴノミクスキーボードを使っていた経験から、親指で打鍵できるようにしています。一般的な英語キーボードだとSpaceキーが長いため、有効ではありませんが、GPD Pocketの場合はSpaceキーが短く、日本語キーボードに近い間隔でSpaceキーの横の左右Altを打鍵できるため、左AltをBSキーに、右AltをSpaceにし、元々のSpaceキーをEnterに割り当てます。

「Z」に追いやられてしまった右Shiftですが、Appキーに割り当て、こちらも親指で打鍵できるようにしました。最初、「Z」キーの下の「'"」キーに右Shiftキーを割り当てていましたが、小指をかなり下に持ってくるため、手首に負荷が掛かるように感じ変更しました。

また、右Shiftキーに追いやられたAppキーは[W10Wheel.NET](https://github.com/ykon/w10wheel.net)というGPD Pocket必須ユーティリティで画面スクロールの時に使うので、右手でトラックポイントを操作する自分的には元々の位置よりも左手側にあって欲しかったので、そちらに移動させました。

HHKも常用しており、左右分離のエルゴノミクスキーボードでなければ右側のCtrl、Altキーはほぼ出番がないため、右の空いたところにCaps Lock、Tab、Winキーを配置しています。Winキーはアプリのランチャー代わりによく使うので、押し間違いの無いよう元「'"」キーに割り当て、UpキーをはさんでTabキーを配置することで、「Win+Tab」しやすいようにしています。

## まとめ
現時点でのGPD Pocketのキー配列はこんな感じです。
ちょっと文章が長くなってしまったため、読むのが辛い方は途中の画像を見て頂ければ、それだけでも構いません。

もし、もっと良いカスタマイズがある！という方は是非教えてください。