⌨️

【roBa】40%キーボードでも開発がしたい!コンボキー多めのキーマップ解説

に公開

はじめに

ITエンジニアです。フルリモートでroBaを使って仕事をしています。2024年8月ごろからKeyball39を使い、2025年8月ごろからroBaを使い始めました。

職業柄記号をたくさん使うので、快適にタイピングできるように試行錯誤した結果、すべての記号キーがデフォルトレイヤーまたはコンボキーという極端な結果になってしまいました。

わりと使い勝手は良いので、使ってみたいけどキーが少なくても仕事ができるのかと心配している同業の方の参考になれば良いなと思い、私のキーマップの解説をしてみようと思います。

キーマップ解説

現時点でのキーマップを解説します。
最新のキーマップはここで見られます。

https://github.com/hrksg777/zmk-config-roBa

キーマップ画像の各キーの中央に書かれているキーが単押しした際に押されるキー、下に小さく書かれているキーが長押しした際に押されるキーになっています。
下線が引かれているキーはその名前のレイヤーに遷移するキーです。

仕事でもプライベートでもMacを使用しているので、Mac用のキーマップになっています。

デフォルトレイヤー

デフォルトレイヤーのキーマップ

特に使用頻度の高いものを配置しています。
,.の位置にマウスの左クリック、右クリックを割り当てています。オートマウスレイヤーは使用していません。

代わりに、左下、右下のキーにそれぞれ割り振っています。このキーは小指の付け根から手のひらのあたりで押しています。この操作を快適に行うために、他のキーより高さのあるキーキャップを付けています。

右下のキーには長押しでCmd⌘+Shift⇧を設定しています。これを長押ししながらマウスクリックを行うことで、リンクを別タブで開いてそのまま遷移する動作を右手だけで完結できるようにしています。

Aの位置には長押しでCtrl^を設定しています。これは、私が元々HHKBを使っていた時の名残で、その辺りにあるのが使いやすいと感じるためです。このままだとCtrl^+Aが押せないので、LANG2の位置にも設定しています。

特に使用頻度の高いものと書きましたが、DELETE⌦キーはあまり使用していないので、別のものに変えてもいいかもな……とは思っています。

エンコーダーの回転はこちらの記事を参考にマウススクロールを割り当てています。

レイヤー1

レイヤー1のキーマップ

左にテンキー、右に矢印キーだけのレイヤーです。
水色のキー、赤色のキーどちらを押してもレイヤー1に遷移します。
テンキーを使う場合は水色のキー、矢印を使う際は赤色のキーを押すといったように、片手で完結するようにしています。

エンコーダーの回転には⌘+,⌘-を割り当てて、ブラウザの拡大縮小を行い、押し込みに⌘0を設定して拡大縮小をリセットしています。

レイヤー2

レイヤー2のキーマップ

左にファンクションキー、右にMacのトラックパッドの代替となる機能を設定しています。

  • Ctrl^+←,Ctrl^+→: 隣のデスクトップに移動
  • Ctrl^+↑: Mission Controlを開く
  • Ctrl^+↓: 最前面のアプリのウインドウをすべて表示
  • Cmd⌘+[,Cmd⌘+]: (Chrome等で)一つ前に戻る、進む
  • Option⌥+Cmd⌘+H, Option⌥+Cmd⌘+L: システム設定→キーボード→キーボードショートカットから以下のように設定し、通知センターとLaunchpadを表示

通知センターのキーボードショートカット設定
Launchpadのキーボードショートカット設定

また、デフォルトレイヤーでTab⇥と同じ位置にShift⇧を設定しており同時に押せないので、レイヤー2でShift+Tab⇤を設定しています。

エンコーダーの回転にはC_VOL_DN,C_VOL_UPを設定し、音量の上げ下げができるようにしています。

レイヤー3

レイヤー3のキーマップ

よく使うキーボードショートカットをまとめたレイヤーです。
スクリーンショットやVSCodeでのフォーマット、タブの移動、タブを閉じるなどを設定しています。

レイヤー4

レイヤー4のキーマップ

