kbigwheelのプログラミング・ソフトウェア技術系ブログ

プログラミング・ソフトウェア技術系のことを書きます

Universal Keymapシリーズ③ 自作キーボードの Raise / Lower / Adjust レイヤーの起源と推奨される使い方の調査

tl;dr

  • Raise / Lower / Adjustの起源はPlanck, 引いてはその製作者のjackhumbert (Jack Humbert)
  • Raise / LowerにはXXXを置く、といった方向性はないため自由に使ってOK
    • 強いて言えば本家Planckに合わせてRaiseに数字キー・ファンクションキー、Lowerに記号・算術演算キーを置くケースが多いかも(私見)
  • Adjustに関してはキーボードのLEDの調整などメタな機能や滅多に使わない機能を置くのが基本

目次

レイヤーとは

自作キーボードのキーマップではよくレイヤーという機能を使用します。

Layers - QMK

レイヤーとは一般的なキーボードのShiftやCtrlなどと同様に特定のキーを押しながら別の、例えばJキーを押した場合、本来のJキーの役割ではなく左矢印キーを押したことにする、といったことができる機能です。 さながらキーボードの上へ全く別の層を敷いてすべてのキーの動作を変えてしまうような機能だからレイヤーと呼んでいるのだと思います。

このレイヤー、特にキー数が少ない自作キーボードではほぼ使用が必須の機能です。 例えばNomu30 という自作キーボードを設計した – recompile.netなどのキーボードはキー数が31個しかないため、そのままでは数字キーはおろか矢印キーすら押せません。 これほどキー数が少ないものでなくとも、80%キー = いわゆるテンキーレス未満のサイズではファンクションキーなどに専用のキーを割り当てられないためレイヤーが必要となります。

レイヤーの呼び名

このレイヤー機能、qmk_firmware上は単なる定数で0から1, 2, ...と振られるだけの数です。 一方で人間が使いやすいように大抵の場合レイヤーには適当な名前がつけられることが多いです。 以下は僕が調査した中で見たレイヤー名の一例です。

  • Function
  • Arrow
  • Dvorak
  • Numpad
  • Raise
  • Lower
  • Adjust

これらの中でも準標準の呼び名となっているのが Raise / Lower / Adjust の3つです。これらはよく使われるため、カスタムキーキャップの中でもこのRaise / Lowerキーを特別に用意しているものが一定数あります(Adjustは大抵RaiseとLowerの同時押しで表現するため専用のキーはありません)。

ここで一つ疑問が浮かびます。これらのレイヤーの呼称はだれが決めたのでしょうか?またこれらのレイヤーそれぞれに置くキーの方針などはあるのでしょうか?

Raise / Lower / Adjust レイヤーの起源

ネットで検索してみたところ、私と全く同じ疑問を持った人がIssueを立てていました。

Raise? Lower? Adjust? · Issue #3533 · qmk/qmk_firmware

そこでのコメントいわく、これらのレイヤーはPlanck, Preonicなどの開発者のJackさんが開発したものだそうです。 しかし、それはいつ開発されたのでしょうか?またRaise / Lower / Adjust はそれぞれ指向性を持ったレイヤーとして準備されたものなのでしょうか?(例えばUpperには数字キーを置く、など)

この疑問の回答を探して、git logの海へ潜ることにしました。

qmk_firmwareリポジトリを掘り起こす

Gitの良いところは過去全てのコミットを簡単に、かつ高速で検索できることです。 Raise / Lower / Adjustというレイヤーが出てきたコミットも簡単に検索することができます(クエリが間違っていなければ)。 実際に検索してみたところ、すぐにそれぞれのレイヤーが出てきた最初のコミットが見つかりました。

開発されたレイヤー コミット コミッター 日付
Raise / Lower Update keymap_planck.c · qmk/qmk_firmware@4a8b9b8 jackhumbert (Jack Humbert) 2014/12/13
Adjust new defaults · qmk/qmk_firmware@ddbe430 jackhumbert (Jack Humbert) 2016/04/15

両方ともスレッド内で推測されていたとおりJackさんによって行われていました。 また新たにわかったこととして、これらのレイヤーはすべてPlanckのために開発されていたことが挙げられます。

これでqmk_firmware内でのRaise / Lower / Adjustレイヤーの源流はわかりました。 また、qmk_firmwareリポジトリ外で先にこれらのアイデアがあった可能性を考慮してgoogleで2014/12/13以前などを指定して検索しましたが、それに該当する情報はまったく出てきませんでした。

これらを勘案すると少なくともこのレイヤーの命名をモダンキーボードの世界へ導入したのがJackさんであることはほぼ確実だと思われます。

Raise / Lower / Adjustレイヤーの推奨される使い方

これでこれらレイヤーの源流はわかりました。 残る疑問はこれらのレイヤーに推奨される使い方・キー配置があるかどうかです。

Raise? Lower? Adjust? · Issue #3533 · qmk/qmk_firmwareのコメントではRaise / Lower / Adjustに何を置くのかは自由で、ただしAdjustについては入力時にRaiseキーとLowerキーの両方を入力する手間があるため「ワンタッチ」キー(オン/オフ、レイヤー選択など)に適しているとコメントされています。 実際にJackさんが最初にそれらのレイヤーを導入したPlanckにおいて、どのようにレイヤー内のキーが設定されたのかを見ていきましょう。

まず、Raise / Lowerがコミットされた2014年12月の時点では以下のようになっています。

[0] = KEYMAP( /* Jack */
  TAB,  Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P,    BSPC,
  ESC,  A,    S,    D,    F,    G,    H,    J,    K,    L,    SCLN, QUOT,
  LSFT, Z,    X,    C,    V,    B,    N,    M,    COMM, DOT,  SLSH, ENT,
  RSFT, LCTL, LALT, LGUI, FN2,    SPC,     FN1, LEFT, DOWN, UP,  RGHT),
