blog.bouzuya.net

2018-02-27 ぼくのキーボードのいま

ぼくのキーボードのいまを書く。

ぼくはいま MacBook Air と Let's Split を使っている。以前のものは 2018-02-03 にそこそこ書いた。改めて列挙すると Nyquist / MiniDox / ErgoDox EZ / REALFORCE91 UDK-G / REALFORCE106 あたりを使っている。 MacBook Air のキーボードなんてどうでもいいので、これ以降は書かない。

Let's Split は 4 * 6 * 2 の 48 キーのキーボードだ。格子型配列で左右分離型だ。文章で説明しても分かりづらいのでリンク先の画像を見ると良い。詳しくは検索したほうがいい。ぼくは 36 キーにして、これを使っている。リンクは組み立てなどのガイドのあるリポジトリだ。

なぜ 36 キーなのか。手の形と動かせる範囲から押しやすいキーを残したらそうなったというだけだ。

理想の物理配列は手にピッタリとくるもの(おそらくお椀型や親指用に横向きのスイッチがついたもの)だが、平面に限定すると 2017-09-01 にも書いた 36 キーだ。改めて書くと↓のような形だ。

.----------------------------------.              ,----------------------------------.
|  1,1 |  1,2 | 1,3  | 1,4  | 1,5  |              | 1,8  | 1,9  | 1,10 | 1,11 | 1,12 |
|------+------+------+------+------|              |------+------+------+------+------|
|  2,1 |  2,2 | 2,3  | 2,4  | 2,5  |              | 2,8  | 2,9  | 2,10 | 2,11 | 2,12 |
|------+------+------+------+------|              |------+------+------+------+------|
|  3,1 |  3,2 | 3,3  | 3,4  | 3,5  |              | 3,8  | 3,9  | 3,10 | 3,11 | 3,12 |
`--------------------+------+------+------.,------+------+------+--------------------'
                     | 4,4  | 4,5  | 4,6  || 4,7  | 4,8  | 4,9  |
                     `--------------------'`--------------------'

(3 * 5 + 3) * 2 の 36 キー。これにもっとも近いのは MiniDox だ。

Minidox は 18 * 2 の 36 キーのキーボードだ。格子型ではなく、左右は揃っていて上下にズレている。親指の島は独立し、すこしずつ傾いており、中央の 2 キーは 1.5u になっている。文章で説明しても分かりづらいのでリンク先の画像を見ると良い。リンクは PCB データの置かれているリポジトリだ。

MiniDox は人差し指〜小指について Let's Split よりもしっくりきたのだけど、親指の位置がしっくりこなかった。ぼくの理想では外側のキー ((4,4), (4,9)) は人差し指の真下までに留めてほしい。内側のキー ((4,6), (4,7)) の傾きはもうすこし控えめで良い。小指はもう数 mm ほど下げてほしい。


次にキーマップだ。

ErgoDox EZ 以降は QMK Firmware を使っている。 QMK は TMK から派生したものだ。 QMK のドキュメントに書いてある

QMK はいろいろごちゃごちゃしている。説明しはじめると大変だ。ぼくにとって大切なのはレイヤーだ。レイヤーはドキュメントの Keymap Overview を見ると良い。

なぜ、レイヤーが大切なのか。それは 36 キーというキー数の制約があるからだ。

36 キーで通常のキーボードと同等の機能を実現しようとすると、どうしてもひとつの(物理的な)キーで複数の(論理的な)キーの役割を果たさなければいけない。レイヤーごとに役割を持たせ、それらを切り替えることで、実現する……というわけだ。

また、ぼくにはひとつこだわりがある。「同時押し」が嫌いということだ。 Ctrl / Shift / Alt / GUI (Cmd / Win) のモディファイアキーほか、上記のレイヤーを切り替えるレイヤーキー。これらは通常「同時押し」を要求する。ぼくはそれを避けたい。

