⌨️

【takayaso配列】オリジナルキーボード配列を作りました

ども、オオニシタカヤです。
今回は、オリジナルのキーボード配列【takayaso配列】をご紹介します。
 
皆さんがいつも使っているキーボードって、生まれたときから全部同じ配列ですよね。
ちょっと考えてみたら、もっと合理的な配列があると思いませんか?
 
Qwerty配列が蔓延るこの世の中に、満を持してtakayaso配列をぶっ放していきます。

キーボード配列を変えるには?

キーボードの配列を変えるにはどうすればよいのでしょうか? キーボードって、基本的にアルファベットが刻印されてますし、カスタマイズしやすいものも市販されていません。
そんなときに目をつけたのは自作キーボード。 Chidori、ErgoDashminiを通って、CorneECWLにたどり着きました。
普段使用しているCorneECWL。無刻印可愛いし、スコスコした打鍵感めちゃくちゃ好き。
普段使用しているCorneECWL。無刻印可愛いし、スコスコした打鍵感めちゃくちゃ好き。
自作キーボードの醍醐味は、カスタマイズ性の高さ。 HHKB等の市販のキーボードでも、ある程度キー配列をいじることはできますが、自作キーボードは本当になんでもできます。
 
例えば、
  • 1つのキーに2個以上のキーを割り当てる
  • 1つのキーでメアドや住所などの文字列を入力できる
  • 2つ以上のキーの同時押しのショートカットが1つのキーで実行できる
  • 「#」や「&」をshiftキーなしで入力できる
  • 親指で「Enter」や「BackSpace」を入力できる
  • WinとMacを行き来できる
などなど…
 
このカスタマイズ性に魅了され、自作キーボードの世界に足を踏み入れた僕は、
どうせ変わったキーボード作るなら、自分の思い通りにイチから作ろう!
と考え、快適なタイピングを追い求める長い長い旅に出発しました。

独自キーボード配列【takayaso配列】

まずは結論から。僕の考えた配列はこんな感じ。
格子配列(ortholinear)で表示したもの。
一般的なキーボードは横ずれ(row-staggered)、僕のキーボードは縦ずれ(column-staggered)ですが、どの物理配列でも使うことが出来ます。
格子配列(ortholinear)で表示したもの。 一般的なキーボードは横ずれ(row-staggered)、僕のキーボードは縦ずれ(column-staggered)ですが、どの物理配列でも使うことが出来ます。
以前使用していたErgoDashmini。
CorneECWLと同じcolumn-staggered(縦にずれたエルゴノミクスに基づいたキーレイアウト)です。
以前使用していたErgoDashmini。 CorneECWLと同じcolumn-staggered(縦にずれたエルゴノミクスに基づいたキーレイアウト)です。
ポイントは以下の3つ。
  1. 左手に母音右手に子音を配置し、左右交互にリズミカルなタイピングを可能に。
  1. 頻用するアルファベットは、できる限りホームポジションに近いところに配置。
  1. ショートカットで多用する [X] , [C] , [V] はそのまま。([Z] の扱いは後述)
 
ちなみに、僕が使用している環境ではこんな感じにしています。
僕のCorneECWLでのtakayaso配列。自作キーボードのため一部カスタマイズ済み。
僕のCorneECWLでのtakayaso配列。自作キーボードのため一部カスタマイズ済み。
自作キーボードならではのカスタマイズもしています。
  1. スラッシュやセミコロンなどの記号は思い切ってレイヤー下に格納。(レイヤーについては後述) そのかわり多用する丸カッコ , 、カギカッコ を手の届く位置に。
  1. , , , を親指に。か弱い小指を労る親切設計。
 
僕はちょっとしたライターをやってて、1日10時間以上PCに向かう日もしばしば。
そんな僕はあと40年間、毎日のようにキーボードを叩き続けるでしょう。 そんな僕が考えた【takayaso配列】のコンセプトは、
 
疲れず速い、リズミカルなローマ字入力を。
 

キーボード配列とは?

ほんじゃ、どんな配列にしようかという話です。
先行研究として、巷で「合理的〜」と評価が高いDvorak配列やEucalyn配列についてお勉強しました。
  • Qwerty配列
    • 最頻出のAをか弱い小指が担当しており、多用するTとYが遠い。
ホームポジションの特等席に、F, J, ;が居座ってて合理的とは言い難い。
      最頻出のをか弱い小指が担当しており、多用するが遠い。 ホームポジションの特等席に、, , が居座ってて合理的とは言い難い。
  • Dvorak配列
    • 左手中段に母音を集めた合理的な配列。
