このブログを検索

2019年10月7日月曜日

Windowsの各国語キーボードの使い難さ

毎月一度以上の投稿を目指していたのに、先月は投稿し忘れた。投稿するネタが何もないわけではないが、最近はMSKLCというマイクロソフトが無料で提供しているツールでキーボードの開発に夢中で、つい忘れていた。

MSKLCとは

MicroSoft Keyboard Layout Creator の頭文字を取って名付けたソフトで、マイクロソフトのホームページから無料でダウンロード出来る。
MSKLC でググれば、一番上にマイクロソフトのMSKLC ver.1.4 のダウンロードページが出てきた。(投稿日)
キーボードと言えば、キーを押した時に キートップに刻印されている字が入力されるのが当たり前だと思っている人もいるかもしれないが、ユニコードの文字の範囲で自分の好きなように定義した マイキーボードを作る事も出来る。その為のツールがMSKLCなのだ。

マイクロソフトがWindows10で提供している各国語のキーボードもやはりそのMSKLCによって作られているはずである。

Windowsキー+Space によってMSKLCを使って作ったマイキーボードに切り替えた後の最初の1文字目の入力がデッドキーに割り当てた文字だった場合に、その文字が入力出来なかったが、その同じ問題点が Windows10の各国語キーボードでも存在する事を発見した時、そう確信した。

その社内ツールを全世界のWindowsユーザーの為にマイクロソフトが好意で提供してくれているのである。

そのMSKLCでキー定義した結果は、そのツールのメニューの中から “Build DDL and Setup Package” を選ぶとWindowsにインストール出来るパッケージが出来る。そのパッケージの中の setup.exe というファイルをダブルクリックしてPCにインストール後、PCを再起動させれば自分でキーを定義したキーボードが使えるようになる。

また定義自体は拡張子を .klc とするテキストファイルにも保存できる。

赤の他人にも使って貰う

自分の作ったキー定義を赤の他人にも使って貰うには、この .klc の拡張子のテキストファイルを公開することで実現できる。

知らない人が公開しているパッケージだと、どんなウイルスが含まれているかも知れないから簡単には試して貰えない。しかし、.klc のテキストファイルなら安心して試して貰えるはずである。その .klc ファイルをMSKLCに読み込ませれば、使う人のPCでパッケージをビルドできるのだ。

何故キーボードを自分で定義するのか

私は元エンジニアなので、キーボードはASCII文字(ユニコードの 0020 から 007F まで)が全て打てる “USキーボード” が基本だと思っている。しかし、各国語のキーボードではアクセント記号の付いたアルファベットを入力する必要性で入力出来ないASCII文字があったり、或いは “USキーボード” のキー配列とは違う位置にキーが定義されている。

だから、色んな言語を扱う度に違う言語のキーボードに切り替えて使うとなると、各国語のキー定義をそれぞれ覚える必要がある。

