見出し画像

【タイパー×新配列の世界】シンプルで高速なかな入力配列を作りたい

こんにちは。鉄馬です。本記事はタイパーAdvent Calendar 2025の17日目の記事です。

去年のタイパーAdvent Calendarの記事はこちら:

前回の記事は、たのんさんの「Steamにあるタイピングゲームの紹介」でした。

明日12/18の記事は、3の倍数さんの「Typing ChallengeCup for University レポート!!」の予定です。

本記事では、タイパーに多く使われている新配列である月配列と、私が今制作しているかな入力配列について書きます。配列は制作途中なので荒削りな部分が多々ありますが、温かい目で見ていただければと思います。

まえがき

日本語で文章をタイピングする標準的な方法には、QWERTY配列を使ったローマ字入力や、JISかな配列を使ったかな入力があります。タイピングゲームで使われているのも主にこの2つですが、日本語を入力するための方法は他にも色々あります。

例えば先月、標準配列(QWERTYローマ字、JISかな、フリック入力)禁止のタイピングコンテスト「Alternative Typing Contest 2025」が開催され、41名の新配列使用者が競い合いました。多様な配列を見ることができる面白い動画になっているので、興味のある方はぜひご覧になってください。

私も月配列2-263式という配列でコンテストに参加しました。参加後、いくつかの配列について調べていたところ良いアイデアが浮かんだので、前々からやろうと思っていた配列制作に着手してみることにしました。

月配列とは

まず、月配列(2-263式)について簡単に説明します。月配列は、kキーとdキーを前置シフトに使うかな入力配列です。配列図は以下の通りです。

単打(そのまま打つ)
そこしてょ つんいのりち
はか☆とた くう★゛きれ
すけになさ っる、。゜・

シフト(☆または★を打った後に打つ)
ぁひほふめ ぬえみやぇ「
ぃをらあよ まおもわゆ」
ぅへせゅゃ むろねーぉ

参考: 「月」 --- 中指シフト新JIS配列

かな入力では少なくとも50程度のかなを配置する必要があります。そのため、JISかなのように広いキー範囲を使わないのであれば、収まらないかなを何らかのシフト方式で打てるようにする必要があります。前置シフトはシフト方式の一種で、打ちたいかなの前にシフトキーを押して入力します。例えば月配列では、f=「と」、kf=「あ」のように入力できます。

月配列の実績

月配列は、かな入力の新配列の中ではタイピングゲームで最も実績のある配列です。例えば、タイプウェル国語KでZFさんが基本常用語ZFを記録しています。他にもフィスティさん、んみょさん、オーユーさんなど、Zタイパー・Zホルダーが複数名います。

  • ZFさん タイプウェル国語K総合ZG(ZF/ZH/ZF/ZH)

  • フィスティさん タイプウェル国語K総合ZH(ZG/ZI/ZG/ZI)

  • んみょさん タイプウェル国語K総合ZI(ZH/XX/ZI/ZJ)

    • e-typing腕試しK 475pt

  • オーユーさん タイプウェル国語K総合XS(ZJ/XA/XX/XB)

月配列の弱点?

さて、そんな月配列にも欠点がない訳ではありません。分かりやすい短所としては以下があります。

  • っょ以外の小書き(ゃゅぁぃぅぇぉ)や長音(ー)が2打鍵であるため拗音や外来音の入力に弱い

  • 交互打鍵指向のため、ロールオーバー打ちできる箇所が多くはない

上に挙げた4名の方のタイプウェルの記録を見ると、基本常用語と漢字(ランク表記の1番目と3番目)の記録に対して、カタカナ語と慣こと(ランク表記の2番目と4番目)の記録は2ランク程度差があることが分かります。詳しい分析はできていないのですが、カタカナ語については1番目の弱点が影響していそうです。

このように、実績のある月配列にもまだまだ伸び代があります。実は、月配列には本家である2-263式を改良した様々な派生配列があります。月配列の派生については、大岡さんの以下の記事に詳しいです。

【配列】月配列一覧: 大岡俊彦の作品置き場

試作中の配列について

今試作中の配列を紹介します。

配列図

画像

月系配列である月見草配列月林檎配列を参考に、薙刀式の濁音・拗音・外来音同置のアイデアを取り入れた、新しい月配列です。

実装

ひとまず、Google日本語入力のローマ字テーブルで実装しています。

ローマ字テーブル(20251216アドカレ版)

入力方法

単打以外に配置されているかなをマイナーかなと呼ぶこととします。

基本

