自作キーボード温泉街の歩き方

自作キーボードの世界は温泉に例えられます。自作キーボードの温泉街の楽しい歩き方を紹介します。

(初心者編)QMK Configuratorを使ってキーマップを書き換えよう

この記事は自作キーボードアドベントカレンダー2019 その1 7日目の記事です。

昨日の記事は@ackylaさんの「オリジナルキーボード作成中(未完成) - Qiita」でした。アクリル一体型のキレイなキーボードでしたね。

 

こんにちは。自キ温泉ガイドのサリチル酸です。

f:id:Salicylic_acid3:20181119233252p:plain

今回は初心者向けの記事第二弾、キーマップの簡単ないじり方を紹介したいと思います。

はじめに

メディアなどで色々な人に自作キーボードというムーブメントが認知されるようになって以来、興味を持つ方の裾野が広がってきました。

その中にはコマンド画面(黒い文字がズラズラ出てくる画面)をほとんど使ったことがなく、あのコマンド画面に恐怖と苦手意識を持つ方もいると感じています。

しかしながらキーマップを自分好みに出来ない場合、自作キーボードの魅力は半減してしますし、40%キーボードなどはデフォルトマップの思想的が体に合わない場合、とても使いづらくなってしまいます。

ということで今回は嫌な黒い画面を使わずにキーマップを自由に書き換えられるQMK Configuratorについてお話ししたいと思います。

QMK Configuratorとは

QMKにマージされたキーボードのキーマップをウェブ画面上から操作して新しいキーマップを作り、それをダウンロード出来るWebサービスです。

config.qmk.fm

※BLE Micro Proは専用のConfiguratorがありますのでそちらを利用してください。

sekigon-gonnoc.github.io

ダウンロードしたファームウェアはキーボードへの書き込みは前に記事にしたQMK Toolboxで行います。

salicylic-acid3.hatenablog.com

2021年8月4日現在は以下のツールのほうが便利なので、基本的にそっちを利用してください。

salicylic-acid3.hatenablog.com

salicylic-acid3.hatenablog.com

QMK Configuratorで出来ること

f:id:Salicylic_acid3:20191206013540p:plain

アルファキーの書き換え

f:id:Salicylic_acid3:20191206014430p:plain

上のキーボードの画像で書き換えたいキーを選択し、下のKEYCODESから変更したいキーコードを選んで書き換えます。

※上のキーボードの画像を選んで、設定したいキーを押してもOKです。

その時使いたいキーボードの入力タイプに合わせてansi英語キーボード)またはiso/jis(日本語キーボード)のタブから選択してください。

日本語キーボードとして使いたい場合、下のTipsも参照してください。

モデファイアキーの書き換え

これもアルファキーと同じです。

キーボードの画像から置き換えたいキーを選んで、下のKEYCODESから変更するだけです。

※上のキーボードの画像を選んで、設定したいキーを押してもOKです。

拡張キーの定義

ここからより自作キーボードっぽくなっていきます。

quantumタブを開いてください。

f:id:Salicylic_acid3:20191206021004p:plain

詳しくは公式ドキュメントで書かれていますので、ここでは主に使う物を紹介します。

レイヤーキー

レイヤーキーとは、通常のキーマップ(QWERTY等)の上に別のキーコードを被せる(レイヤードする)ことからレイヤーキーと呼びます。

60%キーボード(ファンクションキー・テンキーレス)や40%キーボード(更に数字キーレス)には必須です。

f:id:Salicylic_acid3:20191206022045p:plain

左がレイヤー0(ベース)で右がレイヤー1。MO(1)キーを押している間右のキーマップになる。

f:id:Salicylic_acid3:20191206024003p:plain

表示するレイヤーはキーボードの画像の左側の数字をクリックする。
レイヤーキー名 説明
MO 押している間だけレイヤーに移動
TG 次に同じTGキーを押すまでレイヤーに移動
DF デフォルトレイヤーの切り替え
※主にQWERTYと別のキーマップへの切り替えに使用する
OSL 次のキーだけ別レイヤーに移動し、押したら元のレイヤーに戻る
LT0~15 短く単押しでキーコード、長押しでレイヤーに移動

※MO及びLTに割り当てたレイヤーキーの移動先のキーは▽に割り当てる必要があります。▽は下の特殊キー参照。

f:id:Salicylic_acid3:20191206024101p:plain

LT以外は移動先のレイヤーを赤丸のテキストボックスに入力する

f:id:Salicylic_acid3:20191206024247p:plain

LTは移動先のレイヤーの数字が付いたLT1~15を選び、テキストボックスに単押し時のキーコードを選ぶ
モデファイヤキーコンビネーション(ドキュメントではMod-Tap Key)

シフトキーやAltキーなどのモデファイヤキーと他のキーを組み合わせます。

