⌨️
【youn9taka配列】オリジナルキーボード配列開発ログ 〜指移動コストの限界を目指して〜
Created
2020/12/31
Category
Geek
Publish
slug
permalink
blog/
ども、youn9taka(やんぐたか)です。
今回は、オリジナルのキーボード配列【youn9taka配列】をご紹介します。
皆さんがいつも使っているキーボードって、生まれたときから全部同じ配列ですよね。
ちょっと考えてみたら、もっと合理的な配列があると思いませんか?
Qwerty配列が蔓延るこの世の中に、満を持してyoun9taka配列をぶっ放していきます。
目次
キーボード配列を変えるには?独自キーボード配列【youn9taka配列】キーボード配列とは?keyboard_layout_benchmarker-master評価方法Qwerty配列(Overall cost : 993)日本語入力英語入力Eucalyn配列 (Overall cost : 761)日本語入力英語入力youn9taka配列(Overall cost : 756)日本語入力英語入力2つの評価基準:①移動コスト ②使用頻度①:指の移動コストを評価する①-ⅰ:指の移動量①-ⅱ:指の負担量①-ⅲ:指の移動コストの総合評価②:文字の使用頻度を評価する③:①と②を総合評価するyoun9taka配列完成までのログ①親指とモデファイアキーを固定②Dvorakを踏襲した母音配置③子音を右側に配置④AとNの小指が辛いお〜〜;;⑤【迷走】Zが左にあるのが許せない→Google日本語入力で試行錯誤⑥[Command+z] のショートカットキーで解決→EndGame⑦強いて言うイマイチな点最終的なキー配列LT0(youn9taka-Layout Layer)LT1(Numbers + Moving Layer)LT2(Symbols Layer)LT3(ShortCuts Layer)LT4(BLE-Connect + Moving Layer)LT5(Toggled-Numbers Layer)
キーボード配列を変えるには?
キーボードの配列を変えるにはどうすればよいのでしょうか?
キーボードって、基本的にアルファベットが刻印されてますし、カスタマイズしやすいものも市販されていません。
そんなときに目をつけたのは自作キーボード。
Chidori、ErgoDashminiを通って、CorneECWLにたどり着きました。

自作キーボードの醍醐味は、カスタマイズ性の高さ。
HHKB等の市販のキーボードでも、ある程度キー配列をいじることはできますが、自作キーボードは本当になんでもできます。
例えば、
- 1つのキーに2個以上のキーを割り当てる
- 1つのキーでメアドや住所などの文字列を入力できる
- 2つ以上のキーの同時押しのショートカットが1つのキーで実行できる
- 「#」や「&」をshiftキーなしで入力できる
- 親指で「Enter」や「BackSpace」を入力できる
- WinとMacを行き来できる
などなど…
このカスタマイズ性に魅了され、自作キーボードの世界に足を踏み入れた僕は、
どうせ変わったキーボード作るなら、自分の思い通りにイチから作ろう!
と考え、快適なタイピングを追い求める長い長い旅に出発しました。
独自キーボード配列【youn9taka配列】
まずは結論から。僕の考えたyoun9taka配列はこんな感じ。


ポイントは以下の3つ。
- 左手に母音、右手に子音を配置し、左右交互にリズミカルなタイピングを可能に。
- 頻用するアルファベットは、できる限りホームポジションに近いところに配置。
- ショートカットで多用する [X] , [C] , [V] はそのまま。([Z] の扱いは後述)
ちなみに、僕が使用している環境ではこんな感じにしています。

自作キーボードならではのカスタマイズもしています。
- スラッシュ
/
やセミコロン;
などの記号は思い切ってレイヤー下に格納。(レイヤーについては後述) そのかわり多用する丸カッコ(
,)
、カギカッコ[
]
を手の届く位置に。
Enter
,BackSpace
,Shift
,Command
を親指に。か弱い小指を労る親切設計。
僕はちょっとしたライターをやってて、1日10時間以上PCに向かう日もしばしば。
そんな僕はあと40年間、毎日のようにキーボードを叩き続けるでしょう。
そんな僕が考えた【youn9taka配列】のコンセプトは、
疲れず速い、リズミカルなローマ字入力を。
キーボード配列とは?
ほんじゃ、どんな配列にしようかという話です。
先行研究として、巷で「合理的〜」と評価が高いDvorak配列やEucalyn配列についてお勉強しました。
- Qwerty配列

A
をか弱い小指が担当しており、多用するT
とY
が遠い。
ホームポジションの特等席に、F
, J
, ;
が居座ってて合理的とは言い難い。- Dvorak配列

K
とY
も左手にあるのがネック。
ローマ字入力に適応させた改良版「DvorakJP」のおかげで、日本でもある程度使われているようです。- Eucalyn配列