「ゃ」「ゅ」「ょ」「゛」の4キーを後置シフト、Shiftキーを通常のシフトとして使います。具体的な入力方法は、次の通りです。「ゃ」は濁点、「ょ」は半濁点を兼用しています。

  • 単打に書かれているかなは、キーをそのまま押して入力します。

  • ゅ後置シフトのかなは、キーを押したあとに「ゅ」を押して入力します。

  • ょ後置シフトのかなは、キーを押したあとに「ょ」を押して入力します。

  • 拗音は、かなを入力してから「ゃ」「ゅ」「ょ」を押して入力します。

  • 濁音は、かなを入力してから「ゃ」または「゛」を押して入力します。

  • 半濁音は、かなを入力してから「ょ」を押して入力します。

  • 外来音に使う母音の小書きは、Shiftキーを押しながら母音のかなを押して入力します。

シフトの省略

拗音、濁音、半濁音、外来音の入力でマイナーかなを使う場合は、シフトを省略して入力します。

拗音のShiftキー省略 Shift + る(u) = ち のとき、る(u) + ゃ = ちゃ
濁音の後置シフト省略 い(;) + ゅ(d) = ほ のとき、い(;) + ゛(l) = ぼ
半濁音の後置シフト省略 い(;) + ゅ(d) = ほ のとき、い(;) + ゜(k) = ぽ
外来音の後置シフト省略 な(g) + ゅ(d) = ふ のとき、Shift + な(g) = ふ

例外など

入力方法について、いくつかの例外があります。

  • 濁音にも拗音にもなるかな(「き」「し」「ち」「ひ」)を濁音化する場合は、「゛」キーを使用します。

  • 「ぴ」は「ひ」+「ょ」で入力できないため、代わりに「は」+「ゅ」で入力します。

  • マイナーイ段かな(「ひ」「み」「り」)を単体で入力する場合は、Shiftキーを使用します。

Shiftキーを押すタイミングは、ある程度融通が効くようになっています。Shiftキーの面の空いている箇所は、単打と同じキーが配置されているからです。例えば「てぃ」は、「て + Shift(い)」の他に「Shift(て + い)」でも入力できます。

設計方針

次のような設計方針で作っています。

  • 主にJISキーボードで使うことを想定する。

  • 3行10列の30キーに収める。

  • タイピングゲームでの高速な打鍵を実現しつつ、普段使いで一般的な日本語の文章も打てるようにする。

  • 濁音になるかなを排他的に配置し、濁音を2打で打つ。

  • 拗音になるかなを排他的に配置し、拗音を2打で打つ(濁音・半濁音の拗音は3打)。

  • 外来音になるかなを排他的に配置し、外来音をShiftキー込みで3打で打つ(濁音・半濁音の外来音は4打)。

  • ゃゅょをシフトキーと兼用して、単打に配置できるかなを増やして打鍵効率を上げる。また、ゃゅょ゛の4シフトで、シフトキーに打鍵が集中するのを防ぐ。

JISキーボードを想定しているのは、タイパーはJISキーボードを使うことが多く、また速度を求める上で手軽に色々なキーボードを行き来できるようにするためです。

30キーに収める理由の一つはシンプルにするため、もう一つは30キーの分割キーボードでも使えるようにしたかったためです。ただ、JISキーボードの11列目の@位置や:位置は10列目の/位置より打ちやすく感じることも多く、本家月配列はそれら使った32キーなので、今後増やす可能性もあります。

配列の作り方

速く打てる文字列とは

高速な打鍵を実現するためには、どのような打鍵列が速く打てるのかを理解する必要があります。タイパーの経験則、あるいは一般論として、速く打てる/速く打てない文字列の特徴として次のようなものがあると思います。

  • アルペジオ(片手同一方向への打鍵)が多い←→アルペジオが少ない

  • 左右の手をちょうどよく使う←→左右どちらかの手をよく使う

  • 色々な指を使う←→同じ指をよく使う

  • 人差し指や中指などの強い指を多く使う←→薬指や小指など弱い指を多く使う

  • 手の移動(段飛ばしなど)が少ない←→手の移動が多い

配列の良さを評価するためには、これらをどの程度重みづけして加点・減点するかを考える必要があるわけですが、バランスを考えるのが難しいです。そこで、ある文字列を打つのにかかる時間を予測する打鍵モデルを作り、その時間を最小化するような配列を見つけることにします。

打鍵モデルを作る

タイパーによる打鍵時間を予測する取り組みには、私が知っている範囲ではparaphrohnさんの以下の記事があります。W/Hさんも同様のモデルを作成されているようです。

講演:最適化について再考する | 化学日記

詳細は分からなかったので、参考にしながら作りました。4種類、計10個のパラメータを使って打鍵時間を計算します。

計算式はこちら: https://github.com/tekihei2317/haduki-layout/blob/a264599fe2dd74d08725b0df0ddb22cda57ef97c/packages/cli/stroke-time.ts#L186-L244

パラメータの種類は、打鍵時間、手の交代、同指連続のペナルティ、手の移動です。打鍵時間と同指連続のペナルティは、小指〜人差し指の各指に設定します。

  • 打鍵時間(push): キーを押すのにかかる時間。

  • 手の交代(alt): 片方の手でキーを打ってから、もう一方の手でキーを押し始めるまでにかかる時間。

  • 同指連続のペナルティ(penalty): 同じ指を使う場合に加算する時間。

  • 手の移動(move): 片方の手について、最後に打ったキーから次のキーを打ち始めるまでの手の移動にかかる時間