Bluetooth設定に関するレイヤーです。
元々BT CLRキーはレイヤー4への遷移キーのすぐ隣にあったのですが、誤タイプで同時に押してしまい設定を消してしまう事故をよくやらかしたので少し離しました。

レイヤー5, 6

何もキーを設定していません。完全に持て余しています。
レイヤーごと削除してもいいのですが、そのままにしてあります。

デフォルト設定でレイヤー5がスクロールレイヤーだったので、スクロールするためのキーとしてのみレイヤー5への遷移キーは設定してあります(スクロールレイヤーは設定で変えられますが)。
スクロールはデフォルトレイヤーのエンコーダーでも操作できるのですが、ブラウジングしている際などはなるべく右手のみで操作を完結させたいのでそうしています。

コンボキー

コンボキーのキーマップ

デフォルトレイヤーにない記号キーを全部設定しています。
なぜレイヤーに設定しないのかというと、高速でタイピングする際にレイヤーキーを長押しすることが煩わしかったからです。親指にレイヤーキーを多く割り当てている都合上、どうしても手の動きが制限されるのもストレスでした。すべてコンボにしてからはそういったストレスは無くなりました。

なるべく縦2つで設定しており、roBaのカラムスタッガードを活かしてひとつの指で上下2つのキーを同時押ししてコンボできるようにしています。指1本での同時押しが快適にできるように、高さに差のないロープロファイルのキーキャップを使用しています。

とはいえ、全部を縦2つに設定できるほどキーがないので、横2つやひとつ飛ばした横2つなどでも設定しています。この場合は指2本で押します。ただ、どうしても指1本で同時押しするときより精度は落ちます。

コンボの難点として、設定すると高速でタイピングしている際に意図せずコンボが発動してしまうことがあります。このキーマップでいうと、reとタイプしようとして[が出てしまうといったことがあります。

これをなるべく防ぐために、そういった危険があるコンボキーにはタイムアウトを短めに設定しています。
コンボキーのタイムアウト設定

追加設定

roBa.keymapを直接書き換え、細かい設定を追加しています。
私は直接弄りましたが、keymap-editorでも同様の設定はできそうでした。

&mt {
    flavor = "balanced";
    quick-tap-ms = <150>;
    tapping-term-ms = <150>;
};

&lt {
    flavor = "balanced";
    quick-tap-ms = <150>;
    tapping-term-ms = <150>;
};

Mod Tap, Layer Tap時にquick-tap-msを設定しており、tapping-term-msをデフォルトの200msより短くしています。

quick-tap-msは、この時間以内にもう一度タップすると長押しでもタップが継続されるという設定です。
エンターキーと同じキーにレイヤーキーを設定しているので、元のままだとエンターキー長押しで改行を入力し続けることができません。
これを設定することで、150ms以内にもう一度エンターキーを押せば、その後長押しで改行を入力し続けることができます。詳細は公式ドキュメントを参照してください。

tapping-term-msは、この時間より長く押すことでホールドとみなされる値です。デフォルトだと長く感じたので150msにしています。

また、Layer TapのflavorをMod Tapと同じbalancedに変更しています。

    behaviors {
        lt_hold: lt_hold {
            compatible = "zmk,behavior-hold-tap";
            label = "LT_HOLD";
            flavor = "hold-preferred";
            quick-tap-ms = <150>;
            tapping-term-ms = <150>;
            bindings = <&mo>, <&kp>;

            #binding-cells = <2>;
        };
...(省略)

behaviorsにlt_holdを追加し、flavorをhold-preferredにしています。
これは、左手のレイヤー1への遷移キーにのみ設定しています。

基本的にはレイヤーキーはbalancedにしたいのですが、テンキーで数字を打つときのみhold-preferredにしたいのでこうしています。
これを設定したことで、タイピング中に数字を打とうとしているのにも関わらずスペース+アルファベットになってしまう事象がほぼ無くなりました。flavorの動作の違いは公式ドキュメントを参照してください。

おわりに

Mac用のキーマップですが、考え方としてはWindowsでも同じだと思っています。
少しでも参考になるところがあれば嬉しいです。
みなさま、良きキーボードライフを!

Discussion