これを使うとWindowsでたまに使うCtrl+Alt+Delがワンキーで出来たりします。

f:id:Salicylic_acid3:20191206023101p:plain

特殊キー

キーと言うか、機能というか。

特殊キーコード 説明
N/A 特に何もしない
下のレイヤーのキーコードを踏襲
Reset ProMicro等のリセット
Any 任意のキーコードを送信

Anyはテキスト設定したテキストボックスの中にキーコードを直接入力することで、もう少し複雑な事ができるようになります。

設定例は以下を参照してください。

キーコード 説明
LT(0~7,キーコード)

単押しでキーコードを、

長押ししている間レイヤーに移動します。

MT(MOD_LCTRL, キーコード)

単押しではキーコードを、

長押ししている間Ctrlキーに変化します。

MT(MOD_LSFT, キーコード)

単押しではキーコードを、

長押ししている間Shiftキーに変化します。

MT(MOD_LALT, キーコード)

単押しではキーコードを、

長押ししている間Altキー/OPTキーに変化します。

MT(MOD_LGUI, キーコード)

単押しではキーコードを、

長押ししている間Winキー/CMDキーに変化します。

LSFT(キーコード)

Shiftキーを押しながらキーコードのキーを押します。

※日本語環境で記号を直接入力する場合にも使用します。

LCTL(キーコード) Ctrlキーを押しながらキーコードのキーを押します。
LALT(キーコード) Altキー/Optキーを押しながらキーコードのキーを押します。
LGUI(キーコード) Winキー/CMDキーを押しながらキーコードのキーを押します。
MEH(キーコード) ShiftキーとCtrlキーを押しながらキーコードのキーを押します。
HYPR(キーコード) ShiftキーとCtrlキーとWinキー/Optキーを押しながらキーコードのキーを押します。

キーコードについてはこちらを参照してください。

メディアキー及びマウスキー

これも自作キーボードっぽい機能です。

電源のオンオフやメーラー、エクセルの起動、音量ボリュームの上下、マウスポインタを動かしたりクリックする機能を利用可能です。

個人的にはスマホに接続して使うときにマウスキーがあると地味に便利でした。

特にBMPを使っているとスマホに繋ぎやすいので便利だと思います。

f:id:Salicylic_acid3:20191206223743p:plain

QMK Configuratorで出来ないこと

update_tri_layer_state

2つのレイヤーキーが押されたとき、さらに別のレイヤーに移動する機能。

例えばレイヤー1に移動しているときにレイヤー2のキーを押下したらレイヤー3に移動します。

1と2が逆でも同様です。

無いと地味に不便な機能です。

BLE Micro Pro用のQMK Configuratorなら可能です。

レイヤーインジケータ

レイヤーに合わせた光り方をするレイヤーインジケータなどはQMK Configuratorで生成したファームウェアでは動きません。

私は結構この機能好きなので、動かないのは残念ですね。。

タップダンス

短い間隔で2連打すると別のキーコードを送信できる機能。

これも私は結構好きでよく使ってます。。

BLE Micro Pro用のQMK Configuratorなら可能です。

コンパイルする

キーマップが完成したら右上のCOMPILEボタンを押してコンパイル(キーボードの頭脳部分が使える形式に変換)します。

f:id:Salicylic_acid3:20191206224908p:plain

COMPILEボタンを押すと芋がグルグルしてファームウェアコンパイル(キーボードの頭脳部分が使える形式に変換)されます。

f:id:Salicylic_acid3:20191206225047p:plain

なぜジャガイモなのかはよくわからない

芋が焼けた後、コンパイルしてできた書き込み用ファイルをダウンロードします。

f:id:Salicylic_acid3:20191206225537p:plain

ダウンロードしたファイルをQMK Toolboxに読み込ませて書き込みます。

Tips

日本語キーボードの記号について

日本語キーボードの記号と英語キーボードの記号ですが、同一のキーコードでも出力されるものが異なります。

以下に違いがあるものについてまとめてみましたので参考にしてみてください。

記号 対応するキーコード
半角/全角 KC_GRV
, | KC_INT3
^, ~ KC_EQL
@, ` KC_LBRC
[, { KC_RBRC
:, * KC_QUOT
], } KC_NUHS
, _ KC_INT1
" LSFT(KC_2)
& LSFT(KC_6)
LSFT(KC_7) 
( LSFT(KC_8)
) LSFT(KC_9) 
= LSFT(KC_MINS) 
~ LSFT(KC_EQL) 
| LSFT(KC_INT3)
` LSFT(KC_LBRC)
{ LSFT(KC_RBRC)
+ LSFT(KC_SCLN) 
* LSFT(KC_QUOT)
} LSFT(KC_NUHS)
_ LSFT(KC_INT1)

BLE Micro Pro用のQMK Configuratorの場合、上記変換済みのJPタグが利用可能です。

