見出し画像

『せおと配列』を作った話 ~ボクの最強配列~

この記事に辿り着かれたということは、一般的にはマニアックな方々だと思います。

新配列といえば、国内では大西配列、Dvorakあたりが有名ですよね。

自分も論理配列に興味を持ったきっかけは大西配列でした。

(新配列ってなに?論理配列とは?という方、この動画を観ましょう。きっとあなたにも新しい世界が開かれることでしょう。)

そういうわけで、大西配列にはまず感謝とリスペクトの念を抱かせて頂いております。と言いますか、今回の配列作成にあたっても制作アプローチの観点で非常に参考にさせて頂きましたし、自分が今この論理配列の世界を楽しめているのも大西拓磨センセのおかげです。感謝感謝です。

その上で、自分なりに論理配列についてこだわり抜いて考えた「ボクの最強配列」を紹介させて頂きます。

最強配列の定義


これは、人や環境によって異なるということを先に示しておきます。

その上で、私の定義はこんな感じでした。

脳内コストと物理コストの両方を最小化した配列。

もう少し具体化すると、

脳みそのコスト(脳⇨入力の負荷)を最小にし、文の推敲に脳内リソースが最大限使用され、物理的にも自然な運指で疲れにくい配列。

こんな感じです。

補足すると、人間はそもそも訓練によって適応する力を持っているので、
一般的に不自然で押しにくい運指でも訓練で打てるようになります。
実際、ギターとかもそうですよね。最初はFコードなんて弾けないです普通。でも訓練すればできるようになる。

多少難しい運指でも訓練して、指の移動距離のみを最適化したり、
瞬間風速を上げる高速タイピングに照準を合わせたアプローチも存在して当然かと思います。

ここではそういったプロ向けの配列ではなく、
訓練コストを可能な限り下げて、
"指や脳みそにやさしく長く走れる設計を心がける"というイメージです。

ただ訓練コストを下げるといっても、覚えやすさにパラメータを振りすぎて、運指コストが高くなるのは避けたい。そんな感じです。

あと、、先に言っておきますと、、

論理配列というのは、ハードありきです。
ハードというのはキーボードのことですね。

今回は以下のような、カラムスタッガードのキーボード(列ごとに縦にズレているもの)を想定しています。

画像
各指の上下運動が自然になるような配置。人間の指は5本あり、その各指が自然に運動可能な場所にキーがある。つまり、全ての指を最大限活用し特定の指への負荷を下げ、負荷を指全体に分散させられる。まさに物理コストを最小化する今回の目的に符合する。

よって、ロウスタッガードなこういう従来型の物理配列(行ごとに横にズレているもの)は想定していません。

画像
両手首を支点としたときに指が斜めの姿勢になるので、この横ずれのロースタは指の姿勢と合い案外悪くない。しかし各指の上下運動については考えられておらず、小指や薬指の存在はほぼ無視されている。代わりに元気な人差し指で広範囲(主に子音)をカバーし、それによって繰り広げられるアルペジオ打鍵によって高速打鍵を目指す、そんな物理配列に見える。

そもそもハードが求める指の動きが全く異なるので。

そして今回作りたい配列の趣旨に合うのは、カラムスタッガードの設計思想なのでハードはそれを前提に話を進めます。(オーソリニアに合うかどうかはちょっと分かりません。。)

(※皆さんも論理配列を選ぶ際はまず自分がどのような運指スタイルを求めているかに合わせて、ハード(物理配列)の吟味から行われることをおすすめします。物理配列と論理配列の相性が悪いと、最悪の状況に遭遇してしまいます。要注意。逆に論理配列の選定時には、どんな物理配列を前提に作られているかよく見るとよいかもしれません)

ではここから、具体的な仕様の説明を。

~ 具体的な仕様 ~

①日本語入力最優先で、英語も救いたい

⇨理由:
論理配列の最適化は、母語入力での効率化を第一優先に掲げるべきと考えます。背景には、AIの凄まじい進化というのもあります。インターネット上の言語の壁がますます崩壊し、母語での入力機会が増えていくことは明白ではないでしょうか。プログラマーも然り。とはいえ、このご時世英語を打つシーンもありますよね。後述しますが、今回ローマ字入力を採用するので、可能なら英語入力負荷もできるだけ下げたい。これは最終調整部分で考慮するとします。(先にネタバレしますが、英語性能もかなり高くなりました詳細後述)

②ローマ字入力を採用