QMK は OSL (oneshot layer) や OSM (oneshot modifier) という機能を持っている。これは Sticky Key とか複合キーなどと呼ばれているものだ。……が、いろいろ制約があって使いづらい。ぼくはいま v22 を使っているのだけど、このキーマップはわりと QMK Firmware の機能から外れている。独自で OSL や OSM に近い機能を実装しているからだ。

v22 は、「キー数の制約」・「同時押し」のふたつを克服できるように実装している。詳細は面倒なので書かない。

最後に具体的なキーマップ (レイヤー) を挙げる。

親指はスペースを除いて、すべてレイヤーキーだ。モディファイアキーでさえ別のレイヤー (L4, L5) に押し込んでいる。ここまで徹底されているキーマップはあまりないと思う。この判断のおかげでモディファイアキーはゆとりをもって配置でき、左右対称にできている。

Layer0
.----------------------------------.              ,----------------------------------.
| Q    | W    | E    | R    | T    |              | Y    | U    | I    | O    | P    |
|------+------+------+------+------|              |------+------+------+------+------|
| A    | S    | D    | F    | G    |              | H    | J    | K    | L    | L3   |
|------+------+------+------+------|              |------+------+------+------+------|
| Z    | X    | C    | V    | B    |              | N    | M    | ,    | .    | /    |
`--------------------+------+------+------.,------+------+------+--------------------'
                     | L4   | L1   | SP   || L2   | L1   | L5   |
                     `--------------------'`--------------------'
Layer4
,----------------------------------.              ,----------------------------------.
|      | Eisu | ____ |      |      |              |      |      |      |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
| Ctrl |Shift | Alt  | GUI  |      |              |      |      |      |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
|      |      |      |      |      |              |      |      |      |      |      |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

Layer5
,----------------------------------.              ,----------------------------------.
|      |      |      |      |      |              |      |      | ____ | Kana |      |
|------+------+------+------+------|              |------+------+------+------+------|
|      |      |      |      |      |              |      | GUI  | Alt  |Shift | Ctrl |
|------+------+------+------+------|              |------+------+------+------+------|
|      |      |      |      |      |              |      |      |      |      |      |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

2 つめのレイヤー (L1) には数字・記号・カーソルを押し込んでいる。数字は標準の並び、カーソルは HJKL 、記号は ASCII コード順だ。

Layer1
,----------------------------------.              ,----------------------------------.
| 1    | 2    | 3    | 4    | 5    |              | 6    | 7    | 8    | 9    | 0    |
|------+------+------+------+------|              |------+------+------+------+------|
| :    | ;    | ,    | -    | .    |              | Left | Down | Up   |Right |      |
|------+------+------+------+------|              |------+------+------+------+------|
| /    | @    | [    | \    | ]    |              | ^    | _    |      |      |      |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

3 つめのレイヤー (L2) は適当。普段押さないキーを押し込んでいる。

Layer2
,----------------------------------.              ,----------------------------------.
| F1   | F2   | F3   | F4   | F5   |              | F6   | F7   | F8   | F9   | F10  |
|------+------+------+------+------|              |------+------+------+------+------|
| F11  | F12  | F13  | F14  | F15  |              | Mute |VolDn |VolUp |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
| F16  | F17  | F18  | F19  | F20  |              |      |      |      |      |RESET |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

4 つめのレイヤー (L3) は Ctrl との組み合わせで表現できそうな、通常のキーボードでは(物理的な)キーが用意されているようなものを配置している。このレイヤーへのレイヤーキーは ; の位置 (L1) を使っている。この位置は特等席だ。ホームポジションを維持したまま押せる。

Layer3
,----------------------------------.              ,----------------------------------.
| Esc  |      | End  |      |      |              |      |      | Tab  |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
| Home |      | Del  |      |      |              | BS   |      |      |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
|      |      |      |      |      |              |      |Enter |      |      |      |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

まだこのキーマップにして日が浅いので、慣れるまではもうしばらくかかりそうだ。


まだ理想の物理配列にはたどり着いていない。キーマップは先週あたりで随分マシになってきたが、 QMK の余計な機能を取り除いた独自のものをつくりたい。まだまだ先は長い。