Z
X
C
V
をそのまま、vim使いのためにHJKLを実現、Q
A
P
B
をQwertyから変更しないなど、親切設計がなされています。
個人的な感想としては、HJKLは必要なく、頻出のA
とN
を小指で打鍵するのが辛いと感じました。そこで僕は、先人たちの思想を踏襲し、改めて自分で合理的な配列を考えることにしました。
keyboard_layout_benchmarker-master
このベンチマーク「klbm.py」は、「.txt」のテキストデータ、「.json」の配列データ、「cost.json」のコストデータをもとにPythonで評価。seabornでヒートマップを作成し、視覚的に使用頻度が分かるようになっています。
指先の移動によるコスト(Position cost)と左右交互打鍵出来なかった時のコスト(Hand/Finger cost)の合計が総合コストとなり、この値が低いほど評価の良い配列と言えます。
評価方法
元データでは5×14となっていますが、比較したいところは3×5なので「cost.json」を修正。それに合わせて配列の「hogehoge.json」も修正しています。
また、テスト用のテキストデータは、英語に童謡「青い鳥」、日本語に自分のブログをPythonライブラリ「pykakasi」を用いてローマ字に変換したものを、それぞれ「english.txt」「japanese.txt」として用意しました。
あとは、ターミナルでこれを叩くだけ。
Python
youn9taka配列(Overall cost : 756)
Layout | Overall | Position cost | Hand/Finger cost |
---|---|---|---|
Qwerty | 993 | 500 | 493 |
Dvorak | 826 | 399 | 426 |
Eucalyn | 761 | 337 | 424 |
youn9taka | 756 | 326 | 430 |
わずかながら、Eucalynを超えました!嬉しい!!
Eucalyn配列は、5,6列目の使用頻度が低くPosition costが低め。
youn9taka配列は、子音を右側に全て固めれたのでHand/Finger costが低め、といった評価でしょうか。
個人的な見解ですが、小指のコストは1.5ではなく3くらいあると思います。
A
N
を小指で押すのは思ったより辛いです。
仮に、小指のコストを1.5→3に変更したときの評価は、Eucalyn(827):youn9taka(799)。かなり差がつくことが分かります。2つの評価基準:①移動コスト ②使用頻度
このベンチマークは、答え合わせみたいなもので、実は手動でセコセコ評価して、配列を作成してきました。
その過程もせっかくなので見てって下さい。
僕が評価した点は
①指の移動コスト
②文字の使用頻度
の2つ。
押しやすい位置にたくさん押すキーを配置し、押しにくい位置にあんまり押さないキーを配置するだけの簡単なお仕事です。
①:指の移動コストを評価する
怠惰でズボラでどうしようもない僕は、生涯で指をできるだけ移動したくないのです。
そこで、
指の移動コスト = 指の移動量 + 指の負担量
として評価。
①-ⅰ:指の移動量
キー1つ分の距離を2として、担当する指の移動量を数値で評価しました。

①-ⅱ:指の負担量
僕の完全なる主観で数値化しました。

①-ⅲ:指の移動コストの総合評価
これら2つを総合した(単純にスコアを足した)評価は以下の通り。
なかなか“ぽい”のではないでしょうか。

②:文字の使用頻度を評価する
次に、どのアルファベットをよく使うのか調べていきます。
今回はネットに落ちてた「文字頻度表」を利用して、表をセコセコ作りました。
- 左から、英語入力、ローマ字入力、それら2つを合成した評価(1:1),(1:3)。 (評価は、簡易的にパーセンテージのアベレージで評価した。カッコ内はその割合。(1:3)はローマ字入力に重きを置くため。)
'
,"
,:
,;
は省略した。
これから読み取れることは以下の通り。
- 母音
A.I.U.E.O
が全体の40%近くを占めている。 英語入力ではE
>>A
>I
>O
>>>U
、ローマ字入力ではA
>I
>O
>U
>>>>E
という評価。E
の評価が真反対みたい。
- 子音は
N
T
S
が強い。続いてR
K
Y
H
M
W
といったところ。
- ショートカットで多用する
X
C
V
や、L
Q
J
F
は使用頻度低め。
L
とK
は、英語と日本語でかなり頻度が異なる。
③:①と②を総合評価する
ここまで、①どこが押しやすい場所で、②どれが押しがちな文字なのかを評価してきたので、①と②を照らし合わせてみます。

出来レースかと思うくらい一致しています。
一致していないところは、しょうがない部分だったり、学習コストを優先した部分だったりするのであんまり気にしてないです。
youn9taka配列完成までのログ
最終的にこの配列に至った経緯を、日に日に改良してきたログで書き残します。
①親指とモデファイアキーを固定
まずは自作キーボードの醍醐味、力持ちの親指に仕事を与える。
- ホームポジションに
Space
とEnter
、利便性的に内側にBackSpace
、外側には英数
,かな
。 長押しはCommand
,Shift
に加え、3つのレイヤー切り替えも担当している。
- 左側に
Tab
,Control
,Option
を配置。これは大事。
- 見た目と直感性を考慮して
[
,-
,]
は小指の右に配置した。
- アルファベットは26コで残りは30コ。
(
,)
,,
,.
をいい感じのところに配置した。

