空飛ぶ親指シフト
文章創生のツール
試験に出る親指シフト

ふつうの日本語キーボードで親指シフトしてはいけない、たったひとつの理由

理想と現実のギャップ

「ふつうの日本語キーボードで親指シフトをはじめよう」

こんなふうなフレーズをわりあいよく見かけるようになったのは、西暦2000年を過ぎたころからだったかと記憶しています。

その後、親指シフトを紹介するサイトなどでも「ふつうの日本語キーボードで親指シフト」という切り口からはじめる記事を見かけることが多くなりました。

じつはこれ、親指シフトを規格として取りまとめたNICOLAの理念でもあったと考えています。なので全体の流れがそういう方向に向かったのはむしろ自然なことだったかもしれません。

しかし理想や理念が現実と食い違うのは世の常、のようです。

もしかしたら現在でも「ふつうの日本語キーボードで親指シフトをはじめようか」

そう考えている方がいらっしゃるかもしれません。

だとしたら

今すぐ考えなおしましょう。

現実問題として、ふつうの日本語キーボードで実用的に親指シフトするのはむずかしい場合が多いからです。

ふつうの日本語キーボードで親指シフトしてはいけない、たったひとつの理由

最初に答えを言ってしまいます。

それはまぼろしが出現してしまうから、

です。

いったい、なんの話なんだ?

と思う方が多いでしょうか。

でも、もしかしてキーボードの仕組みにくわしい方とかなら

「ひょっとしてアレの話かな」

と気がつく方もいらっしゃるかもしれません。

そうです。アレの話です。

ではさっそく深掘りしていきたいと思います。

親指シフトをどうやって実現するのか。

実用的に親指シフトできる環境を形づくるのは、なかなか大変です。だから世のなかから忘れられてしまったのだ、という側面もあるかと思います。

でも親指シフトを実現する仕組みは、実はけっこう単純です。

かつて、「親指ひゅんQ」という一世を風靡したエミュレータソフト(親指シフトを実現するソフト)がありました。

ここでは、その「親指ひゅんQ」のインストールディレクトリに収められていた貴重な資料「同時打鍵ステートマシン」をもとに親指シフトの仕組みを表にしました(大昔に作ったものを手直ししました)。

以前に日本語入力コンソーシアムのホームページに掲載されていた同時打鍵テーブルとも基本的に中身はおなじものです。

現在では異なる処理も公開されているようですが、同時打鍵かそうでないかを判定すること、言い換えるなら親指シフトの根幹の処理において、「同時打鍵ステートマシン」を越えるロジックを私自身はいまだ知りません。

ただ、なるべく話をシンプルでわかりやすくしたいという理由からこの同時打鍵遷移表は日本語ワードプロセッサ「OASYS」の処理にしました。つまり変換キー独立型の処理です。NICOLA規格で導入された変換キー共用型の処理も含めた、総合的なバージョンはあらためて上げる予定です。

上と同様の理由でタイムアウト処理も省きました。

親指シフトの処理を表す表

すでにめまいがしてきた、という方いらっしゃるでしょうか。

自分で作っておきながら、わたしはこれを見た瞬間めまいをおぼえました。

しかしここは悩みどころではありません。注目していただきたいのはただ一カ所のみ、紫色で表示された部分です。

3キー分岐処理

ここが親指シフト処理の真骨頂、高速入力時に同時打鍵か単独打鍵かを切り分けて、親指シフトを実用配列に押しあげるロジックである(おおげさ)、3キー分岐処理です。伝家の宝刀・フォークボールのようなものです。(ちょっとちがうかもしれません)

まず文字キーが押され、押された文字キーが離されないうちに親指キーが押され(文字&親指・セット)、この状態のまま(ふたつのキーが離されないまま)、あらたな文字キーが押されたとき、の処理ということになります。

3キー分岐処理を図示したもの

最初に任意の文字キー(上図の例では[A]キー)が押されてから親指キーが押されるまでの時間は文字キー単独なので「ノンーシフト・タイム」、そして親指キーが押されてからつぎの文字キー(上図の例では[B]キー)が押されるまでの時間は同時打鍵状態なので「シフト・タイム」と名づけます。

