この記事は、キーボード #1 Advent Calendar 2024 の3日目の記事です。
昨日は、アレくとーる さんによる「【コラム】自作キーボードはどうして日本語配列が少ないの?」でした。
自分も左手親指キーが3つ必要なので日本語配列推しです。日本語配列の自作キーボード、盛り上げたいですね…
みなさんは「キーマッピング」と聞いて、どういった内容を思い浮かべますか?
レイヤーの活用や合理的な記号の配置。コンボ、マクロ、タップダンス…
多種多様な項目があると思いますが、そもそも、
「もうキーマッピングの話なんて聞き飽きたよ」
このアドベントカレンダーをお読みの方からは、そんな声も聞こえてきそうです。
それもまた無理はないでしょう。現状、この世に溢れるキーマッピング解説というのは、大半が入門者向け。
しかし我々は、単純なレイヤーや記号のリマップのことなんて(大抵)既に知っているんです。だからそんじょそこらの記事じゃ物足りません。
もっと何か真新しい話題はないのか。もっと私の探究欲を満たすような、もっとシビれるような、血湧き肉躍るようなものは。もっとこの俺を満足させてくれ…!
そう呻きながら、今日もインターネットの海を周回していらっしゃることでしょう。
この記事は、そんなアナタにこそ読んでいただきたいのです。
今回は、次のステップの踏み出し所を求めて彷徨う方々へ、何かの参考になればという思いを込め、「もっと “自由” なキーマッピング」というテーマで、ご提案をいくつかご用意いたしました。
アナタのキーマップ探求の一助となるか、はたまた更なる魔境へ深く誘うことになるかは分かりませんが、どちらにせよ楽しく読んでいただければ幸いです。
自己紹介
本題へ入る前に、自己紹介をさせてください。
私は、もともとショートカットキー愛好家だったところから、キーマップのカスタマイズ沼へと足を踏み入れ、ようやく近年、自作キーボード界隈へと到達した流浪の民です。
自作キーボード歴は2年目のほぼ素人ですが、キーマッピング歴は9年目を数え、合計十数枚以上のレイヤーを日常的に操る、文字配列「以外」のキーマッピングを得意とした(言うなれば)“中堅” キーマッパーです。
その他のバックグラウンドは以下の通りです。
-
メインは Mac を使用
Mac 歴 = キーマッピング歴。
Emacs 風ショートカットキーがデフォルトで使えるのがいいですよね
-
ときおり Windows も使う
元々は Windows ユーザー。
タブキーやアクセスキー、メニューキーを駆使できるのが超ッ強力ですよね
-
文字配列では Dvorak 配列や JIS かな配列を仮習得した経験がある
その後ご多分に漏れず挫折。
だって世の中に蔓延る QWERTY を打てなくなるんだもの
-
他にも例えば、ひと通り Vim の操作はできる
今回の話とはあまり関係がない。
モーダルエディタ最高。だけど日本語 IME との相性は最悪…
まとめると、「Windows の操作も理解しているが、習熟しているのは Mac」という感じです。とにかくキーマッピングが好き。
では、いよいよ本題に入りましょう! まずはレイヤーに関する話題です。
レイヤーを最も効果的に活用するには?
まず前提知識として「キーマップ」とは、キーボード上に割り当てた機能のまとまりのことを指します。
次に「レイヤー」とは、通常のキーマップ上に「さらに層を重ねるようにして」異なる機能のキーマップを割り当てること、またそのキーマップのことを指します。
そして、そのレイヤーに遷移するためのキーを「レイヤーキー」と呼びます。
レイヤーキーの身近な例としては「Fn キー」があります。押下中は F1〜F12 あたりのキーが、通常とは異なる機能になります。
また Fn キー以外の修飾キーも、押下中は通常と異なる機能のキーマップが使えるため、一種のレイヤーキーと言えます。
逆に言えば、レイヤーを設定するということは「新たな独自の修飾キーを作り出すこと」と捉えることもできる、というわけです。
では、わざわざレイヤー機能を使うことの利点はなんなのか。
それは、「キーボード上の、ホームポジションから遠い位置にあるキーまで手を動かす代わりに、複数のキーを組み合わせて押すことにより、ホームポジション付近だけで全ての機能を使うことができる」という点にあります。
さらに、通常以上のキー数を、より狭い範囲に詰め込めるため、その副次的な効果として、通常より遥かに少ないキー数の、コンパクトなキーボードを実現できます。
そういった特徴があることから、自作キーボード界隈の皆さんにおかれましては、キーボードを「より効果的に」活用するなら、レイヤー機能は必要不可欠であるという認識を、既にお持ちのことでしょう。
しかし! ここで皆さんにお尋ねしたいのは、
ではレイヤー自体を、さらに「より効果的に」使うなら、そのレイヤーにどんな機能を配置するべきか?
という点について、あまり議論されていないのではないか、ということです。
キーマッピングというと、特殊キーや記号類の再配置のことだと思われがちです。でも、本当にそれだけでしょうか? いったん立ち止まって考えてみましょう。
キーマップにおいて、レイヤーを「より効果的に」使うとしたら、そこに何を配置しますか?
お答えを用意していただけましたでしょうか。
それでは、ここからはあくまで私の個人的な考えですが、
キーボードを「より有効的に」使えるのがレイヤーならば、そのレイヤーをさらに「より有効的に」使うことができるのも、またレイヤーである
と、考えています。
キーボードにレイヤーキーを置いたのと同様、レイヤー上に、さらに別のレイヤーを発動するためのキーを置く。
つまり、「入れ子レイヤー」を設定することこそが、最も効果的なレイヤーの使い方なのではないか?
単純にレイヤーキーを増やすだけでは、設定できるキー数は「足し算的に」しか増えません。
しかし、入れ子状にレイヤーを作成すれば、設定できるキー数を「掛け算的に」増やすことができます。
そう。今まで我々が何となく使ってきたレイヤーという機能。それは実は、より高次のレイヤーを発動するためのものだったのです。
いかがでしょうか。ここまで皆さん付いて来られておりますでしょうか。まず最初の「提案」は、
入れ子レイヤーを作成してみてはいかが?
ということでした。
レイヤーを「より効果的に」使うなら、入れ子状にレイヤーキーを置く。既に入れ子レイヤーをフル活用されている方からしたら、「何を当たり前のことを」とお思いのことでしょう。
では、またもう1つ、お尋ねします。
その「入れ子レイヤー」のトリガーとして、最も使い勝手のいいレイヤーキーはどれでしょうか?
⓵ MO・LT(ホールド型)
⓶ TG・TO(トグル型)
⓷ OSL(スティッキー型)
お選びいただけましたか?
気になる答えは…
このどれでもありません。「以下の中から選べ」とは言ってないんでね…
いやッ、ちょっと待ってまだ閉じないでくださいッ! 申し訳ありません、ちゃんと説明しますのでッ!
気を取り直して、そもそも上に挙げた既存のレイヤーキーを「入れ子レイヤーのトリガー」としたとき、何が問題なのかを見てみましょう。
⓵ MO ・ LT (ホールド型)
まず ⓵ の MO・LT は、どちらもホールド型のレイヤーキーです。レイヤーキーを押して、放すまでの間だけ、レイヤーが有効になります。
ホールド型の問題は、ホールド型のレイヤーキーをレイヤー上に配置すると、その「入れ子レイヤー上の」機能を使う際に、常に2つのキーをホールドする必要が出てきてしまうということです。
この、そもそも「2つのキーをホールド」すること自体が面倒ですし、さらに修飾キーと組み合わせたら、追加でもう1つのキーをホールドする必要があり、そして何より「ホールドに使う指が担当していた範囲のキー」は押すことができません。
これでは「入れ子レイヤー」の恩恵を充分に得ることができません。
⓶ TG ・ TO (トグル型)
次に ⓶ の TG・TO は、どちらもトグル型のレイヤーキーです。レイヤーキーを押して離して、もう一度そのレイヤーキー(もしくは別のレイヤーキー)を押すまでの間だけ、そのレイヤーは有効になります。
トグル型の問題は、皆さん IME 切り替えでお馴染みの通り、「今どこのレイヤーにいるのか、意識して使わなければならない」という点です。そして、それを常に意識できたところで、「元のレイヤーに戻る(レイヤーを解除する)際にも必ずキーを押さなければならない」という面倒臭さがあります。
これもやはり「入れ子レイヤー」の恩恵を充分に得ることができません。
⓷ OSL (スティッキー型)
最後に ⓷ の OSL は、ワンショットレイヤー、別名スティッキーレイヤーと呼ばれるレイヤーキーです。ワンショット、即ちレイヤーキーを押して離したのち、「その次に押すキーだけ」レイヤーが有効になります。
ちょうど「スマホのシフトキー」がこれに該当し、シフトキーを押した次のキーが大文字となる「スティッキーシフト」などと呼ばれています。
スティッキー型のレイヤーキーは、次のキーを押した後にレイヤーが自動解除されるため、「レイヤーを解除する際に操作を必要としないので楽ちん」というメリットがあります。
その一方で、OSL を押した次のキーまでしか、レイヤーが有効にならないため、その「レイヤー上の機能を連打で(連続して)使用することができない」というデメリットがあります(ただし逆に連続使用しないケースにおいては、OSL でも入れ子レイヤーとして充分に機能します)。また、このレイヤーキーも、レイヤーが発動中か否かを意識する必要があります。
この OSL は入れ子レイヤーの「解の1つとしてはアリ」ですが、それでもまだ「恩恵が充分に得られている」とは言えません。
では、これらのデメリットを解消する、「第4種類目のレイヤーキー」とは一体、何なのか。
実は、ここまでのレイヤーキーの課題は、言い換えると「レイヤーを解除するタイミングをどう扱うか」という点にあります。
明示的にレイヤーが解除されるようなレイヤーキーでは、「余計な1ホールド」もしくは「余計な1打鍵」が必要になります。かと言って、自動的にレイヤーが解除されるようにすると、その入れ子レイヤー上の機能を連続して使用できません。
従って、これらの中間、両者のイイトコ取り、つまり「レイヤー解除のための手数を増やさずに、かつ入れ子レイヤー上の機能を連続して使用できる」ようなレイヤーキーが求められます。
そこで今回ご提案するのが、「従属レイヤー」という発想です。
従属レイヤーとは、その名の通り、状態が親レイヤーに従属して決まるレイヤーのことです。親レイヤーキーを押して子レイヤーキーを押し、その子レイヤーキーを離した後も「子レイヤーが」持続します。
そこまではトグル型やスティッキー型と同じですが、解除のタイミングが違います。子レイヤーを発動したキーを放したり、子レイヤー上のキーを押たりしても、その子レイヤーは解除されません。
この「従属レイヤー」は、親レイヤーキーを離した際に自動的に解除されます。子レイヤー解除のタイミングは親レイヤーキーを放すタイミングとなり、親レイヤーが解除されたら同時に解除される、即ち親レイヤーの状態に従属して状態が決まる。それゆえ「従属レイヤー」と(私は)呼びます。
この「従属レイヤー」の利点は、「親レイヤーキーを放す」という、レイヤーの解除方法が明示的でありながらも、レイヤー使用中にホールドするキー数は変わらず、また「解除のための追加のワンアクションが不要」ということです。従って、ひとたび発動すれば、親レイヤーを使うときと同じような感覚で使うことができるのです。
いかがでしたでしょうか。従属レイヤーの強力さが、ご理解いただけましたでしょうか。
皆さんも従属レイヤーをお試しあれ!
と言いたいところですが、まだ設定方法について言及していませんでした。
ですがここで問題があり、実はこの従属レイヤー、Remap でも、VIA でも、Vial ですら設定できません。気軽に実現可能なのは Mac の Karabiner-Elements のみ。しかし QMK を手書きすれば、変数の状態によって条件分岐するだけなので、実現可能だと聞きました。
つまり私からの2つ目の「提案」は、
従属レイヤーを設定してみてはいかが?
ということです。
おわりに
ここまで、いかがでしたでしょうか。
実は、まだ書きたかったことが山ほどあり、今後この記事の内容をアップデートしていきます。
ここまでお読みいただきありがとうございました。またお目にかかれるのを楽しみにしております。