Windowsで定義している “US International” というキーボードなら欧米の主要言語をキーボード切り替えなしで入力可能なのだが、肝心のASCIIの部分で、( '  `  " ~ ^ ) の5つの記号がデッドキーになっていて、これも使い難い。

一方、Mac には ABC-Extended という、ASCIIの部分は全く変更無しに多言語が打てる上に記号の入力も可能なキーボードが存在して評価が高い。なぜ、ASCII部分には全く変更がないのかと言うと、その他の文字や記号は Optionキー というものを押しながら入力するようになっているからだ。

同様の仕組みはWindowsにもあって、AltGr というキーを押しながら入力するというやり方だ。PCの元祖 IBM によれば、AltGr とは、Alternate Graphic の略号とのこと。キーボード上には AltGr と刻印されたキーは存在しないが、右側Altキー がそれである。左側Altキー も Ctrlキー を同時に押すことで AltGr の役目をする。

そこで、Macの ABC-Extended と同じ考えで、ASCIIの部分は全く変更無しに多言語が打てるキーボードだが、キーの定義はMacとは異なるものを作ることにした。

入力すべき文字・記号の範囲を考えた時、HTML4.0の文字実体参照で定義されている文字・記号というのが客観的に必要性の高いものだと考え、その全てを入力可能なようにしたかったが ABC-Extended では実現されてないからだ。それに、文字をどのキーに割り当てるのかについても成程と思えるものが少なかった。私はそれよりはもっと上手く割り当てる。

各国語キーボードの使い難さ

各国語のキーボードのキー配列が異なるとしても、その言語に最適化する為に必要とあれば納得出来る話なのだが、実はそうでもない。

例えば、ドイツ語の引用符は „ABC“ のように書くのだが、ドイツ語キーボードではこの引用符は打てないし、フランス語キーボードも フランス語の引用符 «ABC» だけでなくフランス語に必要な合字 æ やœ さえ打てない。じゃあ、一体どうして入力しているのか検索で調べて見ると、キーボード自体の機能には頼らず 独語版や仏語版の MS Word の機能を使えば良いらしいとの話があった。

ドイツ語キーボードでもフランス語キーボードでも AltGr で定義していないキーは沢山あって、それらの言語に必要な文字・記号を定義することは幾らでも出来たはず。つまり、マイクロソフトは本気で各国語キーボードを作っているとは思えないのだ。

もしかしてマイクロソフトの戦略として各国語キーボードの機能はわざと低くしておいて Word の売上を増やそうとしているのかも知れない。

MSKLCの機能を最大限に活用する

MSKLCでは、一つのキーに対して
  1. そのまま
  2. Shift を押しながら
  3. AltGr を押しながら
  4. Shift + AltGr を押しながら
  5. Cntl を押しながら
  6. Shift + Cntl を押しながら
  7. CapsLock 状態で そのまま
  8. CapsLock 状態で Shift を押しながら
の 8通りの定義が可能になっているが、マイクロソフトは 5. と 6. についてはアプリで Cntlキーを押しながら使うショートカットキーと被る恐れから非推奨としている。

残った 6通りの定義の内、1. – 4. については一つのキーに4文字までの文字列を定義出来る。7. と 8. については 1文字しか定義出来ない。

更に、デッドキーという仕組みもある。そのデッドキーの次に押すキーとその時に出る文字(1文字のみ)のセットを定義することで、一つのデッドキーに沢山の文字が定義出来るようになっている。但し、(Altキーの)デッドキーの次に押すキーとして定義できるのはアルファベットとスペースキーに限られ、数字や記号のキーは定義できない。また、Shiftの有無は区別される。つまり、一つのデッドキーには最大で54通りの定義が出来る。
Altキーでないキーをデッドキーとする場合には数字や記号のキーを定義することも出来る。しかし、ASCIIの部分には手を付けない方針だから、使えるとすれば Shift + Space キーの場合しかない。しかし、この場合にはGoogle日本語入力のキーボードとして使う場合に上手く動作しない。そこで、デッドキーの次のキーとして数字や記号のキーは定義しないことにした。
MSKLCの画面では CapsLock 状態を使う 7. と 8. でもデッドキーが定義出来るのだが、動作しない。

ところで、CapsLock 状態を利用する 7. と 8. は、この 7. と 8. で定義してある文字を続けて使うような場合でないと使いずらい。

そこで、CapsLock 状態にした時の動作として ⓐ 上付き、下付きの数字モード、ⓑ 発音記号モード、ⓒ ロシア語モード という 3つの活用方法を考えた。

カスタマイズできる

各国語キーボードでは、ASCII文字以外の各国語に必要な文字をなるべく 1. そのまま と 2.  Shift を押しながら に割り当てている。そこに収まらなくても、せいぜい 3. の AltGr を押しながら までの割当で、4. の Shift + AltGr を押しながら という使い方は殆ど利用されていない。

これは2つのキー( Shift と AltGr )を押しながら更に別のキーを押さなければならないのが大変だからだろう。

そして、デッドキーに定義した文字についても キーを2回押す必要があるから使用頻度の低い文字・記号にしか使われていない。

しかし、1. そのまま や 2. Shift を押しながら については us キーボードの定義を変えない方針だし、CapsLock状態を利用出来る文字は限られている。

だから、文字実体参照全体という沢山の文字を定義するにはどうしても AltGr とデッドキーは使う必要がある。しかし、そうすると各国語のキーボードに比べて使い勝手がよろしくない。と、悩んでいた時に Spaceキー を使う方法が閃いた。

usキーボードの中に一つだけ冗長なキーがある。Shift + Space である。Shift を押しても Space が出力されるだけ。勿論、Space の前後が Shiftキーを押す必要のある文字だった時は Shiftキーを押したままで入力出来るという利点もあるが、この限られた利点はあきらめ、これをデッドキーに転用すれば、AltGrキーを押さずとも新たに56種類の文字が入力出来るのだ。

しかし、新たに定義出来るキーが増えたのは良いが、どういうキーをこの新たな領域に配置するのがよいのか、その基準が明確でないと使う側も大変だ。

色々考えた挙げ句、この Shift + Space デッドキーに定義する文字は使う人の自由にしようと考えた。必要な文字は全て他所で定義しておく。どんな文字が手近に必要なのかは使う人によって異なる。だから、この領域には使う人が自分で良く使うお気に入りの文字を集めるのだ。

Shift+Spaceを活用する3種類のキーボード例

自由にとは言っても、私なりに目的別に3種類の例を考えてみた。まずは、一般的なものとして、スペイン語、イタリア語、ドイツ語、フランス語、などが書きやすいようにしたもの。アクセント記号のついた大文字の出現頻度は少ないので小文字だけを集めている。


次の例は中国語の発音記号であるピンインが書きやすいようにしてみたもの。最初の例となるべく同じにして、必要な文字だけ入れ替えてある。


3つ目の例は、シフトしない場合は最初の例と同じだが、シフト側はスペイン語とドイツ語が書きやすいようにアクセント記号のついた大文字を配置してある。


詳しい話はこのプロジェクトが完成したら、また投稿する。