セーブ&ロード

キーマップのダウンロードとアップロードに対応しているので、とりあえず作業内容が消えないようにダウンロードしておきましょう。

f:id:Salicylic_acid3:20191207011414p:plain

日本語化

あんまり日本語が必要な部分は無いのですが、一応日本語化できます。

f:id:Salicylic_acid3:20191206013746p:plain

キーキャップセットの変更

気分の問題に近いですね。

好きな色でやりましょう。

f:id:Salicylic_acid3:20191206013955p:plain

チートシートの印刷

作成したキーマップをいきなり全て覚えるのは無理ですので、チートシートを用意すると使いやすくなります。

f:id:Salicylic_acid3:20191206234851p:plain

PRINT KEYMAPボタンをクリックすると、作成したキーマップを印刷する画面が出てきます。

f:id:Salicylic_acid3:20191206235137p:plain

Fast Inputを有効にして連続入力する

Fast Input機能を有効にすると、キーコードを入力した後次のキーに移動します。

キーボードのキーを押して設定するときに便利です。

f:id:Salicylic_acid3:20191207001728p:plain

キーボードのテストをする

キーボードを組み立てたあとでキーが全て反応するかをテストすることも出来ます。

f:id:Salicylic_acid3:20191207004129p:plain

押した場所だけでなく、チャタリング(キースイッチの不良)も検出することが出来ます。

f:id:Salicylic_acid3:20191207004714p:plain

個人的経験に基づく設定の煮詰め方

特に40%キーボードなどでは絶対的にキー数が足りないので、かなりの試行錯誤と工夫が必要になります。

本内容は私が試行錯誤した結果、どのようにSalicylicキーマップ(私が設計したキーボードに必ず入れる、実際に私が使うキーマップ)に落ち着いたかを紹介します。

1.元の普通のキーボードに戻りやすい事を念頭に置く

これは全ての人が全ての状況でマイキーボードで入力できるとは限らないと考えるためです。

職場のPCがノートPCだったり、サーバールームで作業する必要があったり、他のパソコンで作業する必要があったりする事は容易に想像できるからです。

逆に自分のキーボード以外で入力しない人はこの限りではありません。

最適化街道を突き進もう!

2.何はなくともパスワードが打ちやすいこと

昨今パスワードには複数の文字種を要求される事も多いでしょう。

本来は全ての環境事に別々のパスワードを用意するべきですが、私の頭はそんなに柔らかくないので、多くて10種位のパスワードを使い分けてると思います。

そしてパスワードに数字が含まれる場合、それは最上段の数字列を利用していると思います。※連続した数字列はテンキーを使ってることもあると思います。

そのパスワードをほかのキーボードと同じくらいの位置関係で打てるように工夫すると、普通のキーボードへ戻りやすくなります。

具体的には5を含むパスワードとすると、今までの癖でTキーの上あたりを探ってしまいます。

それをテンキーの様なレイヤーで打ってしまうと普通のキーボードには戻りづらくなりますので、Tキーの部分に5が来るようにレイヤーを設定します。

f:id:Salicylic_acid3:20191206025013p:plain

3.変換無変換キーは要るか

JISキーボードによくある変換無変換キー。

私は両方必要なので、親指ホームキーの両脇に設置します。

f:id:Salicylic_acid3:20191206025122p:plain

4.スペースキーはどちらで押すか

普通のキーボードの場合、スペースキーは親指のホームポジションで押しますが、親指というのは握ったり開いたりして横に動かすのは遅く、縦に叩く動作は早く行える指です。

そのため親指のホームポジションには頻繁に押して、かつ連打する(Not長押し)ようなキーを割り当てるといいと思います。

私の場合、それはエンターキーです。

普段スペースキーを押していた指とは逆の親指にエンターキーをアサインします。

f:id:Salicylic_acid3:20191206025528p:plain

5.親指のホームポジションにレイヤー機能も割り当てる

親指は横には動かしづらいので、ホームに出来るだけ詰め込みたいのですが、親指で押せるキーには限界があります。

そこで、LTキーという長押ししている間だけレイヤー移動できるキーコードを利用します。

その代わり長押しによる連続入力が出来なくなりますが、私にとって支障はないのでOK。

同じように変換無変換も長押しの場合はAltキーとWindowsキーとなるようにしておきます。

f:id:Salicylic_acid3:20191206231603p:plain

6.よく押すキーを親指キーに配置

BackSpaceキーやDeleteキーをよく使うので親指キーに配置します。

エンターキーやスペースキーと違い、削除キーは長押しして長文削除をするのでレイヤーキーとの重畳は避けてそのまま置きます。

f:id:Salicylic_acid3:20191206231659p:plain

7.カーソルレイヤーを作成

カーソル操作は右手だけで完結させたいので右手のレイヤーキーを押すと右手がカーソルキーになるようにします。

