さて、日本語環境(特にWindowsの)で自作キーボードを使うとき、日本語配列/英語配列問題に悩まされることはありませんか?
具体的にどういうことかっていうと、自作キーボードのファームウェアとしてよく使われる「QMKファームウェア」でキーマップを設定すと、英語配列(101/102)キーボードとしてのキーコードが設定されます。
そしてそれをOSが日本語配列(106/109)キーボードとして認識してしまうと、一部の記号が正しく入力できません。たとえば"["を打とうとしたはずが"@"になったりします。
そんな時どうすればいいか? OSの言語設定をいじったり、レジストリをいじったり、ULE4JISという変換ソフトを使ったり、QMKファームウェアでkeymap_jp.hを使ったり、いろいろな対策方法があります。
しかし今のところ、どの方法も一長一短という感じ。 ちなみに僕はULE4JISを使ってるんですが、なにか他に入れているソフトと相性が悪いのか、近ごろ挙動が不安定で小さなストレスを感じます。
そんな、混迷を極めるQMK&日本語配列問題ですが、さらにひとつ新しい選択肢を提案したいと思います。
こんな人におすすめ
- 日本語Windowsを使っている。
- 職場のPCなどで、いちいち設定を切り替えたくない。
- QMK環境のセットアップがめんどくさい、挫折した。
- QMKのビルド環境が使えるなら、keymap_jp.hを使う方法 がベストだと思います。
- 正攻法じゃなくても動けばいいよ。
この記事を書いてる途中で知ったんですか、QMK MSYSというのを使うと、すごく簡単にQMK環境をセットアップできるようなので、この記事の意義は大幅減です。 けど、環境のセットアップせずWebツールだけでキーマップ設定できるのはまだメリットだと思うので、めげずに書きました。
QMKコンフィギュレーターとは?
Webアプリ上でキーマップの編集からファームウェアのコンパイルまでできちゃう素敵ツールで、これさえあれば自分でQMK環境を用意しなくても、自作キーボードのキーマップをカスタマイズできます。
salicylic-acid3.hatenablog.com
コンパイルしたファームウェアは、QMK Toolboxというソフトを使えば、簡単に書き込めます。
「じゃあそれ使うだけオッケーじゃん👌」とはまだならなくて、QMKコンフィグレーターは、簡単に使える代わりに、あまり細かいカスタマイズができません(アップデートにより徐々に増えていますが)。
例によってkeymap_jp.hを使う設定っていうのも、いまのところはできないようです。
記号が違うところだけ置換したらいいんじゃない?
ちょっと汚いやり方ですが、たとえば"@"を設定したいキーをあらかじめ"["として設定しておけば、日本語配列として認識された時に"@"が入力できるというわけです。
そんなわけで、まずはkeymap_jp.hを参考にして、置き換えが必要な記号キーをリストアップしました。
const jp_us_list = [ ['KC_ZKHK', 'KC_GRV'], // Zenkaku ↔︎ Hankaku ↔ Kanji (半角 ↔ 全角 ↔ 漢字) ['KC_CIRC', 'KC_EQL'], // ^ ['KC_YEN', 'KC_INT3'], // ¥ ['KC_AT', 'KC_LBRC'], // @ ['KC_LBRC', 'KC_RBRC'], // [ ['KC_EISU', 'KC_CAPS'], // Eisū (英数) ['KC_COLN', 'KC_QUOT'], // : ['KC_RBRC', 'KC_NUHS'], // ] ['KC_BSLS', 'KC_INT1'], // (backslash) ['KC_MHEN', 'KC_INT5'], // Muhenkan (無変換) ['KC_HENK', 'KC_INT4'], // Henkan (変換) ['KC_KANA', 'KC_INT2'], // Katakana ↔ Hiragana ↔ Rōmaji (カタカナ ↔ ひらがな ↔ ローマ字) ['KC_HASH', 'S(KC_3)'], // # ['KC_AMPR', 'S(KC_6)'], // & ['KC_QUOT', 'S(KC_7)'], // ' ['KC_LPRN', 'S(KC_8)'], // ( ['KC_RPRN', 'S(KC_9)'], // ) ['KC_EQL', 'S(KC_MINS)'], // = ['KC_PEQL', 'S(KC_MINS)'], // = ['KC_TILD', 'S(KC_EQL)'], // ~ ['KC_PIPE', 'S(KC_INT3)'], // | ['KC_GRV', 'S(KC_LBRC)'], // ` ['KC_LCBR', 'S(KC_RBRC)'], // { ['KC_PLUS', 'S(KC_SCLN)'], // + ['KC_PPLS', 'S(KC_SCLN)'], // + ['KC_ASTR', 'S(KC_QUOT)'], // * ['KC_PAST', 'S(KC_QUOT)'], // * ['KC_RCBR', 'S(KC_NUHS)'], // } ['KC_UNDS', 'S(KC_INT1)'], // _ ['KC_ZHTG', 'KC_GRV'], // Zenkaku ↔︎ Hankaku ↔ Kanji (半角 ↔ 全角 ↔ 漢字) ['KC_DQUO', 'S(KC_2)'], // " ['KC_MEISU', 'KC_LANG2'], // Eisū (英数) on macOS ['KC_MKANA', 'KC_LANG1'] // Kana (かな) on macOS ]
Javascriptで変換してみよう
そもそも開発環境のセットアップが面倒というモチベーションでやってるので、ブラウザさえあればすぐ動かせるるjavascriptを使って、サクッと作っていきましょう。
あんまり綺麗なコードではないですが、こんな感じで変換してみます。
let us4jp = (keymap) => { // 置換のためにいったん文字列にする let layers = JSON.stringify(keymap.layers, null, 3); // keymap_jp.hをもとにキーコードを置換する jp_us_list.forEach(key => { // 置換したキーは、二重置換を防ぐためにいったんフラグをつけておく layers = layers.replace(`"${key[0]}"`, `"${key[1]}🍣"`); }); // フラグを外す layers = layers.replace(/🍣/g, ''); // keymap書き戻して keymap.layers = JSON.parse(layers); // 変換を掛けたバージョンだってわかるようにメモして keymap.keymap = keymap.keymap + '-jis-like'; return keymap }
Webアプリっぽく整えて公開
最近Github Pagesというのを使ってみたかったので、Webアプリっぽく動くように整えて公開してみました。
https://atsuyuki.github.io/qmk-configrator-jis-like-converter/?atsuyuki.github.io
QMKコンフィギュレーターからエクスポートしたJSONの中身をテキストボックスに張り付け、ボタンを押せば変換済みのJSONをダウンロードできます。
あとはQMKコンフィギュレーターにインポートし直してビルドすれば、日本語配列対応のファームウェアの完成です!
そしてキーボード自作熱の再来
そんなことをやっていたら、久しぶりにキーボード自作のモチベーションが上がってきたので、普段使いしているDactyl Manuformのバックアップ機を作ることにしました。
名付けて「Dactyl Manuform Skelton Edition 4x5(仮)」3Dプリントパーツを小分けに分割することで、プリント失敗のリスクを分散する狙いです。
これも、近いうちにビルドログを書くつもりなのでお楽しみに。