キーボードの配列最適化についてあれこれ考える

自作キーボードのふか~い沼の一つはキー配列。多くの人が究極のキー配列を求めて日々研究しています。途方もない感じがして底なし沼に見えるので避けていたのですが、最近読んだブログ記事にすっかり影響され、ああでもない、こうでもないと色々考えを巡らせてしまいました。ここでは考えを巡らせたキー配列の最適化ついて書いてみます。

この記事を書くことになったきっかけ

キーボード配列はQWERTY配列が標準的となってしまっているが、これは最適ではないと感じる人も多い。その強い不満から究極のキー配列を求めて日々研究を進めている猛者がいる。

 

この記事はまさにそんな探求から生まれた一つの成果であり、著者の並々ならぬ情熱を感じることができる。

tomisuke.hatenablog.com

 

この記事の良いところは、情熱だけで突っ走ることなくデータを示してそれをもとに議論しているところである。説得力があるし多くの人がこの記事に影響を受けたはず(私もその一人)。人を感化させるほどのこんな文章を書けるようになりたいものです。そしてこれが高校生の手によるものであるというのだから脱帽する。

 

キー配列の評価に使用しているのはこのサイト。

patorjk.com

いやー、よくできてるページですね。スコアは

  • 指の移動距離(33%)
  • 特定の指の使用頻度(33%)
  • 指と手を切り替える頻度(34%)

を考慮した加重計算ということらしい。

 

こういう研究を見ていてしばしば思うのは、どういう評価基準が良いのだろうかということ。評価し、点数化するというのはどんな場合でも難しい。

 

自分は深い沼であるキー配列には手を出すまいと思っていたが、上の記事に刺激を受け、キー配列の評価基準について、ああでもない、こうでもないと考えを巡らせてしまいました。この記事ではそのことについてつらつらと書いてみます。以下では物理配列はRaw staggeredとし、日本語、英語の文章の入力を想定します。日本語はローマ字入力としてかな入力は考えないものとします(かな入力の経験がないので全然わからない...)。

 

自分が考えるキー配列のスコアリング項目

キー配列を評価するときに打鍵するキーの位置やパターンによってスコアリングする方法がよくとられている。ここでは打鍵が速いパターンと逆に遅くなるパターンについていくつか項目を挙げてみる。

打鍵が速いパターン

ホームポジションのキー

QWERTY配列での教本的なタイピングではasdf、jkl;がホームポジションとなる。指はこの位置に待機しているわけなので、ホームポジションのキーは指を前後左右に移動させることなく打鍵できる。文字の頻度を考えるとjや;がこの一等地にあるのことに我慢ならない人は多いはず。

指の移動が少ないキー

これもキー配列の探求でよく言われていること。極端な例を挙げればアルファベットよりも数字のほうがホームポジションから遠くて打ちづらい。あるいはr,t,gは左手人差し指が担当だが、多くの人はtよりもホームポジションに近いrやgのほうが打ちやすいと感じるだろう。

片手で指が異なるキーを連続して打鍵する場合

たとえばpointは慣れるとだいぶ速く打鍵できる。poinはすべて右手が担当で片手で連続して打鍵することになるのだが、すべて指が異なるのである程度慣れるとだいぶ速く打てる(pを右薬指で打鍵する人はそうではないだろう)。

 

片手での連続打鍵でも指が異なれば左右の指で交互に打鍵する場合に比べて速く打てると思う。実際にfjfjfjと左右交互にタイプするのと、jkjkjkと片手でタイプするのを比較してみるとよくわかる。多くのキー配列の研究ではこの点が考慮されていない場合が多いように思われる(自分が知らないだけかも)。

 

実際このパターンを評価するのは難しい(もしくは面倒)。片手で指が異なればいつも速くタイプできるわけではない。たとえばbeとかは教本的にはbは左手人差し指、eは左手中指なので、片手で指が異なる。しかし自分はこれを速くタイプできない。これは人によるのかもしれない。他の人はどうなんだろうか?

 

速くタイプできるパターンかどうかは、キーの同時押しが無理なくできるかどうかで判断できると思う。poinは同時押しすることができる。一方beの場合、自分は人差し指と中指がそんなに開かないので同時押しは無理しないとできない。

 

この議論は格子配列や挟ピッチになると変わるだろう。キー配列の最適化を考える際にRaw staggeredとそれ以外を比較しようとすると、片手連続打鍵の場合の評価値も変える必要があるだろう。

 

打鍵が遅いパターン

同じ指で異なるキーの連続打鍵

同じ手の同じ指で異なるキーを連続して打鍵するのはどうしても遅くなる。たとえばdeとかは左手の中指で連続して打鍵することになる。これを速く打つのは難しい。

同じキーの連続打鍵

