キーボードの物理配列、論理配列とOSの関係について
キーケット直前なので書きました。
ざっくり説明
キーボード上の、実際にスイッチがどう配置されているか、を決定しているのが物理配列です。
それらのキーに対し、何の信号(キーコード)を送るかを決定するのが論理配列、そのキーコードを受け取ってOS独自のキーなどについての機能を補正するのがOSの配列設定である、と言えるでしょう。
物理配列と論理配列はキーボード側が持つ情報であり、OS側は受け取った情報の解釈を行っている、という風に考えても大丈夫です。
「配列」と一口に言っても複数意味があり、すべてを網羅するのは不可能なので、物理配列の詳細について知りたい場合はこちらの記事を参考にしてください。
物理配列
いわゆる最もよく見るタイプのキーボードはロースタッガードと言い、これを前提に解説します。
一行ごとにキーがずれているのが特徴のため、日本語訳では行ずれ配列と呼称します。
ロースタッガードから派生するものや全く設計の異なるものまで数えるとさらに細かい区分がありますが、今回は先ほどの記事に解説を任せ、ひとまず規格的な差異について扱います。
なお、以下の3種に関して、Fn行、ナビゲーションクラスタ、テンキークラスタは同一なため、省略しています。
ANSI
アメリカの工業規格に合わせたキーボードを英語配列キーボードだとか、ANSIキーボードとか呼称します。厳密には英語配列を指定するには後述の論理配列とOSの設定まで英語に指定する必要がありますが、アルファベットの2~3倍近い長さのエンターキーやShiftを持つ特徴があり、世界的にもユーザーの多い配列です。
ISO
欧州の統一規格ISOに従うキーボードのことです。日本でよく見る逆L字のエンターキーを採用しているため、JISと混同されることがありますが、使用感はかなり異なるキーボードです。
左のAltキーに対し、右はAlt Graphicという別のキーに指定されています。これらを駆使して発音記号を付与するという特徴があり、これについての言語ごとの差異は後述するOS設定で吸収することがほとんどです。
JIS配列との見分け方は左のShiftが短いこと、Backspaceキーが長いことです。
JIS
日本の工業規格JISに合わせたキーボードです。ANSIやISOと異なり、JISでは配列をガチガチに固めているわけではないため、最下段のキー幅などにかなりの差異があります。
しかし、左のShiftが少し長く、Enterキーが逆L字であること、Backspaceが小さく、横にバックスラッシュ(\)[1]とバーチカルバー(|)があること、加えて全角半角・漢字キー、変換無変換キー、かなキーが存在するなど、複雑な文字体系を持つ地域特有の設計が一般通念として行われています。
右Shiftを短縮して「¥・_・ろ」のキーを入れているのも特徴的です。
逆に、これが原因となって、キー幅が統一されておらず、JISセットがあまり市販されないことになってしまっています。(通販などで日本のメーカーやデザイナー以外が"日本語"キーキャップとして売っているものの大半は上のANSIやISOのセットに平仮名の刻印を入れたものが大半です。)
論理配列
さて、先ほどの部分でキースイッチを実際にどう置くかを指定しました。次はそれぞれのキーが何の信号を送るかを決定する番です。
いわゆるQWERTYと呼ばれるものは、アルファベットのキーを左上から右に向かってQ、W、E、R、T、Y…と配置することからの名前で、その通りにコードを指定しています。
Zを多用するドイツ語では、YとZを入れ替えたQWERTZ配列というものが採用されています。
フランス語ではAZERTYという全く異なる論理配列となります。
上で挙げた三つの配列はどれも電子的なシステムの書き換えで実現可能なもので[2]、これを論理配列と呼称しています。
論理配列では、キーの押下を検知し、キーに対応するキーコードをOS側に送るわけですが、同一規格で作られた同じ物理配列のキーボードであれば、論理配列の書き換えにより機能を変化させることが可能なわけです。
自作キーボード界隈がVIAやRemap、Vialなどで行う「キーマッピング」は、論理配列の書き換えに相当する行為です。Karabiner-Elements等のマッピングソフトはまた別の技術となります。
ただし、一部の特殊なキーについては、論理配列の書き換えのみでは対応できません。
それを処理するのが、次項のOSです。
OS上での扱い
物理配列、論理配列が決定したので、この段階でキーボードとしては完成しています。
しかし、実際に入力する段階になって、OSや言語設定毎に異なるキーが存在するため、この部分を良い感じにする必要があります。
まず、Shiftを押したときの処理方法です。
キーボード内部では、通常、Shiftを押した際に送られる情報は、「Shiftを押しているということ」「別のキー(記号、文字など)を押した・離したということ」となっています。OS側がそれを読み取って文字を変化させる都合上、OSからの認識が英語キーボードだと2のShiftがアット(@)に、日本語キーボードだとダブルクオート(")になります。
このような処理は通常キーボード内部で行うには処理量が多すぎるうえ、保持すべき情報量が単純計算で2倍弱になります。これを回避するため、Shiftを押していないとき・押したときに入力される記号のペアは、OS側に保持していることがほとんどです[3]。
同じ信号を共有していることによる問題もあります。
例えばバックスラッシュ()と全角円(¥)は同じキーに割り振られています。この変化はOS側の解釈によって発生するもので、入力言語が英語ならバックスラッシュ、日本語なら円、という風に変換しています。
ISOやANSIでバッククオート(`)とチルダ(~)が割り振られたGraveキーは、日本語では全角半角・漢字キーとして扱われており、物理配列では同じ場所にあるのに加え、信号も同一のものが送り出されています。
OSの言語設定により、日本語の場合のみ言語を切り替えるキーとして機能するようになっているため、OS側の解釈により入力が変わるキーの代表格となっています。
逆にWindowsにおけるWinキー、MacにおけるCommandキーなど、GUIを呼び出すためのキーがあります。
こちらは大体の場合において同じ信号で同じような処理ができるようになっており、この部分はOSを跨いでも問題なく機能します。
(おまけ1)Karabiner-Elementsについて
※筆者はユーザーでもシステム屋でもないので雑語りをご了承ください
OS側で入力を受け付けたものを、一度別のソフトを介して別の入力を行わせるようにするのがシステム上のマッピングソフトです。特に有名なのがKarabiner-Elementsで、ソフト上で設定すると「実際の入力をソフト側で置き換えたように変換できる」という機能を持ちます。
キーマッピングソフトウェアという括りでは、キーボード上の論理配列の書き換えを行うソフトと、システム上で置き換えを行うソフトが同列になってしまうため、混同を避けるために明記しておきます。
(おまけ2)Keyboard Quantizerについて
上記のソフトウェアのような機能を単一の中間デバイスとして独立させたものです。
通常のキーボードとデバイスの間にKeyboard Quantizerを挟むことにより、任意のキーコードを別のものに置き換えることができるようになり、キーマップがソフトやそれをインストールしたハードに依存することなく変更できるようになる、という特色があります。
(おまけ3)クソデカエンターキーについて
通称BAE(Big Ass Enter)。デカいアジアのエンターであって、デカいケツのエンターではない。
アジア圏の古いキーボードに多い、ANSI配列のEnterとEnter右上のバーチカルバー・バックスラッシュが融合した鏡像L字型のエンターキーです。2キーを1つに結合した代償として、Backspaceを分割したりテンキー+を分割したりしてあぶれた1キーを賄います。
実は韓国の工業規格KS X 5003で策定されている…………とはいえ、キーキャップ側の規格の混在、単純な対応機種の減少などによりあまり見かけることのないキーです。
現在ではISOエンターにもANSIエンターにも置き換え可能な5本ステムのものなどが細々と生産されており、根強いファンが存在します。
Discussion