英文入力に特化してしまったため、KとYも左手にあるのがネック。
ローマ字入力に適応させた改良版「DvorakJP」のおかげで、日本でもある程度使われているようです。
      左手中段に母音を集めた合理的な配列。 英文入力に特化してしまったため、も左手にあるのがネック。 ローマ字入力に適応させた改良版「DvorakJP」のおかげで、日本でもある程度使われているようです。
  • Eucalyn配列
    • ゆかりさんが考案したローマ字特化配列。母音を左側に固め、
Z,X,C,Vをそのまま、vim使いのためにHJKLを実現、Q,A,P,BをQwertyから変更しないなど、親切設計がなされています。
個人的な感想としては、HJKLは必要なく、頻出のAとNを小指で打鍵するのが辛いと感じました。
      ゆかりさんが考案したローマ字特化配列。母音を左側に固め、 をそのまま、vim使いのためにHJKLを実現、をQwertyから変更しないなど、親切設計がなされています。 個人的な感想としては、HJKLは必要なく、頻出のを小指で打鍵するのが辛いと感じました。
そこで僕は、先人たちの思想を踏襲し、改めて自分で合理的な配列を考えることにしました。

keyboard_layout_benchmarker-master

キー配列に興味がある方なら、1度は見たことがある遊舎工房さんの「キー配列頂上決戦!さいつよなレイアウトはどれだ!」。 このベンチマークで、takayaso配列についても評価してみました。
このベンチマーク「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」として用意しました。
あとは、ターミナルでこれを叩くだけ。

