Claw44であそぼ。②(レイヤー数拡大編)
はじめに
一日で一番手に触れているものはキーボードという思い込みから、不便さを克服することにより得られる快楽を毎日満喫するために小さなキーボードの導入を思い立ち、2022年12月にClaw44の購入を決意。プログラミングと自作キーボードの知識ゼロから始めた自作キーボード素人によるClaw44カスタマイズの奮闘記を綴っていきたいと思います。
レイヤー数がもっとあれば問題
Claw44のデフォルトのレイヤー数は4つです。40%キーボードであればキー数が少ない不便さを満喫するために、この4つのレイヤーを駆使することになります。さらにいうと、1つのキーボードで全ての操作を可能にし、様々なシーンで快適に使いこなすためにも避けては通れない問題、つまり「レイヤー数がもっとあれば問題 」に直面します。かく言う猫山王もClaw44を使い始めて直ぐにこの問題に直面しました。
レイヤー数がもっとあれば問題の解決策は単純明快で、レイヤー数を増やすためにソースコードを書き換えるということです。このソースコードを書き換えるという作業が曲者で、一般的には下記の2つの方法になります。ただ、猫山王がレイヤー数がもっとあれば問題に直面した当時は2.のRemapの親切機能はないため1.を利用する他なく、プログラミングの知識ゼロの猫山王にとってみればQMK MSYSの真っ黒の画面に囲まれながら暗黒世界を暗中模索しながら解決のための呪文を少しずつ覚えていくという、まさに不便さを満喫した楽しい思い出が走馬灯のように蘇ります。
1.QMKビルド環境を構築してQMK Firmwareを利用する
2.Remapの新機能のファームウェアビルド機能を利用する
レイヤー数の増やし方
今回はQMKビルド環境の構築が不要で、初心者にも優しい「Remapの新機能のファームウェアビルド機能」を利用した方法を紹介したいと思います。Remapの公式サイトとYoichiroさんのサイトにも使用方法の紹介がありますので合わせて参考にしてください。
1.RemapのキーボードカタログからClaw44を探そう
Remapのトップ画面のFIND A KEYBOARDをクリックして、キーボードカタログを表示。このキーボードカタログはRemapに登録されているキーボードが掲載されていて見るだけでも楽しいです。
今回は左上にClaw44と入力し、下のSearchをクリック。するとClaw44 rev1とrev2が表示される壮観な景色を堪能したのちにClaw44 rev2をクリック。
2.Claw44のファームウェアビルド機能にいってみよう
Claw44 rev2の画面ではOVERVIEW、KEYMAP、FIRMWARE、BUILDの4つのタブが上部にあります。OVERVIEWタブではキーボードの紹介、KEYMAPタブでは公開されているキーマップを見ることができ、FIRMWAREタブではDefaultのファームウェアがアップロードされています。今回はBUILDをクリックして、この中でレイヤー数を増やすための呪文を書き換えていきます。
3.ファームウェアビルド機能のファイル構成をチェックしよう
Claw44のファームウェアビルド機能に入ったら左下のBUILD FIRMWAREをクリック。そうするとBuild Parametersなる白い画面が表示され、ソースコードのフォルダ構成が表示されます。レイヤーがもっとあれば問題を解決するために変更が必要なファイルは、Keyboardフォルダー下のconfig.hファイル、Keymapフォルダ下のkeymap.cファイルの2つです。何とたったこの2つのファイルを書き換えるだけでレイヤー数がもっとあれば問題を解決できます。それでは、 それぞれ書き換える方法については、ひとつひとつ解説していきたいと思います。
4.config.hファイルの内容を書き換えよう
config.hにはキーボードの基本的な設定が記載されています。ただ、Remapのファームウェアビルド機能から見ることができる内容は限定されているようです。QMKビルド環境を構築して、キーボードの無限の可能性を引き出し、お好みの機能をジャンジャン搭載するためにQMK MSYSの暗黒世界の中を突き進むのであればさらに濃い呪文の記載が必要です。ただ、レイヤー数がもっとあれば問題を解決するだけなら、Remapのファームウェアビルド機能で十分といえるでしょう。それでは、早速左のconfig.hをクリック、右上のBy editing a codeをクリックして以下の2行の呪文を追加しましょう。
#define DYNAMIC_KEYMAP_LAYER_COUNT 6
#define LAYER_STATE_8BIT
上段の呪文は実際のレイヤー数を定義しています。今回は6と記載することで、レイヤー数はデフォルトの4から6に増やすことができます。また下段はレイヤー数の上限をビット数で表現しています。1ビット1レイヤーなのですが、デフォルト設定が32ビットなので、ファームウェア容量を小さくするためにも6レイヤーなので8ビット(8レイヤーまでOK)に指定します。
これらの数字を増やすことでキーボードのレイヤー数はお好みで増やすことができますが、行数・列数やENCODER_MAP_ENABLE(拡張ボードによりロータリーエンコーダを使用しキーマッピングができる機能)の有効・無効により設定できるレイヤー数に制限がかかります。猫山王が試した限りでは、Claw44ではENCODER_MAP_ENABLEを有効にすると最大6レイヤー、ENCODER_MAP_ENABLEを無効にすると最大7レイヤーとなるようです。将来的にロータリーエンコーダの利用を可能にするロマンを残しておくためにも、今回はデフォルトのENCODER_MAP_ENABLEを有効のままにした最大6レイヤーを設定します。
5.keymap.cファイルの内容を書き換えよう
続いて、keymap.cをクリック。keymap.cにはキーマッピングの呪文が記載されています。右上のBy editing a codeをクリックすると何やら難解な呪文が巻物のようにたくさん記載されているのが分かります。全てを理解する必要はありませんが、書き換える必要がある呪文については簡単に翻訳しておきます。
enum layer_number {
_QWERTY = 0,
_RAISE,
_LOWER,
_ADJUST,
};
ここでは、キーマップの定義のためのレイヤー名称とその番号が定義されています。デフォルトでは4つのレイヤーなので、_QWERTYから _ADJUSTまで4つの名称がつけられています。今回はレイヤー数を6に増やしたので、呪文を拡張して名称を6つ用意する必要があります。レイヤーごとのナイスな名称が思いつかないというキーボード初心者の猫山王の場合は、例えば以下のように呪文に書き換えました。
enum layer_number {
_10 = 0,
_11,
_12,
_13,
_14,
_15,
};
上記のレイヤー名称の変更(_QWERT→_10、_RAISE→_11、_LOWER→_12、_ADJUST→_13、_14追加、_15追加)により、下記の_LOWER、_RAISEもそれぞれ_12、_11に変更する必要があります。
呪文変更前
#define KC_L_SPC LT(_LOWER, KC_SPC) // lower
#define KC_R_ENT LT(_RAISE, KC_ENT) // raise
呪文変更後
#define KC_L_SPC LT(_12, KC_SPC) // lower
#define KC_R_ENT LT(_11, KC_ENT) // raise
続いて、const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS]以下の長い呪文です。例えば、KC_Q の箇所を押すとQが入力されるといった言わばキーマップそのものの呪文が記載されています。また、レイヤーごとのキーマップが記載されていているためkeymap.cのなかでも一番長い呪文となっていて、 [_QWERTY] = LAYOUT( ではメインレイヤーのキーマップ、 [_RAISE] = LAYOUT( はその次のレイヤーといった感じで、デフォルトのenum layer_numberのレイヤー名称と一致していることが確認できます。
ここの呪文についても拡張した6つのレイヤー名称に変更する必要があります。また、enum layer_numberとも記載をそろえる必要があり、例えば添付のような呪文が考えられます。
そして最後はEncoder Map部分の呪文の書き換えです。Claw44では、拡張プレートによりロータリーエンコーダを搭載し、各レイヤーごとの挙動を設定することができます。この部分についてもデフォルトの4レイヤーに対応した呪文から今回6レイヤーに対応した呪文に書き換える必要があります。
また、enum layer_numberとも記載を揃えつつ、拡張プレートを左右それぞれに装着し、4つのロータリーエンコーダを搭載した天下無敵の無双状態のロマンス仕様にともいうべく究極のカルテット版Claw44であれば、例えば添付のような呪文が考えられます。
6.さあ、BUILDしよう
ここまでくれば最後はBUILDです。なお、今回変更したconfig.hとkeymap.cのファイルの右上にポチがついていると思います。右下のBUILDをクリックしてステータスがSuccessになれば、呪文のコンパイルに無事成功です。このあとはDownloadしてqmk_toolboxを利用するか、Flashをクリックしてファームウェアを書き換えることでミッション完了。ちなみに猫山王のへっぽこノートPCでは、QMK MSYSのコンパイルにはものすごく時間が掛かりますが、Remapのファームウェアビルド機能であればほんの一瞬でコンパイルが完了します。
実際にレイヤー数を拡張してみて
レイヤー数を6にしてからは、限られたレイヤー数でキーマップを煮詰めていくという不便さからくる快楽を味わうことはできなくなりました。一方で、そこまでに到達する道のりは、QMKビルド環境を構築してQMK MSYSの暗黒世界を突き進みながら、日々エラーコードと格闘することで呪文を一つ一つ覚えていくという、まさに不便さを克服することにより得られる快楽そのものであり、究極のキーボードを探求するという自作キーボードの新たな世界の扉を開けた感があります。Remapのファームウェアビルド機能で手軽にレイヤー数を増やすことができるというのはビルド環境がへっぽこノートPCしかない猫山王にとっても本当にありがたいといえます。
さて、レイヤー数を7にする方法はENCODER_MAP_ENABLEを無効にします。Keymapフォルダのrules.mkファイルには、ENCODER_MAP_ENABLE = yes という記載があります。この記載を削除して、config.hやkeymap.cの記載をそれぞれレイヤー数を7にした呪文に更新すればレイヤー7仕様の出来上がり。ただ、このままだとロータリーエンコーダを搭載しても全く機能せず、新たな呪文を使ってソースコードにロータリーエンコーダの機能を定義する必要があります。しかしながら、この方法だとRemap上で他のキーと同様にロータリーエンコーダの設定変更ができず、変更したい場合には毎回ソースコードを書き換えてコンパイルするという修行をいとわない、いわば究極の不便さからくる快楽を好む賢者仕様といえるでしょう。
レイヤーというものは、増やせる呪文を覚えてしまうと多ければ多いほど良いという幻想にかられる中毒性が非常に強い呪文といえるでしょう。そんな猫山王のClaw44の現在のレイヤー数は21とほぼアルファベットの数に等しい数にまで到達しています。どうすればここまでレイヤー数を増やすことが出来るかということについては、別の奮闘記で紹介したいと思います。
自作キーボードは敷居が高いと思われている方にとって、一日で一番手に触れているものはキーボードということで、不便さを克服することにより得られる快楽の世界への入門のための勇気づけとなれば幸いです。
次回
さて次回はTap Dance導入の奮闘記をお届けします。Danceというと何やら楽しそうというイメージがありますね。Tap Danceを用いて自分好みかつ独自路線まっしぐらのキーマップを成熟させるという過程は、レイヤーを増やすだけでは決して到達しえない快楽を味うことができます。さらに加えて言えば、Tap Danceの導入そのものが自作キーボードの醍醐味の一つともいえるでしょう。