uitspitss blog

プログラミングと音楽とエッセイ ※記載内容は個人の見解であり、所属する組織とは一切関係がありません。

MiniDoxの修行記録(キーマップ+キースイッチ+キーキャップ編)

この記事はアドカレ2018の自作キーボード#3の3日目の記事です。

アドカレ2018の自作キーボード#3 の2日目の記事は、大岡俊彦さんの

配列沼へのお誘い: 大岡俊彦の作品置き場

でした。(配列沼!!!)

adventar.org

もう12月、アドカレの時期ですね! 毎年、この時期はアドカレの記事を読むのに忙しくて、年末までに記事を書けなさそうなので、アドカレが始まる前に滑り込みでザッと書いちゃいます。

※書き終わらなかったので、アドカレ2018の自作キーボード#3に突っ込みました。

さて、私のブログ、前回の記事↓は MiniDox が Endgame という話でした。

uitspitss.hatenablog.com

ただ、このMiniDox を使い倒していくには、いくつか超えるべきがあります。(壁がいくつあるのかは自分でも分からない…)

今回は、以下の3つのについて書きたいと思います。

  • 第一の壁: キーマップ
  • 第二の壁: キースイッチ
  • 第三の壁: キーキャップ

第一の壁: キーマップ

自作キーボードをやる人の多くは、各メーカーが出している既成品のキー配置やキーマップが気に食わなくて、手を出しているのかと思っています。 自作キーボードでなくても、キーマップを変えること自体はソフトウェアでできたりしますが、キーボード自体にキーマップが書き込めると、どのPCに接続してもすぐに使えるので素敵です。

f:id:uitspitss:20181209012842p:plain
現在のMiniDoxのキーマップ

上図のkeyboard-layout-editor.comのリンク → Keyboard Layout Editor

ここ3ヶ月ほど使ってきて、今はこの状態になってます。まとめてみると複雑そうに見えますが、使っている分には複雑、という感覚がありません。要は修行あるのみです。

自作キーボードの多く、特に、キー数が少ないキーボードほど、キーマップにレイヤーというものを設定していることが多いです。 レイヤーはキー全体のマップを一時的に変化させるために設定されていて、それでキー数が少ないという欠点*1を補うわけです。 私のMiniDoxの場合、上図の下の方、親指でタイプする位置にある RAISELOWERと書かれている2つのキーがレイヤーを切り替えるキーです。 この2つのキーを使って、

  • RAISEキー も LOWERキー を押さない デフォルトレイヤー*2
  • RAISEキー を押した状態の RAISEレイヤー
  • LOWERキー を押した状態の LOWERレイヤー
  • RAISEキー と LOWERキー をともに押した状態の ADJUSTレイヤー

という4つのレイヤーを使い分けることができます。 実質30×4 + 6=126くらいの数のキーにマップできます!*3 ほぼ無限大ですね。

※これとは違って、タイプしてレイヤーをトグルする方法などもqmk_firmware*4の中にあります。→ QMK Firmware

f:id:uitspitss:20181201012640p:plain
Qキーの拡大図

例えば、上図の Q のキーの挙動は、

  • このキーのみを押した場合 → q が入力される
  • RAISEキーを押した状態でこのキーを押したとき → 1 が入力される
  • LOWERキーを押した状態で、このキーを押したとき → ! が入力される
  • RAISEキーとLOWERキーを押した状態で、このキーを押したとき → F1(ファンクション1キー)が入力される。
  • (もちろん、shift が押された状態で、このキーを押したとき → Qが入力されます。)

という具合で、他のキーも同様です。

このようにレイヤーを駆使していくわけですが、やはり物理的にキー数を減らしたことによる副作用が全くない、というわけではないです。 特に、複数のModifierキーを同時に押すような入力は困難になります。 だからと言って、その入力をModifierを削ったもので代用しようとすると、入力がバッティング(タイミング的ではなくキーの組み合わせ的な)します。 少し話が逸れますが、Emacsでは、キーバインディングがかぶってしまって、あれこれ考えますよね。あれに似た感じです。 ということで、Modiferを削らずに入力するには、キーにその組み合わせをマップしてしまいます。

f:id:uitspitss:20181202002308p:plain
Fキーの拡大図

例として、上図のFキーの SCSTFL というマップです。 qmk_firmwareのキーマップを記述するファイル keymap.c 内で、

#define KC_SCSTFL LGUI(KC_PERC)

という記述をしています。これはC言語のdefineで、この場合はKC_SCSTFLという表記にLGUI(KC_PERC)というのを割り当てています。 このKC_SCSTFLからKC_*5を除いたのがSCSTFLです。 このマップをされたキーを押すと、cmd + %が入力されます。 これは、Mac(Mojave)でスクリーンショットコントロールを起動するショートカットshift + cmd + 5 (cmd + %) です。 このように、よく使うショートカットにはマップを割り当てれば、Modifier同時押しの弱点は克服できます。

あと、私がよく使うマップでは、下の画像のあたりのキーのLOWERレイヤーに割り当てられているWN****のマップである、ウィンドウ系のショートカットのマップです。

f:id:uitspitss:20181201023928p:plain
ウィンドウ系のマップ