⇨理由:
覚えるキーが少なくて済む(かな五十音に対し、アルファベット26字のみ。しかも実際に使用されるのは20字程度)
そのため、運指パターン・指の移動距離も少なくできる。これが大きい。
副産物として、英語入力時にもアルファベットの位置を新たに覚える必要がなくそのまま打てる。
かな入力はどうしても2レイヤーになってしまうし、そうすると裏に置く文字と表に置く文字の優先順位を付けることになります。その時点で何と言うかだいぶ色を付けた配置になってしまうというか…(そもそも分析対象となる文体によってかなり配置が大きく変わり得る)考慮すべきパターンもローマ字の比ではなく膨大で、覚えるのも時間がかかるし個人的にはハードル高く感じます。特殊な文字(促音、撥音、長音等)以外はできるだけ表レイヤーに収めて、シンプルな形にしたいなと。また、ただでさえ覚えるのが難しいにも関わらず、英語入力はまた別で配列を覚えることが必須になるのでその辺りのコストの高さも考慮しなければなりません。

③左右母子分離

⇨理由:
ローマ字入力が子音・母音を分離して規則的に五十音を表現する特性を活かし、子音と母音を片手ずつに分けることで、左右交互で打てる為、シンプルでわかりやすくパターン化しやすい。基本的に、子音→母音→子音→母音なので、次の子音に移動する際にバッファが生まれる。

またもし左右に母音を散らせる場合、アルペジオ(片手の異なる指で片方向に打つこと)を考慮したつくりになるわけだが、どうしてもアルペジオな語とそうでない語が生まれる。つまり打鍵のリズムや速度に差が生まれる(打ちやすいものとそうでないものが生まれる)わけだが、その優劣は子音レベルとかではなく、1モーラ・2モーラ単位等の具体的な語の連なりで頻度分析した順位に依存してしまう。これはかなり局所最適に走り過ぎている気がする。(分析対象となる文章や時代によって頻出の文体が変化するとかなり配置が大きく変わってしまう。かな配列も同様のことが言える。)とはいえ、その局所最適の結果トータルで改善するなら良いのではという反論もありそうだ。たしかにそれはYESなのだが、私がそもそも理想とする配列はどんな文章も同じくらいの負荷で入力できるもので、入力負荷がユーザーの打つ文章傾向によって大きくは変わらないものであってほしいという考えがある。これは配列がユーザーの言語化をサポートする道具であり、配列が求める打ちやすい文章をユーザーに押し付けることは可能な限りあってはならないと考えるからである。その観点で、左右母子分離はそのような優劣がつきにくく(=左右母子分離は、子音同士・母音同士の連接頻度というより抽象度の高い所での最適化になるため。)、常に一定の打ちやすさを実現できる為、より多くのユーザーに受け入れられやすく、時代の変化にも強いというメリットが確保できる。デメリットは、アルペジオを利用した局所最適による高速打鍵は望めないこと。しかし、左右交互でも同手内のフローを最適化することで可能な限り高速動作を可能にしたい。そんな感じだ。

④左手に子音、右手に母音

⇨理由:
以下の記事が参考になりますが、現在の多くの人類が共通して持っている感覚として、時間軸は左から右に流れるというものがあり、言語も左から右に読み書きされるものが多い。(右から左に流れる言語圏もある。アラビア語圏など)また時計やグラフなども多くは左から右に進む。
日本語も現在は左から右に流れる言語の為、子音→母音と左から右に流れた方が流れの感覚として自然な為そのようにします。

さらに、母音はローマ字入力において最頻出である(a:1位, o:2位, i:3位, u:4位, e:8位)為、利き手に担当させた方がキー入力のリズムを気持ちよくキープできるのではないかということもあります。実際利き手の多い右手の方がリズムを取りやすいというエビデンスもあるようです。
https://www.sciencedirect.com/science/article/abs/pii/S0167945707000875
https://pubmed.ncbi.nlm.nih.gov/15215068/

またリズムに関連して、弦楽器のほとんどが左手で押弦し、右手で鳴らすということがあります。左手で子音の形を作り(≒押弦)、右手の母音で鳴らす(≒撥弦)と捉えることもできそうな..

右利きが多いので器用な右手で種類の多い子音を担当させるというのも理解はできるのですが、

xで小指下段は左右どちらが押しやすいかという、アンケートを取ってみたところ

左が71.4%、右が28.6%となりました。もっとも母数が少なすぎる(7名)ので、信憑性はないが、7人中5人が左手の小指下段の方が押しやすいと回答。ちなみに、私も左手小指下段の方が押しやすいです。そして、大西拓磨センセも大西配列の制作編の記事にある力の入りにくさマップにて、同様に左手の小指下段の方が優位な数値を設定されている。なので、小指下段に関しては傾向的に左手の方が優位そうと言える。

