TRONかな配列を中指シフト化してみた

名付けて「中トロ配列」。*1
かな入力を導入しようと思って月配列 U9 版を5日間ほど試してみたけど、これが全く慣れる気がしない。「ん」「っ」「る」「た」など語末っぽい字が人差指にあり、キーボードの外側から内側へ流れていく手の動きが脳に馴染まないようだ。そういう観点であらためて配列をサーベイしてみると、TRON キーボードのかな配列「ん」「っ」「た」「る」が小指か薬指にあり、キーボードの内側から外側へ向かう流れが馴染みやすそうな気がした。TRON 配列は親指シフトだが、私の親指は機能キーのワンショットモディファイヤで手一杯(指一杯)だ。そこで、月配列 U9 版の考え方を TRON 配列に適用し、中指と薬指で前置シフトする変形 TRON 配列を作ってみた。

設計方針

  • 物理形状が左右対称なキーボードを前提とする(例: NISSE, μTRON)。「左手下段は打ちにくい」といった物理形状に起因する問題を論理配列の設計に持ち込まない。
  • Google 日本語入力のローマ字カスタマイズで実装する。キーボード関係の常駐ソフトをこれ以上増やしたくない。
  • シフト方式は月配列 U9 版の考え方を採用する。[D] か [K] を押すと★面に、[S] か [L] を押すと▲面に、[D][K] か [K][D] を押すと▼面にシフトする。左右のシフトキーは区別しない(同手シフトなし)。
  • 読点は [S] と [K] の同時打ち、句点は [S] と [L] の同時打ちで入力する。[S][K] と [K][S]、 [S][L] と [L][S] をローマ字テーブルに定義しておき、どちらが先に入力されても同じ結果となるようにする。
  • 文字の並べ方は TRON 配列の考え方を採用する。原則としてアンシフト面と★面は清音、▲面は同位置の清音に対応する濁音。加えて▼シフト面を設け、低頻度文字と、4ストローク以上となる一部拗音の救済用ショートカットを置く。

定量評価


左が段列ごとの負担率、右がキーごとの負担率。なかなか良いバランスになったと思う。他の配列との比較は後日。

月配列の導入を検討する

日本語入力方法として、10年前までは自作の行段系8母音ローマ字配列「やつがしら」を使っていたが、ここ10年は普通のローマ字入力を少しだけ拡張した配列(「ん」「っ」「ー」を専用キー1打で、拗音を2打で打てるように拡張したもの)に戻っていた。しかし、やはりローマ字では快適さに限界がある。ここらでローマ字入力に見切りをつけて、かな入力の導入を検討しよう。

要件

  • 現在使用しているキーボード(次の3種類)のどれでも使えること。
  • IMEのローマ字カスタマイズだけで実装できること。

以上の要件を満たすのは中指逐次シフトの月配列系である。

既存手法の評価

月配列系は各作者が数値評価を行っているが、どれもサンプルが小さすぎてアテにならない。そこで、国立国語研究所現代日本語書き言葉均衡コーパスを使って既存の配列を再評価した。ただし、当該コーパスの全データを入手するには利用契約が必要で面倒なので、ここではBCCWJ長単位語彙表 (Version 1.1) のうち度数22以上の約10万語彙をサンプルとして使った。原文ではなく単語ごとの頻度表なので、単語内の運指は考慮されるが、単語をまたぐ運指は考慮されない。
結果は次のとおり。表の一番右の列は指ごとの負担率を示す。

どの配列も作者のノウハウが注ぎ込まれているわけだが、やはり作者ごとに異なる設計思想が透けて見える。なかでも、濁音を清音と同じ位置に置くか別の位置に置くかが大きな分かれ道のようだ。

方針

評価結果を踏まえて自分がどこから始めるかを考えているが…うーむ。
まぁ、どうせ後から自己流カスタマイズに走るだろうし、とりあえずは初めてのかな入力ということで、覚えやすそうな清濁同位置の「月配列 U9」を採用してみようかな。

評価プログラム

エスリルさんの比較ツール改造したもの

後者のページには初期値としてBCCWJ短単位語彙表 (Version 1.1) のうち度数555以上の約1万語彙が入力されている。かな配列はHTML内にハードコーディングされている。

Phase 25e

NISSE のファームウェア側でワンショットモディファイヤを処理するバージョン。

  • 上がキーボード単体、下がのどかを通したあとの仮想キー。見てのとおり、のどかの仕事は非常に少ない。
  • ファームウェア v0.22 で Fn+[ 6 ] = [F6] のようなマッピングをすると Fn+[F6] と見なされて NISSE のモード切り替えが行われてしまう。これを回避するため、Fn 面にファンクションキーを含む割り当てをしないようにした。
  • ファームウェアでは Alt+Tab のエミュレーションができないので Alt+Esc とした。
  • 記号キーの [-_] と [/?] を入れ替えた。