ウィンドウのコントロールSpectacle を使っていて、そのショートカットを割り当てています。

それから、地味に便利なのが、

f:id:uitspitss:20181202004605p:plain
SandS

上図のキーの RAISESFTSPCです。SandSの影響で、shift + spaceが入力できなくなっているのを補っています。 IMEが有効化されているときに、IMEを切り替えることなく半角スペースが入力できます。

f:id:uitspitss:20181203042840p:plain
親指周りのキーたち

他には、親指周りのキーは、キーを押している時間の長さで入力が変わるTap/HoldSPACE/SHIFTTAB/OPTIONESC/COMMANDENTER/CONTROLでキーマップ数を稼いでいます。 TapHoldの時間の長さや挙動等はqmk_firmwareで色々と調整可能です。→ QMK Firmware

また、このあたりの問題は、キーをタップする回数によって入力を変えられる tap dance という方法でも解決できるかと思います。 → QMK Firmware

好みのキーマップをとことん究められます!

第二の壁: キースイッチ

さて、次の壁はキースイッチ。このあたりは好みが別れますが、RealForceに慣らされてしまった私は、キーを押す力が衰えているので、押下圧をとにかく軽くしたいのです。 さらに、押している間にキースイッチ側からのリアクションはあまりいらないので、リニアなキーを好みます。

  • 押下圧が軽い
  • リニア

前使っていたErgoDoxがCherry赤軸で45gf、重すぎます。Gateron白軸で35gf。軽い、よいです。これにしましょう!

「でも、待って…。もっと軽くできる方法があるの。」(天の声)

ということで、Gateron白軸のキースイッチを分解してスプリングを変えます。

私は、spritdesignsで30S(20cN)*6を購入しました。

www.spritdesigns.com

これで、20cN(20gf)のキースイッチの完成です。慣れないうちは、ホームポジションを探るように指を乗せただけで入力されてしまいます。 しかし、慣れ(修行)です。慣れれば、霊気でも入力ができるようになると思います。(思います!)

その他には、

好みのキースイッチを作れます!

第三の壁: キーキャップ

最後はキーキャップ。ここでも軽さを求めます。 数値上ではなく、タイプした感覚的に押下圧が軽いように感じるキーキャップがあります。

キーキャップの形状(プロファイル)の前提知識は、以下の2つのページが参考になります。

OEM、DSA、XDA、MDAを使ってみて、軽く打鍵できると感じるのは、XDA、そしてXDAとOEMのいいところ取りをしたようなMDA(MIX)と呼ばれるプロファイルです。 よくあるOEMとの違いは、キーキャップ上面の面積が一回り大きくなっていることです。 これによりタイプしたときにキースイッチに力が加わりやすく感じるのでしょうか。 個人的には、OEMより1、2割軽く押せている感覚があります。おそらく、キースイッチにも依るとは思いますが。

この世にはあなたがまだ知らないキーキャップがたくさんあります!

最後に

ということで、使いこなすには修行が必要ですね。修行後の今は、ストレスフリーなタイピングができてスーパーミラクルハッピー*9です。これで2019年も戦っていけます!ただ、精進は続けていきます(特に、キーマップは生き物)。

今後は、

キーマップについては、本家リポジトリのforkを、github上に置いているのでご参考にしてください。

↓MiniDox github.com

↓crkbdの外一列落としのMiniDox github.com

あと、お約束の

この記事は今のEndgameであるMiniDoxことMiniDox+Tiffany Blue Tealios lubed, converted to 50P + translucent DSAで書きました。

f:id:uitspitss:20181202031950j:plain
LEDのtransitionのタイミングがズレて違う色になっているのがかわいい!

※仕事では、MiniDox + Gateron White lubed, converted to 30S + Big Bang を使ってます。

Endgameはいくつあってもよい!

アドカレ2018 自作キーボード#3の4日目は… 

せきごん@BLE Micro Pro予約受付中 (@_gonnoc) | Twitter

さんです!

ここまで読んでいただきありがとうございましたー。

*1:運指が楽という点では利点でもある

*2:多くのQWERTY配列ベースのキーボードでは QWERTYレイヤー と呼ばれています

*3:親指でタイプする6つのキーはレイヤー切り替え等で使うため、レイヤーごとにはあまり割り当てないので

*4:自作キーボードにキーマップを書き込むソフト GitHub - qmk/qmk_firmware: keyboard controller firmware for Atmel AVR and ARM USB families

*5:key characterとかの略でしょうか…そういう共通の表記

*6:単位表記は製品ページに準じてます。計算すれば分かりますが、 20cN≒20gf。変換による誤差は1gf以下くらい

*7:ついでに、Progressiveの一番軽い、50P(35cN)も購入してました。https://www.spritdesigns.com/product-page/progressive 製品ページのグラフが正しければ、押下開始後の押下圧は通常のスプリングよりもある程度軽いのでは、という期待からです。

*8:私の感覚では押下圧が少し重くなる感覚があります。軽い軸だからなのかもですが。ただ、打鍵感はよくなります。

*9:出典: ブラック企業体験イベント「THE BLACK HOLIDAY」|11/23(勤労感謝の日) 新宿区某所