そういったことを踏まえると、必ずしも一概に右手の方が器用とも言えないのではないだろうか。

だとするなら、上記の理由で左子音、右母音という選択も結構アリな気がします。

実際自分でも試してみてしっくり来たのは左子音、右母音でしたので、今回はそのようにします。

⑤ショートカットキー(ZXCV)の位置をQWERTY配列と同じ位置に固定しない

⇨理由:
ショートカットキーのために、QWERTY配列の制約を部分的に受け続けないといけないというのは納得できません。ショートカットは他のレイヤーにマクロを組んだりして、押しやすい位置に自分で再配置すればよいというスタンスを取ります。

⑥運指が自然で疲れにくい

⇨方向性としては、子音と子音の連接頻度、母音と母音の連接頻度から、左右それぞれの指の動きがスムーズになるように設計していく。しかし、正直使用しているキーボードや個人の指の長さ、訓練結果によって変わる部分なので、絶対的な正解を出すのが難しい部分です。とはいえ、各キーの位置コスト(そのキーの押しやすさ)と遷移コスト(そのキーから他のキーへの遷移のしやすさ)をすべて定義して、実際どれくらいの総コストがかかるのかを把握するのは配列を決める上で不可欠だと思いました。しかし、現状このあたりを考慮に入れた分析ツールが僕の知る限りない…。

なので、作りました。

これを使用して理想の論理配列を試行錯誤していきます。

ちなみに、今回の各コストの定義は、
Keyboardio model 100』というキーボードを基に決めています。
カラムスタッガードです。ロースタッガードの従来型のキーボードに合うかはちょっと未検証でわからないです。おすすめはカラムスタッガードです。(オーソリニアも悪くなさそうですが、未検証なのでノーコメントです)

画像
cornix LPや小人キーなども購入し使い比べましたが、私はこれが最も打ちやすく感じました。ちなみにマウスはprotoarc EM05NLがおすすめです。

⑦文字と指イメージの一致

⇨運指の自然さを重視するので精一杯かもしれないが、できれば文字と指のイメージの一致にこだわりたい。何を言っているか意味不明かもしれない。しかし、人間の各指にはそれぞれ役割があるはずで、その役割と、日本語における各子音・母音のイメージとの関連性を考慮して配置したい。では、まずその各指の役割や性質について、主観的ではあるかもしれないが、まとめてみたい。

「人指し指」
何か方向性を指したり、重要なものに最初に触れる役割。
パワーもあるし、器用で軽量性もある。

「中指」
指の中心で支点・ハブとなる役割。
安定感があり支点として支える太い力を備える。

「薬指」
独立して動きにくい分、アクセントやシンコペーション的役割を担い、
全体に新しいリズムを生むことが可能。

「小指」
普段は影で支え指全体の位置関係や空間認識をサポートする役割を持ち、人差し指や中指ほどの器用さは持たないが、その分イレギュラーな対応のカバーを行う。連続入力にはかなり弱い。

とりあえずこんな感じ。

なぜここにこだわるかと言えば、言語をタイピングするという行為は、一種の発音であり、指の踊りであり、ダンスであり、表現であるからということがある。言ってしまえば、己が表現したい世界を、指のダンスで編み出すわけである。

各指が思う存分自らの個性を発揮し、踊り輝くように文字を割り当てるのはごく自然なことではないだろうか(思想が強いかもしれない)

とりあえず、自分の理想の要件はこんな感じです。

それでできたのが『せおと配列』ってわけ

です。

画像
日本語ローマ字入力における指のフロー第一優先で設計しましたが、子音側は結果的に音の近いものが並んでおり、また母音側は「あいうえ」、vはwと清音濁音の関係(うwu/ゔvu)など、覚えやすい並びになっています。拗音が打ちやすいのも特徴的です。頻出の「YO」は最も連接頻度の高いUとアルペジオできる位置(Q)に置いています。また母音側レイヤーには、「を」「ん」「っ」「ー」等を配置し、より指の移動や連打が軽減されるように設計しています。JはZで全てカバーでき、英語でも頻度が低いので最も押しにくい位置に。ローマ字入力でほぼ使用することのないCとQは英語入力最適化と配列のデザイン性の観点で、拡張することに(詳細は後述の英語入力の比較で)。Google日本語入力のローマ字テーブルはこちら。また今回の分析テキストは大西さんのアップされているjap-n.textからjを使用せずにzでカバーするよう変更したこちらのテキストを使用しています。
画像
使用するキーを減らし、指の移動距離を最小にしたかったのでJは封印。