上図では同時打鍵状態(シフトタイム)において新たな文字[B]キーが押され、結果として3キー同時押しになった時間をエンドポイントとして、判定を行います。それが3キー分岐処理です。

3キー分岐処理は時間が短いほうを同時打鍵とします。

最初のノンーシフト・タイムが短ければ最初に押した[A]キーと親指キーとの同時打鍵が決まり、あとのシフト・タイムが短ければ後に押した[B]キーと親指キーとの同時打鍵です。

親指、シフト一回だけの法則

さあ、ここできました。今回の試験に出るポイント、

「親指、シフト一回だけのほうそくぅぅ」

です。

親指、シフト一回だけの法則、それは、

「一回押した親指シフトキーはただひとつの文字キーに対してのみ作用する」、というものです。

つまり親指シフトキーを押しっぱなしにしながら文字キーを続けて打ちこんでも、シフト側の文字を打ちこめるのはただ1文字だけだということになります。

「Shiftなのに押しっぱなしで文字入力できないのはおかしいじゃないか」

という批判は1980年代よりあったようです。

しかしこれは親指シフトの設計理念なのです。

親指シフトの生みの親にして、日本語ワードプロセッサ・OASYS開発部隊のリーダーでもあった神田泰典さんが書き残したテキストを読むと、それが開発段階からの設計方針だったことがうかがわれます(補足)。

「親指、シフト一回だけの法則」を念頭においてもう一度図を見てみましょう。

つぎの例は

ノンーシフト・タイム ≧ シフト・タイム

です。

つまり親指キーを押してからあとに押した文字キー[B]を押すまでの時間間隔が短かった場合です。

3キー分岐処理の例(その1)

3キー分岐処理は時間が短いほうを同時打鍵とする、のでしたね。

なのでこの場合、親指キーとあとから押した文字キー[B]との同時打鍵、つまり文字キー[B]に割りあてたシフト側の文字を出力することになります。

そして

ということは、「親指、シフト一回だけの法則」により必然的に最初に押した文字キー[A]にはシフトがかからない、つまり単独打鍵となります。

もちろん順番からすれば、まず最初に文字キー[A]に相当する「かな」を出力し、つぎに文字キー[B]に割りあてたシフト側の「かな」を出力することになります。

ノンーシフト・タイム < シフト・タイム

逆にノンーシフト・タイムが短いとき、つまり文字キーが押されてからすぐに親指キーが押されたときには、「使い手は先にシフト側の文字を打ちこもうとした(文字キー入力が先行した)」と判定し、親指キーと文字キー[A]の同時打鍵が確定します。結果として文字キー[A]に割りあてたシフト側の文字を出力します。

3キー分岐処理の例(その2)

いっぽうあとから押した文字キー[B]は「親指、シフト一回だけの法則」が適応されて単独打鍵(ノンシフト)が決まるか、といえばそうはならないですね。あらたに打ちこまれたべつの親指キーとの同時打鍵になる可能性があるので、単独打鍵確定、ではなく、仮の単独打鍵として状態を保持しつつ、つぎのイベントを待ちます(文字キー・セットへ)。ここが憎いところですね。

ノンーシフト・タイム ≧ シフト・タイム最初の文字キーの単独打鍵つぎの文字キーの同時打鍵リピート・セットへ
ノンーシフト・タイム < シフト・タイム最初の文字キーの同時打鍵つぎの文字キーはホールド文字キー・セットへ

最大のポイントはノンーシフト・タイムとシフト・タイム、どちらが長いか短いかという相対時間で判定しているところです。ここで絶対時間を導入してしまうと個人差が出てくるのでうまくは行きません。

ちなみに、親指シフトにはタイムアウト処理というのもありますが、これはキーを打ったときにキーを打った気分を演出するためのものだと考えたほうがいいです。過去にはタイムアウト処理不要論を唱えていた方もいらっしゃいましたし、親指ひゅんQなども初期状態では意味のないほど長い時間設定(ふつうにキーリリースのほうが早い)になっていたと記憶しています。

こうして見ていくと親指シフトの実現で行っている処理はむしろシンプル、と感じる方も少なくないのではないでしょうか。私も「コロンブスの卵」と言えるほどシンプルだと思います。