bookのooなどの同じキーの連続打鍵は場合によってはタイピングを遅くするかもしれない。これはある程度打鍵スピードが速くなると煩わしく感じることがある。どれくらい打鍵スピードが速くなるとそう感じるかは何とも言えないが、例えばMonkeytypeで90wpmくらいを出せるくらいだとそう感じる。

 

ただしこれはタイピングテストなどの場合に限られるかもしれない。普段文章を書いているときにはあまりストレスを感じていないような気もする。ただ日本語の「ん」を打鍵するときにnnと打たないといけないときがあって、それは煩わしく感じる。他の人はどうなんだろうか?

 

この同じキーの連続打鍵はキー配列をいじるだけでは改善できない。キーマップで打鍵速度を向上させるならマクロなどを上手く割り当て、それに慣れるための訓練が必要になる。

小指での打鍵

多くの人は小指を器用に動かすのは苦手だろう。pは教本的には右手小指の担当だが、薬指で打鍵する人は結構多いのではないだろうか?

 

薬指も自分はあまり器用に動かせない感じがするが、タイピングでそれを感じたことはない。他の人はどうなんだろうか?

これらのスコアの優劣

キー配列の優劣を議論する場合、ある文字列を与え、上の項目で打鍵の打ち易さ(辛さ)をスコアリングして比較するのが良く行われている。難しいのはこれらの項目の優先順位付けだろう。

 

上に挙げた項目でわかりやすいのはキーのホームポジションからの遠さ。例えばホームポジションはキーが速く打てるので+10点、ホームポジションの隣は+5点、yなどは少し遠いので加点無しと仮に設定してみることにしよう。

 

次にわかりやすいのは同じ指で違うキーを連続打鍵する場合。これは打鍵を遅くするので減点。じゃあどれくらい減点すべきだろうか?ホームポジションの隣を打鍵して得する打鍵時間に比べると失う時間のほうが多い気がするのでー5点よりは大きい減点という気がする。じゃあホームポジションのキーの打鍵で得する時間に比べて損する時間はどうかと問われれば、どうなんだろう?よくわからない。そもそも最初に設定したホームポジションとその隣のキー打鍵の加点が2倍違うというのは妥当なのだろうか?

 

考えだすとこんな具合に各項目の尺度をどうすべきかすぐにわからなくなってしまう。自分ではスコア基準をリーズナブルに決定できる気が全然しない…。

Carpalx

あれこれ考えを巡らせながらこの記事を書いていたら、こんなサイトにたどり着いた。

mkweb.bcgsc.caこのサイトのtyping effortの項目で評価値について詳細が説明されている。すべてを理解できていないけれど、これは自分が考えていたことにかなり近く、より深化させたものとなっている。自分が大変そうだなと考えていた打ちやすい、打ちづらい文字列の組み合わせを3つの連続する文字(triad)で分類している。すごい!

 

なんか見覚えがあるなーと思ったらだいぶ前にTalpkeyboardさんがTwitterで紹介していた。さすがです。

 

Carpalxはキー配列の評価モデルとしてとても良くできている。ただし、それぞれの重みづけを決めるパラメータの値は任意性がある。実際subjecteive(主観的)という語をしばしば目にする。たとえばrowごとにペナルティーを設定していて、1.5を数字行、0.5をQ行(top row)、0をA行、1をZ行(bottom row)に割り振っていたりしている。自分ではQ行とZ行の打ちづらさは大差ないように感じるので、2倍も評価値が違っていいのだろうかと感じてしまったりする。

 

どうやってこれらパラメータの重みを決定するのがいいのだろうか?

 

タイピングデータの取得が必要では?

ある程度客観的に決めるなら、タイピングのデータを取り、各項目でタイピング時間がどれくらい短く、あるいは長くなるかを評価(測定)するのが良いだろう。これはデータさえ取れれば実現できる。またデータがあれば、どういうキーやキーの組み合わせのときに打鍵が速くなる・遅くなるというのも評価できるので、上にあげていない項目も見いだせるかもしれない。

 

ただし、日本語なのか英語なのか、はたまたプログラミングなどかで全然違うだろう。タイピングする文章の内容にもよるし、人によっても違うはず。結局究極のキー配列を選定するためのスコアリング基準は誰の何のタイピングを対象にするかで変わるだろう。万人受けするキー配列はきっと難しいと思うが、”俺の最強のキー配列”にはたどり着けるのではないかという気がする。とても興味があるので自分のタイピングのデータが取得できればなぁと思う。そんなソフト誰か作ってくれませんか?(他力本願)

 

以下ではちょっと違う観点からキー配列の最適化について考えてみる。

言語でのタイピングリズムの違い

日本語と英語のタイピングテストを交互にやってみるとよくわかるが、これら2つの言語の場合で打鍵のリズムが全然違う。英語のタイピングテストでは単語の後にスペースを打鍵する。実際の英作文でも似たような状況になる。単語の間のスペース入力が打鍵のリズムを作っている。

 