位置コスト(単純に押しやすい位置かどうか)だけではなく、指のフローに着目し、日本語がより自然な運指で打てるように設計しました。

画像
フロー図はこんな感じ。

人間の指は5本しかないし、指の連続運動において苦手なフロー、得意なフローというのは当然ある為、打ちやすい得意なフローには日本語表現で頻出のフローを割り当てるのが、我々の人間の指に優しい設計ということになります。逆に言えば、頻出のフローに苦手な運指が来ないよう気をつけないといけないです。

例えば、連母音だとu↔️eの連接が頻度が最も低いです。なので、最も押しにくい薬指小指に配置しています。大西配列や、ににか配列では、中指上段と中段の組み合わせを連母音の少ない組み合わせにして同指連続を減らすというアプローチでしたが、私はダイナミックな動きが可能な中指の同指連続よりも、独立した動作が苦手な薬指↔️小指の連続打鍵の方が運指コストとしては高いと判断し、このようなアプローチを取っています。勿論文字単体の頻度や、最頻出の連母音が打ちやすいかどうか等も同時に考慮しています。特に三連母音で圧倒的存在感を示すoiu 26.26% やoui 11.93%が打ちにくくならないよう気をつけました

画像

子音側も、各子音単体の頻度は勿論、各子音から各子音への連接頻度からそのフローが押しやすいフローになっているかという視点で、データとにらめっこし、実際に試打を繰り返して決めています。

その中で気付いたことですが、小指は特に連続する打鍵に弱いため(例えば小指中段に「ら」を配置すると、「られる」などが打ちにくい。)、薬指下段に配置しています。(同じ子音の連なりを分析すると ntksrhm の順に多いので、これらは小指に配置されないようにしている)

画像
画像

またeが小指であることに関連して、dの配置について。de(で)はd(だ行)で最も頻度の高い語ですが、複雑な動作が苦手な小指は左右で同時に小指を使う動作は比較的脳的なコストも少ないという体感からそこに配置しています。「です(de su)」が左右の小指→左右の薬指で打てるので、左右の指が同期しやすいというのもあります。

またwとyを母音側に配置しているのも特徴的です。
まずwはwo「を」とwa「わ」だけ一旦考慮すれば良い(whoでうぉとかもあるが頻度は少ない)ので、助詞の「を」はoの裏レイヤーに。あとは「わ」はaとアルペジオできる位置に。
yをなぜ右に置いたかといえば、左に置いてしまうと、拗音入力が難しくなってしまうからですね。左手で各子音⇒yの連続打鍵になってしまい、こうすると全ての子音からyへの指の連続運動を負荷少なくするのは難しい為、yは右側に配置しました。組み合わせはya(0.36%), yu(0.36%), yo(0.97%)の3パターンなので、まずyoが打ちやすい位置を最優先に配置を考慮。中でもyouは頻出なので、これもアルペジオで打てるように考慮。yはyeもそこそこ存在する(チェック、シェア、チェア等)ので、ya,yu,yeもアルペジオ等でローコストで打てるよう考慮しました。

あと主な考慮点としては、
左は下段・中段を主戦場として設計し、右は中段・上段を主戦場としたこと。意図としては簡単で、指が上段・下段に可能な限り散らばらないようにしたかったからです。左を中段・上段を主戦場にしなかったのは、「上段→下段」は「下段→上段」より難しいからということと、子音の数的な問題ですね。

そして、文字と指イメージの一致についても、運指効率を最優先としながらも違和感が生まれない範囲で一通り考慮した配列になっています。

人差し指にはパンチ力のある子音t,k,pを。
中指にはハブ的・繋がりの役割を司る、n(~の、~に、~な)、h(~は、~へ)、音としても太さを感じるm
薬指にはシンコペーション的役割のz,r
小指には例外的役割としてd,b

コスト定義は自分の環境にはなりますが、解析結果としてはこのような形となりました。

画像

せおと配列の特徴は上記を見ると、95%タイル値(全体の95%がこのコスト以下に収まるという値)の低さ、標準偏差(打鍵コストのばらつき)の低さだと思います。また、コスト分布のグラフを観てもらえば一目瞭然ですが、コスト低→高に向けてなだらかに数値が減っています。(※低いか高いかこれだけ見ても判断つかないと思いますので後述の大西配列との比較をご覧ください)

つまり、設計当初の目的であった『長く走れる設計』になっていると思います。難しい運指が少なく、コストのばらつきも少ないので一定のリズムで打ち続けることができます。

