Keychron K7 Max のキーマップ設定メモ

**Keychron K7 Max** (ANSI / White Backlight / 赤軸) を買った。

https://amzn.to/4hlKzwR

キーボードはもう6年くらい MISTEL MD650L を使っているのだけど、さすがにそろそろ違うのを検討したくなってきた。

https://hoto17296.hatenablog.com/entry/md650l-after

MD650L は Macbook に近い標準的なレイアウトでありながらロープロかつ分割という希少な選択肢であったが、現在は販売されておらず中古でしか入手できないところが厳しい。(念のため4台購入してストックしている)

しかし代替となるキーボードを探そうにもそう簡単に好みの製品は見つからない。そんな中で「割れてないキーボードにもチャレンジしてみるか」ということで Keychron K7 Max に手を出してみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16369/be12bddb-6a18-405d-8978-d17722e403d0.png)

ほとんどの人にはどうでもいいことと思うが、**MD650L とキー配列が全く同じ** である。たいへん助かる。

その他の特徴はこんな感じ。

- QMK/VIA 対応していてキーマップのカスタマイズが簡単かつ高機能
- 有線 (USB Type-C) だけでなく Bluetooth または USB ドングル (2.4GHz) による無線接続もできる
    - しかしバッテリが内蔵されていることを意味するので、バッテリ寿命を考えると半永久的に使えるわけではなさそうという点ではネガティブ (HHKB みたく電池式だったら嬉しかった...)
- ロープロファイル (Gateron Low Profile, 赤軸 or 茶軸)

「分割」以外は概ね MD650L の上位互換な印象。

## キーマップを変更する (macOS)
QMK/VIA 対応していることもあり、キーマップ変更は Keychron Launcher[^launcher] という Web アプリから行える。単純なキーの割当ならポチポチするだけでできる。

[^launcher]: Keychron Launcher https://launcher.keychron.com/

しかし、ちょっと複雑なキー割り当てが簡単にできなくてハマった。例えばこういうの。

- `capslock` キーを「単体で押したときは `escape`」「他のキーと組み合わせて押したときは `ctrl`」にする
- `pgup` キーを「`command` + `shift` + `[`」にする

以前に自作キーボードを作ったときに使った類似ツールの Remap[^remap] だとこのへんすごい簡単に設定できた記憶があるのだけど、Keychron Launcher ではそこまで簡単ではないらしい。ちなみに「Keychron 製品でも Remap 使えるのでは？」と思って試してみたが無理だった。(実はやる方法があるかもしれないが)

[^remap]: Remap https://remap-keys.app/

あれこれ調べてわかったことは **「`Any` キーを割り当てようとするとテキストボックスが現れるので、そこに任意の QMK キーコードを指定できる」** ということだった。わかるわけなくない？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16369/7ec4138a-4832-4992-be31-da2d83955d54.png)

### 単体/複合で振る舞いを変える
`MT()` (Mod-Tap) を使うと実現できる。

- `MT(MOD_LCTL, KC_ESC)`
    - 単体で押したときは `escape`
    - 他のキーと組み合わせて押したときは `ctrl`

### 修飾キーを組み合わせる
修飾キーを組み合わせるための記法を使うと実現できる。

- `LSG(KC_LBRC)`
    - `command` + `shift` + `[`
    - タブ移動するショートカット
- `LSG(KC_RBRC)`
    - `command` + `shift` + `]`
    - タブ移動するショートカット
- `RAG(KC_BSLS)`
    - `command` + `option` + `\`
    - 1Password のクイックアクセスを表示するショートカット

詳しくは QMK のドキュメントに書いてある。

https://docs.qmk.fm/feature_advanced_keycodes

### IME のオンオフを切り替える
以下のキーコードを使うと IME のオンオフ切り替えができる。なんでこのキーコードなのかは全然わからない。

- `KC_HANJ` (漢字 / Hanja) → IME オフ (英数)
- `KC_HAEN` (한영 / HanYeong) → IME オン (かな)

ちなみにこのキーコードは Windows 11 でも同様に動作した。
※ `設定` > `時刻と言語` > `言語と地域` > `日本語` > `言語のオプション` で、キーボードレイアウトを「英語」に設定しておく必要があるらしい。[^ime]

[^ime]: [【US配列キーボード】QMK/VIAを使った日本語入力切り替えの設定方法（Anyキー、MOD-TAP／Win・Mac対応） | Web制作TIPS、ガジェット系ブログ | MAST DESIGN](https://mastdesign.me/20241025-uskeyboard-qmk-via-nihongo-kirikae/)

スペースキーの左右のキーを単体で押したときに IME が切り替わるように設定したいので、実際には以下のように設定した。

- `MT(MOD_LGUI, KC_HANJ)`
    - 単体で押したときは `command` / 他のキーと組み合わせて押したときは `英数`
- `MT(MOD_RGUI, KC_HAEN)`
    - 単体で押したときは `command` / 他のキーと組み合わせて押したときは `かな`

## ファームウェアをカスタマイズする (やってない)
キーマップを設定したあと試しに触っていたところ、TAPPING_TERM の値を調整したい気持ちになってきた。

https://qiita.com/cognitom/items/a3985e44749d55d900b5

この設定は Keychron Launcher ではできないので、やりたければ自分でファームウェアをビルドして書き込む必要があるらしい。

Keychron 製品のファームウェアは GitHub で公開されている。例えば今回の K7 Max のファームウェアは以下。

https://github.com/Keychron/qmk_firmware/tree/wireless_playground/keyboards/keychron/k7_max

自分はまだそこまではやっていないが、やっている人の様子を見ると qmk コマンドを使ってビルドしたり書き込んだりする様子。

https://note.com/euskace/n/n32191e7b1eba