2015年7月アーカイブ錬金術師の実験室ようこそ、錬金術師の実験室へ。ここには、得体のしれない入力方式の材料がごろごろころがっています。トラックバック(0)20年前の宿題この難問にぶつかったのは、かれこれ20年ほど前の漢直オフの席上だったように記憶している。95が出るか出ないかという頃の話だから、NIFTY-Serveのキーボード会議室(FKEYBORD)だったかもしれない。親指シフトを使っているライターの方からの「漢直をやってみたいが仮名が2ストロークになるのは困る。何とかならないか」という要望を聞いて、何とかならないだろうかと考えてみた。「仮名は親指シフトで漢字は2ストローク直接入力」というのは、ちょっと無理な話だ。普通に考えれば、親指シフトモードと漢直モードを切り換えるとか、漢直の打鍵を何か別のキーでシフトするとかしなければならないだろう。それを実際に試したのは、1999年の12月。キー入力をフックしてIMEの未変換文字列に文字を送り込む「漢ナビ」という自作ソフトを改造して、仮名を(無変換/変換で)親指シフト入力し、スペースとの同時打鍵を漢直の第1打鍵とするように設定していた。発作的に親指シフトの練習を始めてから一ヶ月あまりが過ぎた。今では仮名の入力にはG-Codeを使わず、親指シフト+漢直+仮名漢で入力できるようになっている。漢字の打鍵は少し重くなったが、予想していたほど気にならない。親指シフト抜きのG-Codeを使ったときに、漢字を直接入力しようとして、ついうっかりスペースを同時打鍵してしまうほどだ。〔「G-Code」日記(第41回)〕しかし、その半年後には、こんなことを書いているので、あまり使いやすくなくて、やめてしまったようだ。以前、親指シフトとG-Codeの組み合わせを試したことがある。仮名の入力を楽にしようと思ったからだ。親指シフトは普通通りに(無変換/変換キーを親指シフトキーとして)打鍵し、漢字はG-Codeで(第1打鍵をスペースと同時打鍵して)直接入力する。確かに仮名の入力は楽になったが、漢字の入力が少し重くなることと、G-Codeで仮名と記号を割り当てた中段・上段の左右交互打鍵が遊んでしまうのが難点だった。(2000-06-12)〕おそらく親指シフトユーザーにとっては、漢直の第1打を親指でシフトするぐらいは何でもないことだろう。ところが、それまで漢直のリズムに慣れていた僕には、その違いが大きかったのだと思う。先日、「そこで仮名漢直ですよ。」を書いたときには、もちろんこの宿題のことが念頭にあった。最初は親指シフトでも試してみようとしたけれども、いくつか難点があったのでJIS仮名を使って実験してみたのだ。2文字以上続く漢字(熟語)のストロークを仮名表記にすると、既存の「読み」と衝突することはめったにない。仮名漢直は、その「読み」を使ってユーザー辞書に登録することで仮名入力と漢直を併用する方法だ。読みの中に句読点が入っていると期待通りに変換されないおそれがある。「読み」の中に句読点やカンマ・ピリオドが入っていても正常に変換できるかどうかを試してみたところ、結果は以下のようになった。よみ」等の特定の品詞でしか変換できない登録できても打ち分けられないか、打ち分けられても登録できないかのどちらかしかない。Google日本語入力のローマ字に漢直を入れる場合は、オプションで(句読点「,.」、記号「[]/」などと)設定しておけば、ローマ字テーブルで設定した通りに句読点や記号が打ち分けられる。それなら、親指シフトの仮名配列をローマ字入力として設定してやればうまくいくのではないかと思い付いた。宿題の面白い答えがひとつ見えてきた。トラックバック(0)打鍵数は参考程度にするのがよいまず、前回の「打鍵数はこれでいいのか?」のおさらいから。「各入力方法の仕様比較」の表を、シフトを含む打鍵数で書き換えてみた。or3要するに、NICOLAはJIS仮名よりも(「を」を除く)同側シフトの仮名の分だけ打鍵数が多くなり、ローマ字入力に関しては、親指シフトキーボードとJISキーボードには何ら違いがない(元の表で省略されているのはそのためだ)。親指シフトキーボードには何の魅力もないことになる。不公平な比較アニメーションを見せられて、親指シフトキーボードに反感を抱く可能性すらある。そこで、「キーボード入力比較」のアニメーションの例文で溜飲を下げていただこう。なつのひかりもいくぶんしのぎやすくなりましたが、みなさまいかがおすごしでしょうか。ほんじつ、まごにせがまれてちかくのうみへまいりましたら、りょうしさんのいえで、とてもしんせんなひものをみつけました。あなたがおすきなのをおもいだして、おおくりいたしましたから、ごしょうみください。なまぼしもありますから、はやくおめしあがりください。とりいそぎ、おしらせまで。)((左て))(つ)((右き))(ひ)(か)((左た))((左せ))(い)(く)((右ふ))(ん)(し)((右き))((左き))((左ふ))(す)(く)((左て))((左た))((右つ))(し)(た)((右か))(、)((右は))((左て))(さ)((右つ))(い)(か)((右か))((右と))(す)((右こ))(し)((右て))(し)((右い))(う)(か)(。)(ほ)(ん)((右し))(つ)(、)((右つ))((右こ))((右ち))(せ)((右か))((右つ))((左さ))(て)(ち)(か)(く)((右き))(う)((右は))(へ)((右つ))(い)((左た))((右つ))(し)(た)(ら)(、)((左た))((右い))(う)(し)(さ)(ん)((右き))(い)((左か))((右て))(、)(と)(て)((左せ))(し)(ん)(せ)(ん)((左て))(ひ)((左せ))((右き))((左う))((右は))(つ)(け)((右つ))(し)(た)(。)((左し))((左て))(た)((右か))((右と))(す)(き)((左て))((右き))((左う))((右と))((左せ))(い)((右た))(し)(て)(、)((右と))((右と))(く)((左た))(い)(た)(し)((右つ))(し)(た)(か)(ら)(、)((右こ))(し)((右い))(う)((右は))(く)((右た))(さ)(い)(。)((左て))((右つ))((左ほ))(し)((左せ))((左し))((左た))((右つ))(す)(か)(ら)(、)(は)((左ふ))(く)((右と))(め)(し)((左し))((右か))((左た))(く)((右た))(さ)(い)(。)(と)((左た))(い)(そ)((左き))(、)((右と))(し)(ら)(せ)((右つ))((右て))(。゙)(L(ね))(と)(て)(も)(し)(ん)(せ)(ん)(な)(ひ)(も)(の)(L(わ))(み)(つ)(け)(ま)(し)(た)(。)(な)(つ)(の)(左(ら))(か)(り)(も)(い)(く)((左右(も)))(ん)(し)(の)(左(き))(右(ん))(す)(く)(な)(り)(ま)(し)(た)(右(か))(、)(右(し))(な)(さ)(ま)(い)(か)(右(か))(右(を))(す)(右(こ))(し)(右(て))(し)(ょ)(う)(か)(。)(左(ょ))(ん)(左(し))(つ)(、)(ま)(右(こ))(に)(左(に))(右(か))(ま)(れ)(て)(右(い))(か)(く)(の)(う)(右(し))(左(な))(ま)(い)(り)(ま)(し)(た)(ら)(、)(り)(ょ)(う)(し)(さ)(ん)(の)(い)(右(き))(右(て))(、)(と)(て)(も)(し)(ん)(左(に))(ん)(な)(左(ら))(も)(の)(を)(右(し))(つ)(右(の))(ま)(し)(た)(。)(あ)(な)(た)(右(か))(右(を))(す)(き)(な)(の)(を)(右(を))(も)(い)(右(た))(し)(て)(、)(右(を))(右(を))(く)(り)(い)(た)(し)(ま)(し)(た)(か)(ら)(、)(右(こ))(し)(ょ)(う)(右(し))(く)(右(た))(さ)(い)(。)(な)(ま)((左右(ょ)))(し)(も)(あ)(り)(ま)(す)(か)(ら)(、)(は)(右(ん))(く)(右(を))(右(く))(し)(あ)(右(か))(り)(く)(右(た))(さ)(い)(。)(と)(り)(い)(左(る))(左(き))(、)(右(を))(し)(ら)(左(に))(ま)(右(て))(。)(N)(母(Ai))(N)(O)(H)(I)(K)(A)(R)(I)(M)(o)(i)(K)(u)(B)(u)(子(W))(S)(i)(N)(o)(G)(i)(Y)(a)(S)(u)(K)(u)(N)(a)(R)(i)(M)(a)(S)(i)(T)(a)(G)(a)(、)(M)(I)(N)(A)(S)(A)(M)(A)(i)(K)(a)(G)(a)(o)(S)(U)(G)(O)(S)(i)(D)(e)(子(S))(o)(u)(K)(a)(子(、))(H)(On)(Z)(母(Ui))(、)(M)(A)(G)(O)(N)(i)(S)(e)(G)(a)(M)(a)(R)(e)(T)(e)(T)(I)(K)(A)(K)(u)(N)(o)(U)(M)(I)(H)(e)(M)(A)(I)(R)(i)(M)(a)(S)(i)(T)(a)(R)(a)(、)(子(R))(Ou)(S)(I)(S)(a)(子(W))(N)(o)(I)(E)(D)(e)(、)(T)(o)(T)(e)(M)(o)(S)(母(i))(S)(母(e))(N)(a)(H)(I)(M)(O)(N)(O)(W)(o)(M)(I)(T)(u)(K)(e)(M)(a)(S)(i)(T)(a)(。親指でシフトする方式なので無視するわけにもいかないと思い、TRONカナ配列とM式についても調べてみた。TRONカナ配列は、NICOLAの「清音のクロスシフトで濁音」という制約がなく、高頻度の仮名が単独打鍵となっているため、シフトを打つ回数が少ない。M式は、子音と母音の組み合わせをベースにして撥音・促音・拗音などを子音シフトと母音シフトで省打鍵化しているが、シフト回数を加算すると、その効果が相殺されている。この結果を見た限りでは、JIS仮名が最も打鍵数が少なく、Qwertyローマ字も打鍵数はそれほど多くはない。打ちやすさは他の最適化された配列に比べれば低くなるだろう。シフト操作とのトレードオフだから、当然、シフト操作のコストをどう計算するかで意見が分かれるはずだ。正確に計算するにはキーの位置や運指パターンなども評価すべきだということになり、諸説入り乱れてキーボードを選ぶ前にどの説を選ぶのかという難しい問題になってしまう。結局、データを参考にしつつ、実物のキーボードと自分の手で試してみるしかないだろう。親指シフトの仮名縛りを解く方法ところで、なぜ親指シフトキーボードは「親指シフト」という特定の仮名の配列や入力方法と抱き合わせになっているのだろうか。親指シフトキーがローマ字入力やJIS仮名入力のユーザーにも有効に活用できれば、小指でしかシフトできないキーボードに不満を感じている多くの人に支持されるのではないかと思うのだ。(※1)キーボード全体の物理的なデザイン/各キーの論理的な配列/同時打鍵シフトという入力方法が一体となってこそ真価を発揮できるというのは理解できるけれども、キー配列やシフト方法がオプションで選べた方がありがたいし面白い。自由にカスタマイズできるのなら、親指シフトキーボードという土台の上で自分好みの配列を自作して快適な日本語入力を楽しむことができるだろう。そんなことを考えながら、以下のような表を作ってみた。キーボード自体を比較するわけではないので、キーボードの名前を記入する項目はない。?この表を見れば分かるように、親指シフトキーボードが活躍できるエリアがたくさん残っている。日本語入力」というキーワードで検索することをおすすめする。思っていたよりも世界は広い。(※1)エスリルのキーボード「NISSE」の「キーキャップの仕様別の割合」を見ると「親指シフト」を選ぶ人が20%いることが分かる。その逆に、JIS仮名仕様の「親指シフトキーボード」があったらどうだろう。親指でシフトできれば拗促音の入力が楽になるはずだ。英文やローマ字入力についても、Dvorak配列が選択できて親指でシフトできるとなれば、使ってみたいと思う人は今より増えるだろう。(※2)詳しくは知らないが、ドイツ語やフランス語などを入力する際に使うデッドキーはキーボードの片隅に追いやられている。これを親指シフトで入力できるようにすれば便利になるかもしれない。思いつきではなく真面目に研究されている方々がいることに感銘を受け、日本語キーボードから国際的なキーボードへと発展することを願って「多言語入力」の欄を追加した。トラックバック(0)打鍵数はこれでいいのか?はじめに以前から気になっていたことだが、NICOLAの公式サイトにある比較アニメーションには違和感がある。親指シフト入力が優れた日本語入力方式であることを否定するつもりはないが、この比較方法には何だかアンフェアな匂いを感じるのだ。不公平な打鍵の数えかた「ニコラ」がいきなり片仮名で入力されているのは、どちらも同じだからまだいいとして、ローマ字入力で「つ」を「tsu」、母音の前ではない「ん」を「nn」で入力しているのは不自然だ。それに、ちょくちょく親指シフトキーが押されているのに、その分は打鍵数としてカウントされていない。》”という案内があったので、もちろんそれも開いてみた。どの方式でも同じペースで打鍵することを想定して入力にかかる時間を比較しているらしいことは一応理解できたが、このアニメーションでは速すぎて、どのように打鍵をカウントしているのかがよく分からない。そこで、「各入力方法の仕様比較」というページを見てみた。この表の「打鍵に必要なストローク数」という項目を見ると、親指シフトはすべて「1ストローク」となっているので、1文字単位で打鍵数を比較しようとしているのだと分かる。1文字だというのはいいけれども、拗音というのは普通「きゃ」「きゅ」「きょ」のように2文字で表記するので、親指シフトで「1打鍵」というのは事実に反している。仮に拗音を小書きの「ゃ」「ゅ」「ょ」のことだと解釈すれば、JIS仮名で「2ストローク」というのはシフトをカウントしていることになる(句読点もJIS仮名では「2ストローク」となっているので、そう解釈するしかない)。「親指シフトはカウントしないが小指シフトはカウントする」ということだ。2ストローク」となっているのがどういうことなのかよく分からない。一般的なローマ字入力では単独の「っ」「ゃ」「ゅ」「ょ」を2ストローク以下で打つ方法はない。拗音の場合は前の仮名、促音の場合は後の仮名と合わせて「3ストローク」となるのを2つに分けたとも考えられるが、そういう説明はどこにも書いてない。普通に2文字単位で比較した方が分かりやすいし実態にも合っているだろう。数字だけは「かなモードのままで入力可能」などと打鍵数とは直接関係ないことが書いてあるのも理解に苦しむ。(上の方には親指シフトキーボードの「かな/英字配列」が「3段」で「かな/英字キー数」が「30キー」と書いてある。これではどうやって数字を打つのか分からない)「打鍵数と入力速度比較」や「指の使用率比較」にも突っ込みどころがいくつかあるけれども割愛する。要するに、どんな基準で比較しているのかが不明瞭で、もしかすると親指シフトに有利な結果を出すために恣意的な方法で比較しているのではないかと疑う余地ができてしまっているのだ。公平な打鍵の数えかたどんな方式に対しても公平な数えかたをするには、キー操作によって発生するキーコードを機械的にカウントするのがいいだろう。そのキーコードがどのように解釈されて、どの文字が入力されるのかなどという各方式の内部事情から独立した中立的な基準として使えるはずだ。実際のキーコードをそのまま書くと煩雑になるので、単純化して、キーが押されたことを示す“(”と離されたことを示す“)”の内側にキーの識別子を入れることにする。“(x)”は、xが押されてxが離された(単独打鍵)を示すわけだ。(xyは順不同)逐次打鍵は説明不要だろう。逐次打鍵とシフト打鍵の区別は曖昧で、各方式の解釈に依存することになる。複数のキーを続けて打つ場合は隣接する打鍵が重なり合ってシフト打鍵のタイミングになる場合がある。通常のJIS仮名入力やローマ字入力では、先に打ったキーがシフトキーならシフト打鍵、文字キーなら逐次打鍵として処理される。同時打鍵は、実際にはシフト打鍵のどちらかのパターンに含まれることになる。xとyの打鍵順を問わないことを示すために別の表記にした。通常使われる複数のキーの組み合わせは、この中のどれかにあてはまるはずだ。CtrlとShiftを押したまま複数のキーを逐次打鍵する場合には“((CS(x)(y)(z)))”などとすればよい。この記法を使えば、キーが押されたことを示す“(”の個数を数えれば、どんな入力方式がどのように解釈しようとも、必ず打ったキーの数が分かることになる。このように、動かしがたい打鍵情報に基いて、単純にキーを押した回数を打鍵数だと考えるのが公平で妥当な方法だろうと思う。そのキーを押したという事実がある(その打鍵がなければ別の字が入力されてしまう)のだから、そのキーを無視してはならないはずである。おわりにせっかくなので、上に書いた記法と数えかたを使って「日本語を大切に。ニコラ」という短文を各方式で入力した場合の打鍵列を比較してみる。【親指シフト】(22打鍵)((右ち))(ほ)(ん)((右こ))((左う))(た)(い)(せ)(つ)((右ち))(。驚くべきことに、JIS仮名の方が親指シフトより2打鍵も少なくなってしまった。この例文では、たまたま同時打鍵の「に」が3回も出てきたせいで打鍵数が増えてしまったのだ。このように、ある方式にとっては不利なテキストをわざと使うことは簡単にできるので、あまり打鍵数にこだわらない方がよいのではないかと思う次第である。そこで仮名漢直ですよ。トラックバック(0)漢直を使っていると、仮名入力に2ストロークの手間がかかるのが重いと感じることがある。なんとかして仮名を1ストロークで入力できないものだろうか。今まで何度となくそう考えてみたけれども、これはという方法は思い浮かばなかった。ユーザー辞書に単漢字として登録して一字ずつ変換する仮名入力では使わないシフト打鍵に漢直を割り当てる仮名入力と漢直のモードを切り替えるこれでは何だかすっきりしない。漢直ユーザーとしては漢字の打ち方を変えたくないし、おそらく仮名入力ユーザーも今まで通りに仮名を打ちたいだろう。何らかのキーを使って、シフトしたりエスケープしたりモードを切り替えたりするのは煩わしい。自然に仮名と漢字を打ちたいのだ。最近になってようやく、この難問をうまく解決できそうな方法を思いついた。ここで、ちょっと寄り道して、「漢直が仮名入力よりも速いという幻想」で使った例文を見てみよう。テキストの上にJIS仮名の打鍵、下に漢直(G-code)の打鍵を仮名で表示している。