ついでに反対側にファンクションキーを並べます。

さらに私はCtrlキーやShiftキーを押しながらカーソルキーをよく使うので、F11とF12の長押し時にはCtrlキーやshiftキーになるように設定します。

F1は私にとって不要なだけの存在なので削除です。

f:id:Salicylic_acid3:20191206030401p:plain

8.記号レイヤー、テンキーレイヤーを作成

普通のキーボードの場合、記号はshiftキーを押しながら数字キーを押すなどして入力しますが、40%キーボードには数字キー列がありません。

また、キーキャップは基本英語配列用なので日本語キーボード使いにとってはキーキャップの印字はミスリードでしかありません。

しかしながらレイヤーキー、shiftキー、数字キーの3キーを押さないと数字が入力できないようにしてしまうと非常に煩わしいので、記号を直で押せるレイヤーを作成します。

この時、自分がよく使う記号を人差指と中指のホームと上のキーに配置します。

※最下段のキーはレイヤーキー押しながらだと押しづらい。

f:id:Salicylic_acid3:20191206031119p:plain

9.完成

完成したら後はチートシートなどを作ってとにかく慣れます。

気になるところが有ったらチートシートに書き込んで、とにかく自分の使いやすいように洗練していきます。

意外にたまーに使う記号がないことに気づいたりして、どこに入れ込もうか考えるのはとても楽しいです。

(設計者向け)QMK Configuratorにプルリクする

昔はKeyboard配下にマージされれば誰かがやってくれていたみたいですが、今は自分でやる前提になっているのでよく読んでプルリクを出しましょう。

キーレイアウトをKLE(Keyboard Layout Editor)で作成し、info.jsonを作成する

みんな大好きKeyboard Layout Editorでキーレイアウトを作成します。

f:id:Salicylic_acid3:20191208000831p:plain

分割キーボードは少し左右を離してあげるとわかりやすいです。

この時キーを傾けてはいけません

実際のキーボードのキーが傾いていたからと言って傾けると後でレイアウトが崩れてしまいます。

レイアウトが作成できたらRow Dataタブを開き、中の文字列を全部コピーします。

f:id:Salicylic_acid3:20191208000954p:plain

QMKのinfo.json作成ツールのInputに貼り付けてConvertします。

QMK Firmware - Convert KLE to QMK info.json

f:id:Salicylic_acid3:20191208001146p:plain

Outputの欄をコピーし、各キーボードディレクトリの直下にinfo.jsonファイルを作成して貼り付けます。

f:id:Salicylic_acid3:20191208001407p:plain

貼り付けたらkeyboard nameやurl、maintainerを記入します。

後はlayout以下のインデント(半角スペースなどを行頭を挿入して揃えること)を整えておくとレビュワーが見やすいのでできるだけ整えておくといいと思います。

f:id:Salicylic_acid3:20191208001715p:plain

info.jsonを作成したらプルリクを出します。

マージ後、次の作業をします。

キーマップを作成する

デフォルトマップもない状態なので、QMK Configuratorにキーマップのプルリクを出しましょう。

デフォルトマップも無いとQWERTY配列を使う場合でもアルファキー全てを書かなければいけないので、ユーザに負担を強いてしまいます。

f:id:Salicylic_acid3:20191206233350p:plain

キーマップはQMK Configuratorで作った物を使うのが一番早い※けど、普通に作ることも出来ます。

※そのままだと改行がなくてレビュワーが見づらいので、改行してインデントして欲しい。

f:id:Salicylic_acid3:20191206233721p:plain

QMK Configuratorで作ってJSONファイルをダウンロードします

その場合、Ctrlキー、Shiftキー、Rightキー等、通常のファームウェアでは複数の書き方(KC_LCTRL、KC_LCTL等)が許容されていたが、QMK Configuratorでは一つの書き方のみ使用できる(上記例だとKC_LCTLのみ)のでご注意ください。

キーマップは以下に配置します。

qmk_configurator/public/keymaps/

命名規則は「キーボード名」_「rev」_「キーマップ名」です。

(rev1というディレクトリを使っている場合)表示除外設定をする

そのままだと『キーボード名』と『キーボード名/rev1』が並んでしまいます。

利用者がどちらを利用していいかわからなくなるので、使わない方を非表示化しましょう。

f:id:Salicylic_acid3:20191206234743p:plain

この状態において表示したくない方を以下のファイルのキーボード名がズラズラ書かれている部分に表示したくないメニュー名を書き込みます。

qmk_configurator/src/jquery.js

f:id:Salicylic_acid3:20191206235709p:plain

おわりに

初心者向けのキーマップ作成手順についていかがでしたでしょうか。

本記事に対して問い合わせ等あれば遠慮なく私のDiscordまでどうぞ。

salicylic-acid3.hatenablog.com

本記事はNaked64SFで書きました。