この記事は自作キーボードアドベントカレンダー2019 その1 7日目の記事です。
昨日の記事は@ackylaさんの「オリジナルキーボード作成中(未完成) - Qiita」でした。アクリル一体型のキレイなキーボードでしたね。
こんにちは。自キ温泉ガイドのサリチル酸です。
今回は初心者向けの記事第二弾、キーマップの簡単ないじり方を紹介したいと思います。
- はじめに
- QMK Configuratorとは
- QMK Configuratorで出来ること
- QMK Configuratorで出来ないこと
- コンパイルする
- Tips
- 個人的経験に基づく設定の煮詰め方
- (設計者向け)QMK Configuratorにプルリクする
- おわりに
はじめに
メディアなどで色々な人に自作キーボードというムーブメントが認知されるようになって以来、興味を持つ方の裾野が広がってきました。
その中にはコマンド画面(黒い文字がズラズラ出てくる画面)をほとんど使ったことがなく、あのコマンド画面に恐怖と苦手意識を持つ方もいると感じています。
しかしながらキーマップを自分好みに出来ない場合、自作キーボードの魅力は半減してしますし、40%キーボードなどはデフォルトマップの思想的が体に合わない場合、とても使いづらくなってしまいます。
ということで今回は嫌な黒い画面を使わずにキーマップを自由に書き換えられるQMK Configuratorについてお話ししたいと思います。
QMK Configuratorとは
QMKにマージされたキーボードのキーマップをウェブ画面上から操作して新しいキーマップを作り、それをダウンロード出来るWebサービスです。
※BLE Micro Proは専用のConfiguratorがありますのでそちらを利用してください。
ダウンロードしたファームウェアはキーボードへの書き込みは前に記事にしたQMK Toolboxで行います。
salicylic-acid3.hatenablog.com
2021年8月4日現在は以下のツールのほうが便利なので、基本的にそっちを利用してください。
salicylic-acid3.hatenablog.com
salicylic-acid3.hatenablog.com
QMK Configuratorで出来ること
アルファキーの書き換え
上のキーボードの画像で書き換えたいキーを選択し、下のKEYCODESから変更したいキーコードを選んで書き換えます。
※上のキーボードの画像を選んで、設定したいキーを押してもOKです。
その時使いたいキーボードの入力タイプに合わせてansi(英語キーボード)またはiso/jis(日本語キーボード)のタブから選択してください。
日本語キーボードとして使いたい場合、下のTipsも参照してください。
モデファイアキーの書き換え
これもアルファキーと同じです。
キーボードの画像から置き換えたいキーを選んで、下のKEYCODESから変更するだけです。
※上のキーボードの画像を選んで、設定したいキーを押してもOKです。
拡張キーの定義
ここからより自作キーボードっぽくなっていきます。
quantumタブを開いてください。
詳しくは公式ドキュメントで書かれていますので、ここでは主に使う物を紹介します。
レイヤーキー
レイヤーキーとは、通常のキーマップ(QWERTY等)の上に別のキーコードを被せる(レイヤードする)ことからレイヤーキーと呼びます。
60%キーボード(ファンクションキー・テンキーレス)や40%キーボード(更に数字キーレス)には必須です。
レイヤーキー名 | 説明 |
MO | 押している間だけレイヤーに移動 |
TG | 次に同じTGキーを押すまでレイヤーに移動 |
DF | デフォルトレイヤーの切り替え ※主にQWERTYと別のキーマップへの切り替えに使用する |
OSL | 次のキーだけ別レイヤーに移動し、押したら元のレイヤーに戻る |
LT0~15 | 短く単押しでキーコード、長押しでレイヤーに移動 |
※MO及びLTに割り当てたレイヤーキーの移動先のキーは▽に割り当てる必要があります。▽は下の特殊キー参照。
モデファイヤキーコンビネーション(ドキュメントではMod-Tap Key)
シフトキーやAltキーなどのモデファイヤキーと他のキーを組み合わせます。
これを使うとWindowsでたまに使うCtrl+Alt+Delがワンキーで出来たりします。
特殊キー
キーと言うか、機能というか。
特殊キーコード | 説明 |
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を使っているとスマホに繋ぎやすいので便利だと思います。
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ボタンを押してコンパイル(キーボードの頭脳部分が使える形式に変換)します。
COMPILEボタンを押すと芋がグルグルしてファームウェアがコンパイル(キーボードの頭脳部分が使える形式に変換)されます。
芋が焼けた後、コンパイルしてできた書き込み用ファイルをダウンロードします。
ダウンロードしたファイルを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タグが利用可能です。
セーブ&ロード
キーマップのダウンロードとアップロードに対応しているので、とりあえず作業内容が消えないようにダウンロードしておきましょう。
日本語化
あんまり日本語が必要な部分は無いのですが、一応日本語化できます。
キーキャップセットの変更
気分の問題に近いですね。
好きな色でやりましょう。
チートシートの印刷
作成したキーマップをいきなり全て覚えるのは無理ですので、チートシートを用意すると使いやすくなります。
PRINT KEYMAPボタンをクリックすると、作成したキーマップを印刷する画面が出てきます。
Fast Inputを有効にして連続入力する
Fast Input機能を有効にすると、キーコードを入力した後次のキーに移動します。
キーボードのキーを押して設定するときに便利です。
キーボードのテストをする
キーボードを組み立てたあとでキーが全て反応するかをテストすることも出来ます。
押した場所だけでなく、チャタリング(キースイッチの不良)も検出することが出来ます。
個人的経験に基づく設定の煮詰め方
特に40%キーボードなどでは絶対的にキー数が足りないので、かなりの試行錯誤と工夫が必要になります。
本内容は私が試行錯誤した結果、どのようにSalicylicキーマップ(私が設計したキーボードに必ず入れる、実際に私が使うキーマップ)に落ち着いたかを紹介します。
1.元の普通のキーボードに戻りやすい事を念頭に置く
これは全ての人が全ての状況でマイキーボードで入力できるとは限らないと考えるためです。
職場のPCがノートPCだったり、サーバールームで作業する必要があったり、他のパソコンで作業する必要があったりする事は容易に想像できるからです。
逆に自分のキーボード以外で入力しない人はこの限りではありません。
最適化街道を突き進もう!
2.何はなくともパスワードが打ちやすいこと
昨今パスワードには複数の文字種を要求される事も多いでしょう。
本来は全ての環境事に別々のパスワードを用意するべきですが、私の頭はそんなに柔らかくないので、多くて10種位のパスワードを使い分けてると思います。
そしてパスワードに数字が含まれる場合、それは最上段の数字列を利用していると思います。※連続した数字列はテンキーを使ってることもあると思います。
そのパスワードをほかのキーボードと同じくらいの位置関係で打てるように工夫すると、普通のキーボードへ戻りやすくなります。
具体的には5を含むパスワードとすると、今までの癖でTキーの上あたりを探ってしまいます。
それをテンキーの様なレイヤーで打ってしまうと普通のキーボードには戻りづらくなりますので、Tキーの部分に5が来るようにレイヤーを設定します。
3.変換無変換キーは要るか
JISキーボードによくある変換無変換キー。
私は両方必要なので、親指ホームキーの両脇に設置します。
4.スペースキーはどちらで押すか
普通のキーボードの場合、スペースキーは親指のホームポジションで押しますが、親指というのは握ったり開いたりして横に動かすのは遅く、縦に叩く動作は早く行える指です。
そのため親指のホームポジションには頻繁に押して、かつ連打する(Not長押し)ようなキーを割り当てるといいと思います。
私の場合、それはエンターキーです。
普段スペースキーを押していた指とは逆の親指にエンターキーをアサインします。
5.親指のホームポジションにレイヤー機能も割り当てる
親指は横には動かしづらいので、ホームに出来るだけ詰め込みたいのですが、親指で押せるキーには限界があります。
そこで、LTキーという長押ししている間だけレイヤー移動できるキーコードを利用します。
その代わり長押しによる連続入力が出来なくなりますが、私にとって支障はないのでOK。
同じように変換無変換も長押しの場合はAltキーとWindowsキーとなるようにしておきます。
6.よく押すキーを親指キーに配置
BackSpaceキーやDeleteキーをよく使うので親指キーに配置します。
エンターキーやスペースキーと違い、削除キーは長押しして長文削除をするのでレイヤーキーとの重畳は避けてそのまま置きます。
7.カーソルレイヤーを作成
カーソル操作は右手だけで完結させたいので右手のレイヤーキーを押すと右手がカーソルキーになるようにします。
ついでに反対側にファンクションキーを並べます。
さらに私はCtrlキーやShiftキーを押しながらカーソルキーをよく使うので、F11とF12の長押し時にはCtrlキーやshiftキーになるように設定します。
F1は私にとって不要なだけの存在なので削除です。
8.記号レイヤー、テンキーレイヤーを作成
普通のキーボードの場合、記号はshiftキーを押しながら数字キーを押すなどして入力しますが、40%キーボードには数字キー列がありません。
また、キーキャップは基本英語配列用なので日本語キーボード使いにとってはキーキャップの印字はミスリードでしかありません。
しかしながらレイヤーキー、shiftキー、数字キーの3キーを押さないと数字が入力できないようにしてしまうと非常に煩わしいので、記号を直で押せるレイヤーを作成します。
この時、自分がよく使う記号を人差指と中指のホームと上のキーに配置します。
※最下段のキーはレイヤーキー押しながらだと押しづらい。
9.完成
完成したら後はチートシートなどを作ってとにかく慣れます。
気になるところが有ったらチートシートに書き込んで、とにかく自分の使いやすいように洗練していきます。
意外にたまーに使う記号がないことに気づいたりして、どこに入れ込もうか考えるのはとても楽しいです。
(設計者向け)QMK Configuratorにプルリクする
昔はKeyboard配下にマージされれば誰かがやってくれていたみたいですが、今は自分でやる前提になっているのでよく読んでプルリクを出しましょう。
キーレイアウトをKLE(Keyboard Layout Editor)で作成し、info.jsonを作成する
みんな大好きKeyboard Layout Editorでキーレイアウトを作成します。
この時キーを傾けてはいけません。
実際のキーボードのキーが傾いていたからと言って傾けると後でレイアウトが崩れてしまいます。
レイアウトが作成できたらRow Dataタブを開き、中の文字列を全部コピーします。
QMKのinfo.json作成ツールのInputに貼り付けてConvertします。
QMK Firmware - Convert KLE to QMK info.json
Outputの欄をコピーし、各キーボードディレクトリの直下にinfo.jsonファイルを作成して貼り付けます。
貼り付けたらkeyboard nameやurl、maintainerを記入します。
後はlayout以下のインデント(半角スペースなどを行頭を挿入して揃えること)を整えておくとレビュワーが見やすいのでできるだけ整えておくといいと思います。
info.jsonを作成したらプルリクを出します。
マージ後、次の作業をします。
キーマップを作成する
デフォルトマップもない状態なので、QMK Configuratorにキーマップのプルリクを出しましょう。
デフォルトマップも無いとQWERTY配列を使う場合でもアルファキー全てを書かなければいけないので、ユーザに負担を強いてしまいます。
キーマップはQMK Configuratorで作った物を使うのが一番早い※けど、普通に作ることも出来ます。
※そのままだと改行がなくてレビュワーが見づらいので、改行してインデントして欲しい。
その場合、Ctrlキー、Shiftキー、Rightキー等、通常のファームウェアでは複数の書き方(KC_LCTRL、KC_LCTL等)が許容されていたが、QMK Configuratorでは一つの書き方のみ使用できる(上記例だとKC_LCTLのみ)のでご注意ください。
キーマップは以下に配置します。
qmk_configurator/public/keymaps/
命名規則は「キーボード名」_「rev」_「キーマップ名」です。
(rev1というディレクトリを使っている場合)表示除外設定をする
そのままだと『キーボード名』と『キーボード名/rev1』が並んでしまいます。
利用者がどちらを利用していいかわからなくなるので、使わない方を非表示化しましょう。
この状態において表示したくない方を以下のファイルのキーボード名がズラズラ書かれている部分に表示したくないメニュー名を書き込みます。
qmk_configurator/src/jquery.js
おわりに
初心者向けのキーマップ作成手順についていかがでしたでしょうか。
本記事に対して問い合わせ等あれば遠慮なく私のDiscordまでどうぞ。
salicylic-acid3.hatenablog.com
本記事はNaked64SFで書きました。