Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

もっと “自由” な キーマッピングの提案

Last updated at Posted at 2024-12-03

この記事は、キーボード #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つ目の「提案」は、

 従属レイヤーを設定してみてはいかが?

ということです。

おわりに

ここまで、いかがでしたでしょうか。

実は、まだ書きたかったことが山ほどあり、今後この記事の内容をアップデートしていきます。

ここまでお読みいただきありがとうございました。またお目にかかれるのを楽しみにしております。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?