だとすると親指シフトの環境構築が大変だという話は嘘じゃないか、これなら簡単に親指シフトを実現できるんじゃないか、そう思われる方もいらっしゃるのではないでしょうか。

親指シフトに立ちはだかる壁

が、壁がふたつあります。

ひとつはパソコンのOS上の問題です。windowsにせよMacにせよ、キーを打ちこんだとかマウスをクリックしたとかいうイベントは、優先度が低いため通常はリアルタイム性が担保されていません。ここでいうリアルタイム性というのはたとえば10msec、1秒の100分の1とか、あるいはもっと細かい時間(分解能)レベルの話です。ノンーシフト・タイム、シフト・タイムの正確な時間差を計るには必要になってくるのですが、それが確保できるかどうかがまったくあてにできない、ということになります。

そこで世間でときどき見かける「親指シフト風プログラム」(キーの重なりだけで判定するタイプ)ではなく、真面目にきちんと親指シフトを実現するプログラムを書こうとすると、上記の問題をクリアするため比較的ハードウェアよりのコードを記述していくことになります。

たとえば冒頭で紹介した「親指ひゅんQ」なども、いわゆるフィルタ・ドライバといわれるタイプのハードウェアよりのプログラムであったと記憶しています。しかしそれであるがゆえに、OSのバージョンアップ時に支障が生じたり、場合によってはまともに動作しなくなったりします。

これが問題点のひとつめです。

そしてもうひとつ、とても大きな問題があります。

それが、キーボードです。

補足 連続シフト?

配列変更ソフトの「やまぶき」や配列変更アダプターの「かえうち」などには、「連続シフト」という項目で親指キーの押しっぱなしを許容する設定があったと記憶しています(私が使ったのは「かえうち2」のほうです)。じっさいにその設定で試してみたこともあったのですが、当然のことながら単独打鍵のつもりなのにシフトがかかってしまうという現象に遭遇し、すくなくともふつうにNICOLAとして使うと「教育的指導」が定期的に入るきびしい操作感となりました。

ベテランの親指シフターさんからすれば「そんなのアッタリマエー」という感じでそもそもそういう設定にはしないと思います(富士通のIME・Japanist[販売終了]には設定そのものがなかったはずです)。

しかしなにも知らない初心者の人が、「シフトキー押しっぱなしで打てたほうが便利そうじゃね」、みたいな安易な発想でこの設定をONにすると、もしかしたら詰むことになるかもしれません。

親指シフトには落とし穴がいっぱい、ですね。

キーボードの仕組み

さて、話はキーボードです。キーボードの仕組みにかんして基本的なことはわかっているよ、という方は、ここは読み飛ばしてください。

キーボードは一言でいえばスイッチの集合体です。

このスイッチの構造においても「メンブレン&ラバードーム」方式であるとか「メカニカル」方式であるとか「静電容量」方式であるとか、いろいろと種類があるのですが、ここで取りあげるのはスイッチを押したことをどうやって検知するのか、という話です。

いちばん単純なやり方としては個々のキースイッチにマイコンの端子を接続するやり方です。でも、この方法ではあきらかに問題がありますね。

ふつうのキーボードではキーが100個くらいありますから、端子の数がたりないよ、という話になってしまいます。

キーマトリックス

そこで現在のキーボードで標準的に使われている手法がキーマトリックスという仕組みです。

キーマトリックスの概念

さすがに現実のキーボードは上図のような「夏休みの宿題」的スイッチではありません。しかし原理は伝わるかと思います。

上のイメージ図で表わしたいことは縦の出力ラインと横の入力ラインはつながっていないけれど、スイッチを押すと接続される、ということです。

なのでいま、出力1に電流を流して入力1で検知できたらスイッチAが押された、ということになるわけです。

この方法でたとえば入力8本、出力8本の計16の端子があれば単純計算で8×8の64個のキースイッチまで対応できますね。

これ以外にもデジタルピンを増設する方法はありますが、本筋ではないし門外漢でもあるのでここではふれません。

まぼろし出現

さて、なんとなくいい感じのキーマトリックスですが、このままではちょっとした不都合が生じてしまいます。下図をご覧になってください。

キーマトリックス、電流が逆流する様子