一方日本語のタイピングテストでは単語の切れ目でスペースを押すことがない。10以上のアルファベットキーを連続してタイプしたりする。息を止めて水の中に潜るのになんとなく似ている気がする。これに対して実際の日本語の文章を書くときでは漢字変換のためにスペースキーを押すので、作文時とタイピングテストのときでリズムが異なる。これが原因なのか自分は日本語のタイピングテストがちょっと苦手。

 

またQWERTY配列で英語をタイピングしているときは、格ゲーのコンボ技みたいに気持ち良く3文字かそれ以上の文字列を速く打てる組み合わせがある(上述のpointなど)。日本語ではこのコンボはあまりないような気がする(自分のタイピングの練度が低いせいかもしれない)。英語は表音文字で決まった音節の文字列が頻出するからだろうか?

 

上に述べた打鍵のリズムと最適なキー配列というのは何か関係があるのではないかという気がする。日本語の打鍵では子音と母音が交互に現れてある程度の長さの文字列をタイプするのがほとんど、というのを前提とした場合(これはどこまで正しいのだろうか?)、Tomisuke配列のように母音と子音を左右に分け、左右交互に打鍵するようなキー配列は打鍵のリズムを良くする最適解の一つという気がする。

 

キー配列の最適化は指8本でいいのか?

キー配列の研究では左右の親指を除く8本の指の最適化の議論がほとんどだと思う。これはステレオタイプなのかもしれない。

 

タイピング女王のmiriさんの打鍵動画(例えばこれ)とかを見ていると、教本的なホームポジションやキーと指の対応に捕われていないのに気づくとこができる。これは示唆に富んでいて面白い。とてもタイピングが速いので運指を追うのは大変だが、右親指をアルファベットの打鍵に使用していたりする。そのためなのかホームポジションasdf、jkl;ではないように見える(母音のキーをホームポジションにしている?)。

 

多くの人はスペースキーは左親指だけで押しているのだと思うが、そうすると右親指は使われていないわけだ。この指もアルファベットの打鍵に参加させればタイピング速度を向上させることができるだろうし、タイピング女王はまさにそれを行っている。

 

自作キーボード界隈ではほとんどの人は親指にModifierを担当させていると思う。これはもちろんわかりやすい。ただタイピング女王の運指を見ていると、親指の役割はもっと柔軟に考えても良いのかもしれない。

 

キーへの指の割り当てを固定するのが最適なのか?

教本的なタイピングではそれぞれのキーに対してある1本の指を割り当てる。これはたぶん初心者の混乱を避けるためではないかと思う。このルールに従うと、例えばnumberとタイプする場合、numは右人差し指で3連続してタイプすることになり速く打つのは難しい。

 

自分はすでに基本からズレてしまっていて、numberをタイプするときにはどうもnを右人差し指、uを右中指、mを右人差し指でタイプしている(ことにこの記事を書いていて気づいた)。underをタイプするときのuは基本通り右人差し指なので、文字列によって切り替えているらしい。自然と物理配列に適応した結果なのだろうが、ある程度ブラインドタッチができるくらい熟達した人ならキーと指の対応は固定しなくてもいいのかもしれない。

 

別の例はb。教本的な指の割り当てだと左人差し指の担当である。だたbeやbaなどの組み合わせの場合、自分はbを右人差し指でタイプしている。一方bi,、bu、boという場合はbは左人差し指を使っているみたい。bキーはちょうど左右のホームポジションの真ん中に位置していて左右から等距離にあるので、原理的にはどちらの手で打鍵してもいいはず。

 

これらのようにタイプする単語によってキーを担当する指は柔軟に変えてもいいのだと思う。こういうことを言い出すと、キー1個に対して文字が1つである必然性もない。究極はやはりステノタイプだろう。憧れるけれど、学習コストがハンパないので一般人には手が出ない。

 

あまりに発散的に考えるとキー配列の最適化をどうしたらいいのかわからなくなるので、

  • 日本語の入力方法(ローマ字入力、かな入力)
  • 物理配列(raw staggered、ortholinear、column staggered)
  • 親指は文字入力に参加させるかどうか
  • 使用する指とキーの物理配置との対応

等の項目は決めたうえでキー配列の最適化に取り組み始めるのが妥当だろう。raw staggeredとortholinearの比較とかもできたら面白いと思うけれど公平な比較は簡単ではないだろう。

 

あとがき

キー配列の最適化はやっぱり沼ですね。深遠で考えるほどわからなくなってきます。実際この記事を読み返すと?がたくさんある…。

 

独自の配列とか作ってみたいと思いますが、今のところは自分が納得できるようなキー配列の評価基準を決定できる気がしません。タイピングデータを取得ができるようになったらぜひチャレンジしてみたいですね。

 

この記事は自作分割キーボードopyc3437で書きました。