[1] = KEYMAP( /* Jack RAISE */
  GRV,  1,    2,    3,    4,    5,    6,    7,    8,    9,    0,    BSPC,
  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MINS, EQL,  LBRC, RBRC, BSLS,
  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MINS, TRNS,
  TRNS, TRNS, TRNS, TRNS, TRNS,    TRNS,   FN1,  MNXT, VOLD, VOLU, MPLY),
[2] = KEYMAP( /* Jack LOWER */
  FN22, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC,
  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
  TRNS, TRNS, TRNS, TRNS, FN2,    TRNS,    TRNS, MNXT, VOLD, VOLU, MPLY),

Raiseレイヤーでは数字キーとボリューム上下、メディア再生などのキーが乱雑に置かれています。 Lowerレイヤーにはファンクションキーの10 ~ 28がこちらも並べられています。 ただ、ファンクションキーの3 ~ 9はどこにもないことなどからもまだまだ作業中であることが伺えます。

2015年の1月になると大分まとまっています。が、ファイルタイトルを見るにこれjackさん自身のキーマップやdefaultのキーマップではなくnathanさんのもののようです。配置もthey固有の特徴(Visual Studio用の配置)などが見られて個性的。特に指向性などは見れません。

   /* 1: fn left/lower layer
    * The top row are Visual Studio combos:
    *   'Run', 'Breakpoint', 'Step over', 'Step into', 'Set cursor to line'
    * 2nd row are key combos:
    *   'ctrl-alt-delete', 'ctrl-shift-escape' 
    * 3rd row are macros keys:
    *   'P0' - 'P5' execute a script on Windows machines 
    * ,-----------------------------------------------------------------------.
    * | ESC | F5   | F9 | F10 | F11 |S+F11|CSF10|NLock|Num7 |Num8 |Num9 | Del |
    * |-----------------------------------------------------------------------|
    * |     |C/A/D|C/S/E| Ins |Print|Pause|SLock|Num0 |Num4 |Num5 |Num6 |Num= |
    * |-----------------------------------------------------------------------|
    * |     | P0  | P1  | P2  | P3  | P4  | P5  |Num. |Num1 |Num2 |Num3 |Num/ |
    * |-----------------------------------------------------------------------|
    * |     |User |     |     |     |     |     |     |Home |PgDn |PgUp | End |
    * `-----------------------------------------------------------------------'
    * 2: fn right/raise layer
    * ,-----------------------------------------------------------------------.
    * | F1  | F2  | F3  | F4  |F5   | F6  | F7  | F8  | F9  | F10 | F11 | F12 |
    * |-----------------------------------------------------------------------|
    * |     | !   | @   | #   | $   | %   | ^   | &   | *   | -   | +   | =   |
    * |-----------------------------------------------------------------------|
    * |     | _   | '   | "   | `   | ~   | ,   | .   | ]   | )   | }   | >   |
    * |-----------------------------------------------------------------------|
    * |     |NextT|PrevT|     |     |     | Esc |     |Mute |Vol- |Vol+ | P/P |
    * `-----------------------------------------------------------------------'
    */

Create keymap_matthew.c · qmk/qmk_firmware@1e0ae293 2015年1月には他のキーボードのキーマップにもraise / lowerのアイデアが輸出されています。

引き続き徐々にRaise / Lowerのアイデアは広がっていきます。Adding my initial layout · qmk/qmk_firmware@073a6c2ではRaiseは数字とファンクションキー、LowerはColemak配列など割と大胆な割り当てになっています。この時点ですでに指向性はほぼない雰囲気ですね。

一気に飛んで、では最新のPlanck用defaultキーマップはどうなっているかというとこうです。 qmk_firmware/keymap.c at 50835bb13875843cac0236995afe86508744e595 · qmk/qmk_firmware

/* Lower
 * ,-----------------------------------------------------------------------------------.
 * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | | Home | End  |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
 * `-----------------------------------------------------------------------------------'
 *
 * Raise
 * ,-----------------------------------------------------------------------------------.
 * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |Pg Up |Pg Dn |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
 * `-----------------------------------------------------------------------------------'
 *
 * Adjust (Lower + Raise)
 *                      v------------------------RGB CONTROL--------------------v
 * ,-----------------------------------------------------------------------------------.
 * |      | Reset|Debug | RGB  |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-|  Del |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|TermOn|TermOf|      |      |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |             |      |      |      |      |      |
 * `-----------------------------------------------------------------------------------'
 */

LowerとRaiseについては大分変わっています。Adjustについても大きく変わっていますが、ここについてはレイヤーの切り替えやキーボード自体のRGB操作など、Adjust(調整)という名前に沿ってキーが配置されているように見えます。 簡単に他のadjustレイヤーを調べてみたところでも、同傾向があるようでした。

まとめ

というわけで、Raise / Lower / Adjustの起源とそれの推奨される使い方があるのかの調査を行いました。 それらレイヤーの起源はわかったものの、RaiseとLowerレイヤーの使い方は当時からかなりバラバラで特に定まった使い方はないようです。 そもそもRaise / Lowerという名前自体とても汎用的なものなので、どうとでも使えるように、というかどうとでも使えるために誰でも使いよく広まったと考えられるかもしれません。 ただの数字だけのレイヤー1, レイヤー2よりもRaiseレイヤー、Lowerレイヤーという物理的なメタファの意味合いを含んでいたためより多くの人にイメージしやすかったという側面もあると思います。 一方でAdjustレイヤーについてはキーボード自体の設定を変更する目的で普段のタイピング目的とは違う、単なるON/OFFスイッチなどとして使う傾向があるようです。