ダウンロード

エスリル NISSE ファームウェア改造ガイド (5)

エスリル ニューキーボード − NISSEファームウェアを自分用に改造するメモ。

7. Fn キーをワンショットモディファイヤ化する(続)

NISSE の Fn キーをワンショットモディファイヤ化して、単独で押して放したときは別のキーとして働くようにしたい。具体的には、[左Fn] の単打を [F14] に、[右Fn] の単打を [F13] にしたい。…という話を開発者の岡坂さんに提案したところ、Bluetooth 版の開発に合わせて実装してくださった。というわけで早速(14か月経った今日)この変更を取り込んでみた。Fn 面のマッピングPhase 25c をベースとして若干変更してある。

実は前回の記事で書いたとおり、ワンショットモディファイヤをドライバ側で(のどかを使って)実現することはできているのだが、あの実装には問題があった。たとえば Fn+[ J ] を [←] に、[Fn] の単打を [英数] にマッピングしたとする。このとき、[Fn] を押しながら [ J ] を押したら [←] が入力されてほしい。一方、[ J ] を押しながら(放す前に) [Fn] を押したら [英数] が入力されてほしい。前回の実装では後者の場合にも [←] が入力されてしまい、文章入力中に文字キーと Fn キーがロールオーバーすると意図しない挙動が発生してしばしば混乱した。

今回ワンショットモディファイヤをキーボード側で実装したことでこの問題が解決することを期待していたのだが……、試してみた結果、今回の実装では解決しなかった。ソースを読むと確かに、キーが押された順番を判定するロジックは入っていないようだ。うーむ、ならばいっそ、キーボード側では Fn キーをモディファイヤではない普通のキーにしちゃって、完全にドライバ側だけでモディファイヤ化する作戦の方がスッキリしそうだなぁ…。

11/11 追記

問題を明確にするためにタイミングチャートを描いてみた。「HHKB ProJP+のどか」が理想の挙動、「NISSE v0.19-mobitan+のどか」が前回の実装、「NISSE v0.21 CXモード」が今回の実装だ(v0.22 も同じ挙動)。NISSE は [ J ] を押しながら(放す前に) [Fn] を押したら [←] が入力されてしまうことがわかる。

11/12追記

開発者の岡坂さんに報告したところ、「NISSEのCXモードの実装については、現在の動作が弊社の意図どおりの動作となっております」とのご回答をいただけた。なるほど。

Phase 25c

その後もいろいろ試行錯誤した結果、NISSE はこの配列に落ち着いた。

  • 内側3個ずつ計6個の親指キーの役割は結局、ほぼ左右対称になった。左右の [Space] は両方とも単独のスペースキーで、日本語入力中は変換キーになる。左右の [Fn/Mod1] は単打でそれぞれ [英数] [かな] となり、日本語入力中に打てば確定操作とモード変更を同時に行う。
  • 左手親指に [BS] を置いていない。15年来の慣習を破った形だ。[Space] か [Fn/Mod1] の位置に [BS] を置ければそれに越したことはないのだが、この2キーは使用頻度上どうしても [Space] と [Fn/Mod1] に割り当てざるをえず、その外側に [BS] が追いやられてしまう。すると、そこまで親指を動かすよりは Fn+[ S ] の方が打ちやすいということになり、左親指に [BS] がなくてもさほど困らないということが分かった。むしろ、単独の [BS], [Enter], [Del] をすべて右手に配置したことで、左手の Fn+[ S ]=[BS], Fn+[ D ]=[Enter], Fn+[ F ]=[Del] と合わせ、どちらの手でも [BS], [Enter], [Del] を打てるようになったことのメリットが大きい。
  • 記号キーの ['"] と [\|] をこっそり入れ替えた。正規表現を手書きする(「\」を多用する)より英語口語文を書く(「'」を多用する)ことが増えたので。

Phase 25a for Keyboardio

4月発送予定(ほんまかいな)の Keyboardioマッピング案もついでに描いてみた。

  • 親指の付け根に Fn キーが独立しているとはいえ、それを含めて64キーってのはさすがにキー数の限界を下方突破してる。Alt キーを左右に置けないどころか、独立した Ctrl キーを置くことすらままならない状況だ。どうすんだこれ…

こうなったらもう、数字キーを Mod2 に追い出してしまおうか。この方がまだ健康で文化的なキー割り当てができる気がするぞ。