計算は大体次のようなイメージです。同指連続と手の移動については、直前に打ったキーだけでなく、関連するキーが一つ飛ばしになる場合も減衰させて(0.3をかけて)加算するようにしています。

more 7934
= push(7)
+ move(m, o) + push(9)
+ alt + push(3)
+ move(r, e) + push(4)

make 7183
= push(7)
+ alt + push(1)
+ alt + move(m, k)*0.3 + push(8)
+ alt + move(a, e)*0.3 + push(3)

keep 8339
= push(8)
+ alt + push(3)
+ penalty(3) + push(3)
+ alt + push(9)

very 4347
= push(4)
+ move(v, e) + push(3)
+ move(e, r) + penalty(4)*0.3 + push(4)
+ alt + push(7)

手の移動についてはかなり簡略化しており、指の長さ考慮した移動距離に比例定数をかけるようにしています(move(from, to) = M * distance(from, to))。これについては2-gramの打鍵時間を計測する方がより正確になると思います。

各パラメータの値は、Type Darkerで自分の打鍵データを見ながら適当に決め、monkeytypeの単語の主観的な打ちやすさとある程度一致するように調整しました(ガバガバです)

配列を探す

あるデータセットを対象に、打鍵時間が最小になるような配列を計算によって求めます。n-gramデータは、漢直WSの作者の岡さんが公開しているWikipediaのデータを使用させていただきました。

oktopus1959/wikipedia_ja_ngram: 日本語Wikipediaからひらがなのn-gramを抽出しました

配列の探索は今実装しているところで、現時点で見つかっている一番いい配列に少し手を加えたのが、最初に提示した配列です。ヒューリスティック探索は全く詳しくないので、AIが頑張って実装しています。

課題

山積みです。

  • より良い打鍵モデルを作る

  • 定量評価や、他の配列との比較をする

  • データセットの改善、Wikipedia以外の敬体の文章を入れたり、タイプウェルの単語を対象にしたり…

  • 探索アルゴリズムの改善

  • 各OSの配列変更ソフトで実装する

    • シフトキーの後置にかなを配置するかどうかも考える

今年のアドカレ13日目のRyudeさんの記事「海外キーボードレイアウトコミュニティの紹介(英語新配列の最新動向)」では、日本語新配列コミュニティの弱みとして「キーボード配列の定量評価や、タイピング動作のモデル化の精度といった点で英語圏と比較して大きく水をあけられてしまっている」と書かれています。

この原因は、英語配列はアルファベットの配置を決めるルールは共通のため「速さ」と「楽さ」がある程度一致するのに対して、日本語では打鍵数を減らして楽に打つという選択肢があるからなのかなと考えています。もちろん、タイピングの目的は速く打つことだけではないので、日本語新配列の進化も妥当だと言えるでしょう。

一方で、順次打鍵を基本として速さを追求する傾向がある月系配列は、この問題と親和性が高く、特にタイパーとしては正面から受け止める必要があるテーマだと感じています。英語圏の情報も参考にしながらより良い配列を作っていきたいです。

おわりに

最後に、新配列でタイピングゲームをする魅力について書いてみます。

別の配列を使うことは、アクションゲームを別のキャラクターを選んで遊ぶことに似ています。新配列を使うと、いつも遊んでいるタイピングゲームでも、操作感が変わることで違った楽しみを味わえたり、タイピング自体への理解が深まることもあります。

そして次に、打鍵回数がローマ字入力より少ないため、練習を積めばローマ字入力より速く打てる可能性が十分にある点です。もちろん、ローマ字入力は打鍵パターンが(相対的に)少ないため単純な比較はできないですが、一般的なかな配列を使うと、ローマ字入力と比較して20%ほど打鍵回数を削減できます。

他にも、普段使う入力方法を自分の手で選んだり作ったりする楽しさがあります。既存の配列を試したり、自分なりに改良したり、新しい配列を考えたりと、色々遊べます。タイパー×新配列の世界は、まだまだ未開拓です。ぜひ遊んでみましょう。


それでは、最後までお読みいただきありがとうございました。感想、アドバイス等いただけると嬉しいです。

少し気が早いかもしれませんが、皆さま良い年末年始をお過ごしください。タイパーの皆さまは、良きタイピングライフを!

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

この記事が参加している募集

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
買うたび 抽選 ※条件・上限あり \note クリエイター感謝祭ポイントバックキャンペーン/最大全額もどってくる! 12.1 月〜1.14 水 まで
【タイパー×新配列の世界】シンプルで高速なかな入力配列を作りたい|鉄馬(tekihei2317)
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