②Dvorakを踏襲した母音配置
- 左右交互にリズムよくタイピングすることに魅力を感じ、左手に母音を集めるDvorak配列を踏襲した。
- ショートカットキーの要である
Z
.X
.C
.V
は動かしたくなかったので、必然的に左が母音になった。とりあえず学習コストも考えて、左からA
.I
.U
.E
.O
としておこう。
- また、自作キーボードでキー配列を弄るので、
;
,:
,/
などは後述のレイヤーに格納して、日本語で頻出の(
,)
,,
,.
を上列に置くことに。
- 残りの2枠は、母音にも子音にも成りえない
Q
とL
をおいておこう。

③子音を右側に配置
-
Z
を除く日本語入力の子音は15個W
.M
.K
.R
.F
.H
.S
.N
.T
.Y
.G
.J
.D
.B
.P
] 。
- まずは、ローマ字入力における問題児
Y
の扱いを考える。子音のあとにY
を使う場面が多々あるため、右手で「タタンッ」と叩きやすい位置に欲しい。「母音に飛ばす」直感的な感覚と他の子音との兼ね合いから、人差し指ホームポジションの左に配置。その上下に使用頻度が低く、Y
と干渉しないF
,J
を配置した。嗚呼合理的ダナ。
- 次に、残りの子音を並べていく。目新しい配列を覚えることに不安を感じていたこともあり、学習コストの軽減を図った。ホームポジションの人差し指から右に
か
さ
た
な
、上段には
ま
ら
わ
、下段にが
だ
ば
ぱ
と順に配置した。適当に並べただけだが、思ったより頻度表にも準拠していて「アリだな」と思っていた。

④A
とN
の小指が辛いお〜〜;;
1週間ほど使ってみたものの、頻出の
A
と N
を小指で押すのが辛くなってきた。- 文字頻度表と二重母音等を考慮し、母音を左から
E
.U
.I
.A
.O
に変更した。もっと合理的に出来るかもしれないが、まあ一旦ヨシ!(安全猫)。
N
は酷使することが分かったので、ホームポジション中指の一等地に配置。代わりに英語で役に立たずのK
は上に移動した。H
はth+(母音)
,dh+(母音)
などの二重子音で使うので、アクセスしやすいホームポジションの小指に移動。

⑤【迷走】Z
が左にあるのが許せない→Google日本語入力で試行錯誤
どうしても子音
Z
が左側にあるのが許せない。全然リズミカルじゃないよ。でもショートカットには
Z
は欠かせないんだ。- Google日本語入力で
J+(母音)
を ざ,じ,ず,ぜ,ぞ に変更。J
の じゃ行 を犠牲にして、擬似的にZ
を右側に配置した。

⑥[Command+z] のショートカットキーで解決→EndGame
Google日本語入力での試行錯誤は、いわば“改造行為”のようなものなので、自分のPCでしか通用しない。このままでいいのかと一週間ほど悩んだ。
そこで、左手の親指に
command+Z
, command+shift+Z
の「やり直す専用キー」を作ることに。かなり使うからね。- これで気兼ねなく
Z
を子音の右手側に移動できる。じゃじゅじぇじょはzy+(母音)
で頑張ることにして、J
は左手に文字通り“左遷”。
- さらに
H
とY
、F
とW
を交換して使用感向上。G
とZ
も交換して、直感的に「が、ざ、だ、ば、ぱ」の順番に並び替えた。
これで、Google日本語入力の改造とおさらばし、EndGame…。

⑦強いて言うイマイチな点
特に無いというのが本音で、結構満足しています!
強いて言えば、
- ローマ字入力における二重母音のなかで
ou
の頻度が半端ない。人差し指を右に開くのが辛い気もする。
py+(母音)
が小指で2連続で辛いと感じる。 調べたところ「発表」「コンピュータ」「python」くらいでしか使わないらしいし、許容範囲。
- 英語で頻出する
gh
wh
lo
が、人差し指の縦方向2連打で多少辛い。
本当に「強いて言えば」なので、6カ月使って慣れた今は全く気になりません。
最終的なキー配列
僕もCorneECWLで、youn9taka配列を日常的に使っています。

最終的なキー配列はこちら。
LT0(youn9taka-Layout Layer)

cmd+sft+v
の「スタイルを維持してペースト」を左手で行えるように、LSFT_T(KC_J)
を採用。(長押しでsft
、単押しでJ
)
YouTubeを見るとき右手だけでも矢印キーを扱いたいので、LT4
を作成しKC_RBRC
の長押しに配置しています。LT1(Numbers + Moving Layer)

Any(2348)
はctrl+cmd+space
の絵文字一覧ショートカットです。
LGUI(KC_LALT)
は、Notionの見出しタグ変更のcmd+option+1,2,3
のショートカット用ですLT2(Symbols Layer)

TG(5)
を配置。押すとLT5
にtoggle(一時的に固定)されます。LT3(ShortCuts Layer)

LT4(BLE-Connect + Moving Layer)

LT5(Toggled-Numbers Layer)

TG(5)
を押すと元に戻れます。
LT2
に準拠していますが、数値計算用の記号も置いています。