Phase 25a

ちょうど昨日から使い始めた ThinkPad Yoga 260 用と合わせて、NISSE, μTRON, OADG の3種類のキーボードに共通のキー配列を決めた。

要件
  • 親指にモディファイヤ Mod1 を置き、Mod1+[文字キー] ですべてのキー操作ができること。
  • Mod1+[文字キー] は片手で操作できること。つまり、左右どちらの親指でも [Mod1] が押せること。
  • 英文入力のために、左右どちらの親指でもスペースが入力できること。できれば KeyDown でスペースが入力されるよう、[Space] はワンショットモディファイヤ化しないのが望ましい。
  • マウスを左右どちらの手で持ってもいいように、マウスと併用する主な編集操作(Delete や Ctrl+C など)は左手側と右手側にそれぞれ配置したい。
  • [Ctrl], [Shift], [Alt] はマウスと併用する場合があるので、少なくとも各1個は単独の(ワンショットモディファイヤでない)キーとして配置すること。
  • [Win] はランチャーとして使うので、左右両方の押しやすい位置に配置したい。
図の凡例
  • [英数]: 日本語入力 off (変換中の場合は全文確定してから日本語入力 off)
  • [かな]: 日本語入力 on (変換中の場合は全文確定)
  • [和文]: ATOK の英語入力モード off
  • [英文]: ATOK の英語入力モード on

NISSE

  • NISSE はファームウェアを改造して [Shift] と [Fn] の位置を入れ替え、さらに [左Fn], [右Fn] が押されている間それぞれ [F14], [F13] を吐くようにしてある。これをのどかで検出してワンショットモディファイヤ Mod1 とする。
  • 英文入力のために両親指に Space を配置するが、左が普通の [Space] なのに対し、右は [Shift+Space] になっている。なぜかというと、ATOK で Shift+Space を 「全文確定」に割り当てておき、和文入力時に「左親指で変換→右親指で確定」という流れに持ち込むため。確定直後に左親指で [英数/Mod1] を押すことが多いので、この「左で変換、右で確定」という配置は理に適っている。
  • [Alt+F4] はキーボードの縁に指を添えてバシッと叩くので右上隅に存在しなければならない。このキーはめちゃめちゃ頻繁に使うので Mod1 に重ねることは不可能。
  • [Shift+Space] と [Alt+F4] を単独キーとして確保すると、それだけでキー数が限界に達してしまう*1。ファンクションキー込みで76キーという仕様はどう考えてもタイトすぎる。せめて80キーは欲しかった*2

μTRON

  • μTRON はファンクションキー抜きで76キーあり、左下と右下の10個*3を除いても NISSE より2キー多い。おかげで [Alt] と [BS] を左右に配置できた。

ThinkPad

  • ThinkPad はファンクションキー込みで89キー。しかし親指領域で常用できるキーは4個しかない。
  • 左右両方の親指で打てるのは [Space] だけなので、[Mod1] は [Space] にワンショットモディファイヤとして重ねるしかない。KeyDown でスペースが入力されなくなって英文入力速度が落ちるが、やむを得ない*4
  • [変換] の位置に [かな] を、[ひらがな] の位置に [英数] を配置した。確定は [かな] または [英数] で行う。
    • 今まで [変換] の位置に単独の [Shift+Space] を配置して KeyDown でスペースを入力できるようにしていたのは廃止。結局あまり使わなかったのと、[英数] が [左Alt] の位置まで追いやられてキーボードによっては*5誤打多発してたので。
  • 右手親指の [かな] と [英数] を両方ともワンショットモディファイヤ化して [Ctrl] と [Shift] を重ねてみた。
    • 今まで [ : ] の位置に単独の [Shift] を、[\] の位置にワンショットの [Ctrl] を配置してたのは廃止。文字キーをワンショットモディファイヤ化するのは意外なほど弊害が大きかったので。
  • 白いキーは割り当て未定。右側に [BS] が欲いんだよね…。

ダウンロード

OADG キーボード用が欲しい人はコメントください。

*1:Fn キーのワンショットモディファイヤ化改造後でこの有様なので、改造前はキー数の余裕が本当にゼロだったということ。

*2:[ 1 ] の左と [ 0 ] の右に2キーずつ追加するだけでいい。基板のスペースには余裕がある。

*3:[Fn], [Home], [End], [PgUp], [PgDn], [←], [→], [↑], [↓], [TRON]

*4:[無変換] と [ひらがな] の位置まで [Mod1] を引っ込めるのは論外。

*5:特に Microsoft Surface のキーボードとか