スイッチB、スイッチC、スイッチDを同時に押すと、スイッチDのところで逆流し、その逆流した電流が巡りめぐって入力1に流れていきます。

結果として出力1に電流を流して入力1で検知できてしまっているので、スイッチAが押されたことになります。じっさいには押していないにもかかわらず、です。

このようにじっさいには押してないはずのスイッチが押されたことになってしまう現象をゴーストキーとかファントムキーなどというようです。

ファントム、亡霊とかまぼろし、という意味ですね。

このゴーストキーとかファントムキーが発生しないようにするには、原因である逆流を防げばいいですね。なので電流を一方向にだけ流す素子ダイオードをスイッチごとに直列にかましてやると、上記のような現象は起きなくなります。

キーマトリックス、正しいダイオードの挿入

しかし「ふつうの日本語キーボード」多くのは、特定キーの組み合わせ(たとえばAlt + Ctrl + Delete)のみ対策をほどこして、それ以外は逆流防止用のダイオードをつかうこともなく、結果として3個以上のキーを同時に押しても認識できない場合があると言われています。

なぜでしょうか。

答えは簡単です。

3個以上のキーを押すことはふつうはない、と考えられているからです。

ふつうはない、のです。

ではじっさいにどのような処理をしているのでしょうか。

ここから先は個別のメーカーがどう対応しているのかという話になるので、他のサイトを引用してみます。

まずは株式会社ビット・トレード・ワンの「Nキーロールオーバーって何?」という記事から一部引用します。

ではゴーストキーの発生を防止するには、どうしたらよいのでしょうか?

一番簡単な方法は同時押しに対応するキーをShiftキーやCtrlキーなどの特殊キーに限って、もしゴーストキーの発生するキーの組み合わせが発生してしまった場合には、そのキーを出力しない。同時に押してしまった場合は 全てのキーのコードを出力しないようにしてしまいゴーストキーが出現することを禁止するという方式です。

実際にこれは現在もっとも広く行われている方法でコンピュータを購入した時についているキーボードは大抵こういう方法をとっています。

引用元https://bit-trade-one.co.jp/blog/20190904/

つぎは日経XTECH(クロステック)の『「打ちやすい」キーボードは何が違うのか、図解で分かる打鍵感の秘密』という記事です。著者の八幡 勇一さんはキーボードにかんして書籍も出版しておられる専門家の方です。

現在主流のメンブレン・キーボードではスイッチ機構が印刷で作られるため、個々のスイッチにダイオードを仕込むことが難しい。抵抗素子もコスト高になる。そこでほとんどのメンブレン・キーボードはファントムキーが発生した場合に走査を止めてしまう。

 引用元https://xtech.nikkei.com/atcl/nxt/column/18/01258/032600002/?P=4

どうやら現在主流のメンブレン・キーボード、つまりふつうの日本語キーボードと言われる製品の多くは3キーを同時に押してファントムキーが発生すると、キー入力自体がなかったことにされてしまう、という仕組みになっているようです。

いかがでしょうか。親指シフト処理の決め手ともいわれる3キー(場合によっては4キー)同時押し状態になったとき、押したはずのキー入力が銀河系の彼方に飛び去ってしまったら……、

史上最速の男・ウサイン・ボルト氏でも、親指シフトはむずかしいですね。

3キー分岐処理ができないキーボードで親指シフトしても、それは親指シフトのようなものでしかありません。

USBキーボードは6打鍵同時押しできる?

ごく一部だと思いますが、USBにかんして誤解していらっしゃる方がいるようなので、補足です。

USBキーボードは6打鍵同時押しを認めているので、3キーの同時押しを認識できないはずがない、という意見を目にしました。

USBキーボードが一度に6個のキーを認識できるというのは、規格として無制限だったPS/2にたいして最高で6打鍵までですよ、という制限を謳っているだけのものです。

あくまでも転送方式の限界を規定しているだけなので、個別のキーボードが6打鍵同時押しを認識できる、という話ではありません。

親指シフト関連のサイトなどを見ていると、しばしば

「富士通の親指シフトキーボードか、そうでなければふつうのキーボードか」

という区分けをしている記事が目にとまります。でもキーボードの仕組みという点に目をむけてみると、この区分けはあまり意味をなさないですね。