Qwerty配列(Overall cost : 993

日本語入力

Position cost : 236 Hand/Finger cost: 264 Total cost : 500

英語入力

Position cost : 238 Hand/Finger cost: 255 Total cost : 493

Eucalyn配列 (Overall cost : 761

日本語入力

Position cost : 172 Hand/Finger cost: 165 Total cost : 337

英語入力

Position cost : 190 Hand/Finger cost: 234 Total cost : 424

takayaso配列(Overall cost : 756

日本語入力

Position cost : 173 Hand/Finger cost: 153 Total cost : 326

英語入力

Position cost : 199 Hand/Finger cost: 231 Total cost : 430
LayoutOverallPosition costHand/Finger cost
Qwerty993500493
Dvorak826399426
Eucalyn761337424
takayaso756326430
💭
わずかながら、Eucalynを超えました!嬉しい!!
Eucalyn配列は、5,6列目の使用頻度が低くPosition costが低め。 takayaso配列は、子音を右側に全て固めれたのでHand/Finger costが低め、といった評価でしょうか。
個人的な見解ですが、小指のコストは1.5ではなく3くらいあると思います。を小指で押すのは思ったより辛いです。 仮に、小指のコストを1.5→3に変更したときの評価は、Eucalyn(827):takayaso(799)。かなり差がつくことが分かります。

2つの評価基準:①移動コスト ②使用頻度

このベンチマークは、答え合わせみたいなもので、実は手動でセコセコ評価して、配列を作成してきました。
その過程もせっかくなので見てって下さい。
 
僕が評価した点は
①指の移動コスト
②文字の使用頻度
の2つ。
 
押しやすい位置にたくさん押すキーを配置し、押しにくい位置にあんまり押さないキーを配置するだけの簡単なお仕事です。
 

:指の移動コストを評価する

怠惰でズボラでどうしようもない僕は、生涯で指をできるだけ移動したくないのです。
 
そこで、
指の移動コスト = 指の移動量 + 指の負担量
として評価。
 

①-ⅰ:指の移動量

キー1つ分の距離を2として、担当する指の移動量を数値で評価しました。
人差し指・小指は比較的短いため、上段のみそれぞれ+1・+2しています。
人差し指・小指は比較的短いため、上段のみそれぞれ+1・+2しています。

①-ⅱ:指の負担量

僕の完全なる主観で数値化しました。
小指は貧弱なのでコスト高め。人差し指も外側に開くのが辛いため、ある程度コスト高くしています。下段ら指をたたむ行為がキツいため、上段よりコストを高くしています。
小指は貧弱なのでコスト高め。人差し指も外側に開くのが辛いため、ある程度コスト高くしています。下段ら指をたたむ行為がキツいため、上段よりコストを高くしています。

①-ⅲ:指の移動コストの総合評価

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

:文字の使用頻度を評価する

次に、どのアルファベットをよく使うのか調べていきます。 今回はネットに落ちてた「文字頻度表」を利用して、表をセコセコ作りました。
  • 左から、英語入力、ローマ字入力、それら2つを合成した評価(1:1),(1:3)。 (評価は、簡易的にパーセンテージのアベレージで評価した。カッコ内はその割合。(1:3)はローマ字入力に重きを置くため。)
  • , , , は省略した。
これから読み取れることは以下の通り。
  1. 母音が全体の40%近くを占めている。 英語入力では>>>>>>>、ローマ字入力では>>>>>>>という評価。の評価が真反対みたい。
  1. 子音はが強い。続いてといったところ。
  1. ショートカットで多用するや、は使用頻度低め。
  1. は、英語と日本語でかなり頻度が異なる。

③:①と②を総合評価する

ここまで、①どこが押しやすい場所で、②どれが押しがちな文字なのかを評価してきたので、①と②を照らし合わせてみます。
出来レースかと思うくらい一致しています。 一致していないところは、しょうがない部分だったり、学習コストを優先した部分だったりするのであんまり気にしてないです。
 

takayaso配列完成までのログ

最終的にこの配列に至った経緯を、日に日に改良してきたログで書き残します。

①親指とモデファイアキーを固定

まずは自作キーボードの醍醐味、力持ちの親指に仕事を与える。
  1. ホームポジションに 、利便性的に内側に 、外側には , 。 長押しは , に加え、3つのレイヤー切り替えも担当している。
  1. 左側に , , を配置。これは大事。
  1. 見た目と直感性を考慮して , , は小指の右に配置した。
  1. アルファベットは26コで残りは30コ。 , , , をいい感じのところに配置した。

②Dvorakを踏襲した母音配置

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

③子音を右側に配置

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

の小指が辛いお〜〜;;

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

⑤【迷走】が左にあるのが許せない→Google日本語入力で試行錯誤

どうしても子音が左側にあるのが許せない。全然リズミカルじゃないよ。
でもショートカットにはは欠かせないんだ。
  1. Google日本語入力で を ざ,じ,ず,ぜ,ぞ に変更。 の じゃ行 を犠牲にして、擬似的に を右側に配置した。

⑥[Command+z] のショートカットキーで解決→EndGame

Google日本語入力での試行錯誤は、いわば“改造行為”のようなものなので、自分のPCでしか通用しない。このままでいいのかと一週間ほど悩んだ。
そこで、左手の親指に , の「やり直す専用キー」を作ることに。かなり使うからね。
  1. これで気兼ねなく を子音の右手側に移動できる。じゃじゅじぇじょは で頑張ることにして、は左手に文字通り“左遷”。
  1. さらに を交換して使用感向上。 も交換して、直感的に「が、ざ、だ、ば、ぱ」の順番に並び替えた。
これで、Google日本語入力の改造とおさらばし、EndGame…。

⑦強いて言うイマイチな点

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

最終的なキー配列

僕もCorneECWLで、takayaso配列を日常的に使っています。
無刻印可愛いな。スコスコした打鍵感めちゃくちゃ好き。
無刻印可愛いな。スコスコした打鍵感めちゃくちゃ好き。
最終的なキー配列はこちら。

LT0(takayaso-Layout Layer)

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

LT1(Numbers + Moving Layer)

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

LT2(Symbols Layer)

数字をひたすら打つとき用のTG(5)を配置。押すとLT5にtoggle(一時的に固定)されます。
数字をひたすら打つとき用のを配置。押すとにtoggle(一時的に固定)されます。

LT3(ShortCuts Layer)

左手側には、矢印キーと、mac・WordPressのショートカットを配置。
右手側には、ファンクションキーと、ほぼ使わないであろうマウスボタンを入れておきました。
左手側には、矢印キーと、mac・WordPressのショートカットを配置。 右手側には、ファンクションキーと、ほぼ使わないであろうマウスボタンを入れておきました。

LT4(BLE-Connect + Moving Layer)

YouTubeを見ながら左手でパンを食べているとき用に、右手だけで矢印を押せるようにするLayerです。
アクセスしずらい(=不意に押しずらい)位置なので、BMP専用の接続キーも格納してます。
YouTubeを見ながら左手でパンを食べているとき用に、右手だけで矢印を押せるようにするLayerです。 アクセスしずらい(=不意に押しずらい)位置なので、BMP専用の接続キーも格納してます。

LT5(Toggled-Numbers Layer)

エクセルへの打ち込みなどのひたすら数字を入力するときに、左手親指を押し続けるのを回避するために作った、toggledレイヤーです。再度TG(5)を押すと元に戻れます。
LT2に準拠していますが、数値計算用の記号も置いています。
エクセルへの打ち込みなどのひたすら数字を入力するときに、左手親指を押し続けるのを回避するために作った、toggledレイヤーです。再度を押すと元に戻れます。 に準拠していますが、数値計算用の記号も置いています。