2020年07月10日

【自キ】QMKのJISについてわかっていること

Q. 自作キーボードでも日本語配列を使えますか?
A. キーコードはあるので、キーマップを組めば使えますよ!

これ自体は正しい。ただいくつか乗り越えないといけないハードルがあり、
自キ勢は全部を把握してるわけではない。


まず、QMKのデフォルトはUS配列で、
これ前提で自作キーボードは組まれる。
キーキャップもUS配列がほとんどだから、
もう自キといえばUSだ。


ちなみに、
US配列とJIS配列は、
キーボード側から来たキーコードを、
OS側で解釈を変えているだけだ。

たとえば数字段の2のシフトは、
US配列だと@、JIS配列だと"が出るが、
どちらのキーボードを繋ごうが、
OS側の認識の変更で、
@にも"にもなる。
同じキーボードでさえ、OS側で切り替えられる。

これは意外と知られていないのでは。

(Windowsだと、言語設定のキーボードのオプション扱い。
切り替えたら再起動かけないと切り替わらない。
ちなみにSurfaceの工場出荷がUSで、
それを知らなかった僕はキーボードが壊れたのかと思った)


なので、
自キだろうが既成キーボードだろうが、
それをPCに繋ぐ時、
「私はUS配列/JIS配列を前提とする」
を決めなければならない。

おそらく自キ勢のコアな人はエンジニアだから、
OSはUS配列にしているはず。
だから、
「まずJIS配列に切り替えてください」は盲点だったりする。


ちなみに、OSがUS設定だと、
JIS特有キーを認識しないことに注意せよ。

変換、無変換、ひらがなカタカナ、全角半角などだ。
これらはQMKのキーコードが用意されている
https://beta.docs.qmk.fm/using-qmk/simple-keycodes/keycodes_basic
のInternationalの項にまとめられている)
にも関わらず、
これを出力してもUSモードでは無視される。

たとえばJISでのIME切り替えは全角半角のトグルだが、
USではAlt+`でないと切り替わらない。
JISではCapslockは英数(IMEオフ)だが、
USではCapslockキーになる。
JISでは選択範囲を指定して変換キーで「再変換」が可能だが、
USでは何も起こらない。

ということで、
JIS特有の操作を使いたい場合は、
OSの設定をJISにした上で、
目的のキーコードを吐く必要がある。


「JISが使いたいんですが」と聞く人は、
おそらくこれらを聞いてもよく分からない初心者なので、
「ちょっと難しいけど出来ないことはないので調べてください」
と苦笑いするしかないんだよね。
だから、きちんと解説しようと思ったわけ。


QMKは一見JISに対応している。
OSをまずJISにしたうえで、
keymap.cに、
#include "keymap_jp.h"
を書き込めば、
キーコードのJP_はじまりで、
JIS記号で見た名前でキーを指定できる。

たとえば、
【Helix 5 rows】おまえらが作らないから俺が実用的なJIS配列キーマップ作ったったった【QMK】
https://qiita.com/marksard/items/ca5119c6327aaa860c6c
などを読み込めば、
どういうことが起こっていて、どう利用すればいいかの見本があるわけだ。


さて、ここからが本題。

記号配列に関してはUSのほうが合理的だ。
JISの記号配置は合理的でない。

一方、再変換やらなにやらのJIS系の操作は欲しい。
IME切り替えがトグルしかないのもクソだ。
(たとえば変換キー無変換キーにIMEオンオフを割り当てることは、
MS-IMEで可能なので、これを実現するため、
QMKから変換無変換のキーコードを吐きたいわけだ)

つまり、
ベストは、
「JIS配列の操作系を使いつつ、
記号はUS配置」だと考えられる。


そこで、先ほどの制限、
「OSをJISに設定する」が効いてくる。

記号をいくらUSを使いたくても、
変換キーを使う以上は、
2のシフトは"だと、OSが認識しやがるのだ。


これを騙すには、いくつかのやり方がある。

「中段に数字段があるレイヤーをつくり、
上段にそのシフト記号を置く」
はポピュラーなやり方だ。
数字段以外の記号キーに関しても、
中段/上段の関係で、単打/シフトにする。
つまり、「シフトキーは使わない」方法だ。

「単打系をLowerに、そのシフト記号は同じ位置のRaiseに」
も対応関係を作りやすいアイデアだ。
(僕個人はLowerを別機能に使ってるので、これは採用してない)

また、eswaiさんが仕分けするコードを書いている。
https://github.com/eswai/qmk_firmware/blob/master/keyboards/eswai/anhedral67/keymaps/srlby2/twpair_on_jis.c
これを改造するのが早そうだが、
「US配列ってなんですか?
いつも使ってるJISが使いたいです!」
レベルの初心者が手を出せるものではないかもなので、
紹介に留めておく。


これらのことを説明しないと、
「自キでもJIS配列は使えますよ!」
と言い切れないため、
自キ勢は苦笑いでお茶を濁すのだ。

あとUS配列しかオシャレキーキャップがないので、
印字が違うのを我慢することを強要するか、
無刻印を強要するしかなく、
これまた初心者にはキツイだろう。


結局、オール無刻印で記号含めてブラインドタッチレベルにならないと、
JIS配列を自キで使いこなすことは出来ない。

だから、「出来ないことはないですよ!調べてください」
と、自キ勢は笑顔で答えるのみなのだ。
(実質よくわかってない人が多く、
仕様上できるはず、という程度の認識だと思う)



で、JIS配列を使いたい理由に、
再変換やらIMEオンオフやらの、
日本語入力特化機能を使いたい勢もほとんどいないので、
情報はうまくプールしないという矛盾が起こる。

ので、ここにまとめておきました。


Q. 自作キーボードでも日本語配列を使えますか?

A. キーコードはあるので、キーマップを組めば使えますよ!
そもそも、なんのために日本語配列を使います?
そして記号系はどのように使うか決めてありますか?
まで聞かないといけないので、それはコンサル料込みですね!
posted by おおおかとしひこ at 08:33| Comment(0) | カタナ式 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。