構造的に言えば、富士通の親指シフトキーボードが特別だったわけじゃありません。

区分けをするのであれば、親指シフトを受け付けるキーボードか、そうでなければ受け付けてくれないキーボードか、ということになるかと思います。

前者についていうと、(販売は終了しましたが)富士通の親指シフトキーボード・KB232,KB613など、東プレ・REALFORCEシリーズ(あえて言えば初期バージョン)、PFUのHHKB Professionalシリーズなどですね。それ以外にも親指シフトできる、できそうなキーボードは昔に比べるとだいぶ増えてきましたが、全体としては少数派です。

そして「ふつうの日本語キーボード」のおおくは、ふつうにローマ字入力できても、ふつうに親指シフトはできないよ、と考えたほうがいいと思います。

(親指シフトできるかどうかでもうひとつとても重要な要素が具体的なキー配列、親指キーのポジションなどの問題ですが、論点がずれるのでここではふれません)

原因がキーボードだと初心者の多くは気づかない

さいごに今回の試験に出るポイントをもうひとつ追加します。

それは、

ふつうの日本語キーボードで思うように親指シフトできなくても、キーボードに原因があることに気づく初心者はほとんどいない(か、かぎりなく少数)、ということです。

親指シフトにかんして酸いも甘いも嚙み分けつくしたベテランの親指シフターさんなら、どんなキーボードを使おうとそれこそ自由です。

でもなにも知らない初心者の人が「ふつうの日本語キーボード」で親指シフトにチャレンジしたとします。

そして、ある程度までタイピングが上達した段階になってはじめて思うように文字入力できないことに気づきました。そのとき、

「これはキーボードに問題がある、キーボードが親指シフトを受けつけない構造なのだ」

そう考える人はほとんどいないと思います。

おそらくこんなふうに考えるのではないでしょうか。

「なんだ、噂の親指シフトなんてこの程度のものだったのか」

「ダメじゃん親指シフト」

もはや問答無用、言い訳は聞かぬ、君は新選組の近藤勇ですか、

というわけですね。

まとめ

親指シフトはキーボードを選びます。あるいは、一定の条件を満たしたキーボードだけが親指シフトを乗せることができます。それが客観的な事実です。

切れないのこぎりを使って大工仕事が好きになる初心者はおそらくいないはずですよね。

おなじように「ふつうの日本語キーボードで親指シフト」を初心者にすすめても、親指シフト嫌いを増やすのが関の山だと思います。ふつうの日本語キーボードの多くは「親指シフトが乗らない」、ふつうの日本語キーボードの多くで実現できることは、タイピングが速くなると意図した文字が打てないことがある「なんちゃって親指シフト」以上のなにものでもないからです。

私自身は親指シフトという技術がこのまま歴史の闇にうずもれてしまうのは惜しいと考えています。

でも初心者にとって親指シフトはつまづきポイント満載であるのも確かですね。

予備知識のない方が思いつきで親指シフトをはじめてもまったく問題なかった時代がかつてはありましたが、現在ではそうはいかないと思います。

なので、あえて親指シフトをお勧めはしませんが……、

その一方で、前述したように快適に親指シフトできる、あるいはできそうなキーボードは昔にくらべたらだいぶ増えているとも感じます。

もし親指シフトに興味がある、チャレンジしてみたい、という方がいらっしゃったら、私に言えるのは「ちゃんとした道具を使ってくださいね」ということです。それが親指シフトするうえでの前提条件だと思います。

HHKB? 高いよ。

と言う方もいらっしゃるかもしれません。

たしかにHHKBとか、高いですよね。HHKBでなくても、ちゃんと親指シフトできるキーボード、おおむね安くはありません。理由は上述の通りです。

これもまた一般論になってしまうのですが、よいキーボードは文書作成の道具としてとても有効な方法のひとつであると同時に、ふつうはパソコン本体より長いあいだ使えるといわれています。

ローマ字入力だろうと親指シフトだろうと、キーボードをよく使う人にとってよいキーボードは自己投資にじゅうぶん見合うものじゃないかと、私は思います。

(ひょっとして親指シフト勧めてる?)

いいえ、それはおそらく、錯覚です。