最後に、
「せおと配列」という配列名に込めた思いを綴っておくと

自然な運指で、
コロコロと流れる瀬音のように
軽やかにリズミカルに日本語を紡げますように。

という感じです。

一定のリズムで流れ続ける川瀬の音をイメージというのもありますし、
指の動作によって音や世界を紡ぎ出すある種の表現技法でもあるということを暗に示したかったというのがあります。

ざっとこんなところです。

今回この配列に至るまでかなり試行錯誤を繰り返しており(何度もこれで完璧なはず!と覚えて打鍵し、実際に打っていくと違和感を感じ、そこから仮説を立て検証し修正し覚え直しの繰り返し…)、考慮点は山程あるので全て書くのは大変なのでちょっと割愛しますが、一応特徴的な部分をまとめてみます。(細かい試行錯誤はXに書いているのでそちらを是非…)

大西配列との比較

結構似てるようで全然似てないです。
とりあえず、共通点と違いをまとめてみました。

〈共通点〉
✅️ローマ字入力
✅️左右母子分離

〈異なる点〉
✅️yが母音側にあり拗音入力がラクな配置になっている
✅️「よ」は一打で入力できるよう配置し、頻出の「you」がアルペジオで入力可能。
✅️wが母音側にあり、わ(wa)はアルペジオで、を(wo)はoの下層レイヤーで打ちやすい。
✅️zは母音側ではなく子音側に位置し、ザ行が打ちにくいということもない
✅️指の移動距離を削減する為、jはzで全てカバーする想定
✅️ZXCV保存の制約を排除(自由に他レイヤー等に再配置できる為)
✅️「指の苦手なフローを減らす」設計(子音同士の繋がりを分析し、子音側の指の遷移コストが最小になるよう、keyflow analyzerと実際の入力体験によるフィードバックから運指設計。大西配列は母子合わせた時の連続した2打の指の連続使用を回避することしか考慮していない。)特に人差し指内側の上下段は基本一切使用しない設計。
✅️左子音、右母音(科学的にもリズムを取るのが得意とされる利き手に母音、また時間の概念が左から右に流れる感覚に合わせて子音→母音となるよう配置)
✅️「ん」「っ」「ー」「を」は母音側の下層レイヤーに配置し、同じキーの連続入力によるリズムの崩れや入力負荷減少を図っている
✅️wとvの清音濁音の関係も考慮し両者を母音側に配置・デザインしている
✅️各文字の持つイメージと、各指の持つイメージが大きく乖離しないよう配置
✅️大西配列はIME無拡張による可搬性の高さがある一方で、せおと配列は無拡張ではないがその分英語入力の性能が向上している

また以下の分析結果については、前提となるコスト値も私個人の環境における主観値ですので、絶対的な比較にならないです。それに大西配列ではショートカットキー保存を実現しているので、QWERTY配列からの移行のしやすさや、清音濁音の配置の覚えやすさという数値で表れないメリットがあるので、そこも十分考慮されてください。

画像
画像
画像

英語入力の比較

※評価用テキストは、『罪と罰』英語版 全文約113万字 を使用。

~せおと配列~

画像
せおと配列の日本語ローマ字入力で使用しないJ、Xの頻度が英語でも低頻度であることを知り、これはうまく調整すれば英語の入力性能も高められそうだということで、(C=K, Q=YO)のローマ字テーブル拡張をする発想に至りました。英語ではKよりもCの方が頻出である為、日本語入力では使用することがないCをKとして入力できるようにし、Uとの連接が殆どであるQにYOを割り当てる(日本語でもyouは頻出)というローマ字入力側の調整を行い、人指し指内側列の上下段の使用頻度を下げることで、英語入力でも低負荷な設計になりました。また普段ローマ字入力で使わないC,Qのみの拡張なので同じIMEの設定で他のキーボードや他のユーザとも共有できるのも強みです。
画像
画像

~大西配列~

画像
画像
画像

~Dovrak配列~

画像
画像
画像

~QWERTY配列~

画像
画像
画像

あとがき

細かい経緯は省きますが、ここに辿り着くまでトライ&エラーの連続でした(といっても配列を作ってみようと思い立って3週間程度ではあるが…)
途中で分析ツールの開発に乗り出し、Keyflow Analyzerができてからは、コスト値のシミュレーションが容易になり、配置の組み合わせパターンを色々試すのがかなり楽になりました。

皆さんも興味があればぜひ論理配列の開発のお供にお使いください。


いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
『せおと配列』を作った話 ~ボクの最強配列~|koyasi777
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1