読むとGPAが上がるブログ(仮)

GPA芸人が気の赴くままに何かを書くブログ

キー配列を変えるお話

はじめに

突然ですが、皆さんのほとんどが使っているであろうQWERTY配列に疑問を抱いたことはありますか? 恐らく、99%以上の方はそんなことに疑問を覚えることもなくPCと共に育ってきたと思います。 私もそうでした。

ただ、私の場合、タイピングの練習をしているときに、「もっと良い配置にすればもっと良い記録が出るのでは?」とふと思いました。 そこで、どういった配置がいいのかを考えてみることにしました。

実際、ちょっと考えてみれば、これ(QWERTY配列)が最適な配列ではないことはすぐに分かります。 例えば、キーの中で最もタイピングしやすいのは当然両人差し指にある「F」と「J」です。 しかし、この2つってそんな使いますか?使いませんよね??? 当然、よく使う文字は打ちやすい場所にあるのが理想だと思うのですが、「F」や「J」は日本語でも英語でもそんなに使う文字ではないと思います。

既存のキー配列(QWERTY以外)

既に存在する有名なキー配列を調べたところ、DvorakやColemak、Maltronなどがありました。 また、配列とは違いますが、かな入力を使う、というのも考えました。

ただ、DvorakやColemakは英語入力を目的にしているということで、今回は採用を見送りました。 Maltronは情報が少なくてよく分からなかったのですが、いわゆるエルゴノミックキーボード(左右で分割されてるやつ、これみたいなやつ)を想定しているっぽく、使えないかなと思いました。 また、かな入力は英語を入力するのが厳しくなる可能性があるような気がしたのでやめました。

結局、有名所がなさそうだったので自分で考えるか、となった次第です。

私が使っているキー配列紹介

さて、ここで、私が使っている配列を紹介したいと思います。 ちなみに私のキーボードはREALFORCE TKL SA / R2TLSA-JP3-IVです。

f:id:gpageinin:20200426222433p:plain

ちなみに、この配列で使ってみて不満点があったら変えようと思って使い始めたのですが、変えるのが面倒で結局このままなので、ベストとは言い難いところはあります。 これについては後で書きます。

特徴

先にも述べた通り、私は日本人なので、日本語入力をターゲットにして作りました。 ローマ字入力を想定しています。 英語入力も勿論するので、一応そちらも考慮はしているのですが、日本語入力に重きを置いている感じです。

具体的には、(主に)母音を左手、子音を右手で打つように配置しています。 これは、タイピングは可能な限り左右の手で交互に打つのがスピードや疲労等の面で優れているので、母音と子音が基本的に交互に来る日本語の特性を考慮したためです。 また、母音を左手に配置しているのは、種類が多い子音を利き手で処理しようと思ったからです(私は右利きです)。

また、配置を見れば分かる通り、Shiftを同時に押したときの動作はUS配列のものを使っています。 これは個人的にそっちの方が好きというだけです。

さらに、ワンショットモディファイアという機能を導入しています。 これについては後述します。

あと、存在すると害をもたらす「CapsLock」と「Insert」については、消し去っています。

配置の決め方

多く打つ文字は打ちやすい場所に配置する、というのが根本的な考え方になります。

アルファベットキーの配置

キーのランク付け

まず、中3列のキーを以下のように(個人的な)打ちやすさでランク付けしました。 打ちやすい順に、

(打ちやすい)赤>橙>黄>緑>水色>紫(打ちにくい)

となっています。

ちなみに、タイピングにおいて小指を酷使するとよくない(痛めやすい)ので、小指は若干打ちにくいバイアスをかけています。 ただ、今回は意図的に小指の負担を小さく見積もった(本当にキツかったら変えようと思ったため)ので、もう少し小指の使用を重く見積もった方がいいかもしれません。 ここらへんは完全に使う人に依存しますね。 なぜ負担を小さく見積もったかというと、先に述べた私が使っているキーボードは荷重(キーを入力するのに必要な力)30gと非常に軽いためです。

f:id:gpageinin:20200426222436p:plain

配置

このサイトローマ字入力、英語入力における各アルファベットの出現頻度が載っています。 これを見ながら、出現頻度が高い順に配置していきます。 一応、以下の点を考慮しながら配置していたような気がします(配置を考えたのが1年以上前で一部しか覚えていない)。

  • 右手で子音、左手で母音になるように
    • ただし、場所の都合上、「F」や「L」、「J」などのごく稀に使う(使い方の半分程度は他のキーで代替できる)子音のキーは左手側に配置
  • 英語の出現頻度も一応参考にする
    • 例えば「K」は、日本語では非常に良く出てくる(頻度8位、子音では3位)が、英語ではほとんど出てこない(22位、子音では17位)ため、若干ランクの落ちる右手小指に配置
  • 二重母音(「AI」みたいなやつ)の中でもよく出てくるものに関しては、同じ指で打たないで済むように配置
  • 「Y」は拗音(「KYO」とか)入力のキモなので、拗音の入力がしやすい場所に配置
    • 単純に子音なのでというのと、私の利き手である右手で2回入力する方が楽なので、右手側に配置

あと、日本語でも英語でもほとんどお目にかかれない(頻度:日本語で0%、英語で0.08%)「Q」は左遷しました。

数字・記号キーの配置

正直、頻度とか調べながら配置を考えていたら疲れてしまって、こちらはあまり工夫していません。 しかし、アルファベットを配置した隙間に埋めていくことになるので、数字をここに埋めていくとバラバラになってしまって意味が分からなくなってしまいます。 なので、数字は大体そのままです。

ただ、「1」だけは1段下げています。 元々の場所があまりにも打ちづらいためです。

また、似ている感じのキーは近くに配置するようにしました。 「'」と「`」、「/」と「\」ですね。 本当は「,」と「.」も近くに配置したかったのですが、場所がなく、この配置になりました。

その他のキーの配置

これは後にも述べますが、アルファベットや数字、記号のキー配列を入れ替えるのは非常に強い副作用を伴うので、万人にオススメできるものではありません。 しかし、今から述べるキーの配置変更は、そこまで副作用が強くなく、キー配置変更の入門?としても有力だと思います。 ちなみに先に述べた「1」を1段下ろすのもチョイ変えにオススメです。 QWERTY配列だとちょうど「Q」を追いやることができます。

Ctrl

これは全人類やる義務がある有名なやつですが、Ctrlを中段最左に置きます。 大体CapsLockとかいうゴミになってるところですね。

BackSpace

入力を消す機会ってそこそこあると思うんですが、その割にBackSpaceの場所ってめちゃくちゃ遠いですよね。 大体の人は遠いのに見なくても押せるくらいには押してると思うんです。

なので、思い切って近くに持ってきました。 入力ミスを減らせば押す機会も減るということで、自戒を込めて割と低い緑ランク(しかも水色と迷った)の場所に配置しました。 また、Vimの1文字削除「x」の場所であり、役割的に似ていた、というのも配置理由の1つです。

Delete

これは完全に人によると思うのですが、私はDeleteをそこそこ使う人です。 ほぼBackSpaceと同列に扱っています。 そこで、BackSpaceの隣に配置しました。

Shift・Enter

これは後に述べますが、代替キーを使うので元の場所には不要です。 一応、僻地に残しておいてあります(それぞれ、元々Escだった場所とBackSpaceだった場所)。

IME-ON・IME-OFF

逆に元々Shiftだったところに置いてある謎のこれらですが、その実態は存在が忘れ去られている「変換」キー・「無変換」キーです。 私はIMEの設定で、「変換」を押すと無条件でひらがな入力モード、「無変換」を押すと無条件で直接入力モード(半角アルファベットが入力されるやつ)になるように設定しています。

Macユーザー以外だと通常これらは「半角/全角」で切り替えていると思いますが、これは今どっちにいるかを知る(覚えている)必要が生じます。

「半角/全角」→何か日本語を入力→アルファベットのまま入力されてる→BackSpace連打からの「半角/全角」

という流れを今まで何度繰り返してきたことか……、という話です。

というわけで、この設定はかなりオススメです。 今回は場所も変えていますが、一般的な「無変換」と「変換」の位置でも相当な効果が出ます。 IMEの設定を変えるだけでできます。

今回は場所も変えられるので、一等地(親指で押せるので)に置くにはもったいないので、Shiftの位置に置いています。

Esc

すぐ前でも述べましたが、親指で押せる場所(Space・変換・無変換)はタイピングにおいては一等地です。 ほぼ手を動かさずに押せるというのと、親指は基本的に暇してるからです。 これをうまく使えば単純計算で効率が1.25倍になりますよね。

この3つの一等地のうち、今回は左側にEscを配置しました。 これは完全に私がVimmerであることに由来します。 ご存知の通り、VimにおいてEscは超重要なキーであるため、ここに配置しました。 逆に、Vimmerでない方、もしくはCtrl-[派の方は、何か超使うキーとかを置いてくれればいいと思います。

Space

これは場所を変えていませんが、左下にも配置してあります。 後に述べますが、Spaceを長押しして空白を入れまくるやつが都合上元々のSpaceでできず、それのみこちらでやる、というためのものです。 まあこれをすることはほとんどないので、僻地に配置してあります。

ワンショットモディファイア

ワンショットモディファイアとは、あるキーに対して、他のキーと同時に押したときと、そのキー単独を押したときで別々の役割を持たせることです。 今回の配置では、以下の2箇所でこれを導入しています。

  • 元々Spaceだった場所(単独押し:Space、同時押し:Shift)
  • 元々「変換」だった場所(単独押し:Enter、同時押し:Ctrl)

ShiftとCtrlは修飾キー(他のキーと同時押しすることが前提のキー)の中でも群を抜いて押す機会の多いキーであるのは議論の余地がないと思います。 そこで、これらを一等地に置くことを考えます。 しかし、Spaceは(私の場合Escも)超絶押すキーなので、移動させるのが厳しいです。 そこで、これらのキーにワンショットモディファイアで2つの機能を持たせることにより、これを解決します。

あとは一等地3つのうちどこに配置するかを決めます。 ShiftもCtrlも両手どちらでも押せることが非常に望ましいわけですが、Ctrlは左手側には存在します(元々CapsLockだった場所)。 そこで、これを「変換」だった場所に配置します。 また、Spaceは横に長いために両手どちらの親指でも押せるので、ShiftをSpaceの場所に割り当てます。

そして、「変換」だった場所の単独押し機能が空いているので、ここにEnterを割り当てます。 Enterも当然しょっちゅう押すキーですから、お誂え向きなわけです。

ちなみに、Escの部分もワンショットモディファイアにしないのかという話ですが、特に割り当てたいキーがないのと、後に説明する都合により単独キーとしています。

キー配置変更の実現

さて、ここまで長々と書き連ねてきたわけですが、ではこれをどうやって実現するのかという話になります。 私はこれをWindows時代に実現したため、Windowsでの方法しか調べていません。 従って、Windowsでの方法のみ紹介します。 MacではKarabiner?とかいうのでできる、というのは調べていて見た記憶があります。 Linuxは分かりません。

あとお約束で一応言っておきますが、レジストリを書き換えるので自己責任でお願いします。 ソフトウェアで変えれば安全ですが、ソフトウェアを起動していないといけないのと、何かしら不具合というか変換が効かなくなることが多そうな気がしたので低レベルで変えます。

US配列にする

先に述べた通り、この配列はUS配列が元になっています。 ただ、普通に設定からUS配列にすると、「変換」や「無変換」など、一部のキーが使えません(当然US配列には存在しないため)。 ちなみに、この理由(「変換」や「無変換」がなく、キーの数が少なくてカスタマイズ性が下がる。しかも一等地のキーがない)があって私はUSキーボードは使いません。

話がそれました。 まあ今回は変換や無変換はIMEの設定で機能をつけているので、他のキーにすればいい話ですが、今回は別の方法でどうにかします。 「AXキーボード」という聞いたこともない代物を利用します。

AXキーボードとは、昔々に使われていたのか?というよく分からないキーボードで、日本版US配列、みたいな感じの配列をしているキーボードらしいです。 要は、Shiftと同時押ししたときに出てくる文字の部分だけUS配列で、あとはJIS配列みたいなやつです。 なので、かな入力もできます。

このサイトに従うと、キーボードをAXにすることができます。

スキャンコードのマッピング

あとは、このキーをどう変えていくか、という話になりますが、Change Keyみたいなソフトがあるので、これで入れ替えることができます。

ただ、これでどうなるかは私は動作確認していません。 もしかしたらこれでできるかもしれないので、できたら以下の説明は不要となります。

キーボードからの入力は、「スキャンコード」というキー固有の値としてキーボードから送られます。 このスキャンコードをCPUが受け取り、処理して文字として扱っています。 Change Keyみたいなソフトはいくつかありますが、全てこのスキャンコードの処理に干渉することでキーの入れ替えを実現しています。

ところで、このスキャンコードには、キーを押した瞬間に送られる「メイクコード」と、キーを離した瞬間に送られる「ブレイクコード」があります。 この2種類があるのでキーの長押しとかを処理できるのです(と私は思っています)。 私が確認した限り、こういう系のソフトは全て「メイクコード」しか処理していません。 後に述べますが、ワンショットモディファイアの設定ではブレイクコードに干渉するような処理を入れているので、ブレイクコードを処理していないこれらのソフトで動くかどうかは分かりません。

ソフトがないので、自力で書き換えるしかありません。 このサイトを参考に、レジストリを書き換えます。 このときに使うスキャンコードは、以下のサイトが参考になると思います。

また、ワンショットモディファイアキーに関しては、「他キーと同時押しした時の機能」を割り当てます。

さらに、Ctrl・Win・Alt・Shiftは左・右を区別します。 まあどちらでもいいわけですが、見た目通りの配置にしておけばいいかと思います。 ただ、AXキーボードは右Altに別の機能(「半角/全角」っぽい機能らしい)が割り当てられているので、通常のAltとして使いたい場合は「右Altのスキャンコードを左Altのものにする」という処理を入れる必要があります。 あと何故か私の設定ではCtrlを両方とも左にしていたので、右Ctrlにも別の機能が割り当てられていたのかもしれません。

ワンショットモディファイアの設定

AutoHotKeyというソフトを使います。 使い方の説明は割愛します(こことかを参考にしてください)。 以下のスクリプトを使えば上で説明した機能は実現できると思います。

~RShift up::
    If(A_PriorKey == "RShift")
    {
        Send, {Space}
    }
    Return

~LCtrl up::
    If(A_PriorKey == "LControl")
    {
        Send, {Enter}
    }
    Return

例えば1つ目なら「右Shiftを離したとき、最後に押したキーが右Shiftなら(すなわち、右Shiftを単押ししたときには)Spaceとする」みたいな感じです。 Spaceだった場所を右Shiftに、「変換」だった場所を左Ctrlにしている想定です。

なお、Escをワンショットモディファイアにしていないのは、ここで述べているような実装方法を取っているのが理由です。 すなわち、ワンショットモディファイアにすると、キーを押してから離すまでEscとして認識されず、次のキーとの間隔が短いときにEscが入力されない場合があるからです。 入力の一貫というか、流れのなかで押すことが多いキーなので、これが起きることが多く、単独キーとしました。

ちなみに私の場合、EnterはEscに比べると「そこで一区切り」感があって、その直後のキーを入力するまでの時間が長くなりがちなので、あまり問題になっていません。 Spaceはたまに暴発します。

感じている点

何となく感じている感想を挙げます。

  • 今「1」にしている部分を「0」にしてもいいかもしれない
    • プログラムを書いていると初期化で使うことが多く、今の配列では数字の中で一番押しやすいため
  • 「,」と「.」が押しづらい
    • 結構押すので、もうちょっと押しやすい場所に置いてもいいかもしれない
  • ワンショットモディファイア周りの不具合
    • ワンショットモディファイアの「Enter」を何か別のキーと同時押しする場合(Ctrl-EnterとかShift-Enterとか)に、うまく機能しない
      • ここらへんはAutoHotKeyの設定を詰めればいけるかもしれない
  • なんかキーの変更が効かない場合がある
    • Skyrimをプレイしたときはなぜか元々のキーだと認識されていました。理由はよく分かりません。
  • Linuxでの変更方法が分からん
    • 変更方法が分からない(面倒で調べてない)ので、Ubuntu機ではQWERTYで使っています。なので実質バイリンガルみたいなもんですね。慣れると意外と両方使えます。

問題点

キー配列変更による問題点を挙げます。

他の環境での作業が厳しい

他のキーボードとかマシンとかで作業するときに厳しい気持ちになります。 まあ普通QWERTYなので今まで手が覚えていると思うので、意外となんとかなります。

習得するまでのタイピング速度が大変なことになる

結構練習するか、ある程度の期間使い続けるまではタイピング速度が大変なことになります。

QWERTY配列でのタイピング速度が落ちる

当然ですが、QWERTY配列でのタイピング速度は落ちます。 私の場合、e-typingでのスコアが450くらいだったのが、現在は400くらいになっています。 変えた配列でのスコアは現在では350くらいです。 まあ配列を変えたあたりからタイピング練習をしなくなった、というのもあると思いますが。

ショートカットキーがやばい

ショートカットキーが変更できないツールだと、かなり厳しくなります。 通常は位置で覚えていると思うので、特に最初のうちは別のショートカットを暴発させまくります。 この点は、ソフトウェア的入れ替えをすれば一応なんとかなります(先に述べたAutoHotKeyなどでも、スクリプト起動時のみ変更を適用する、といったことができる)。

ゲームがやばい

configがないゲームだと詰みます。 WASDで移動とか言われても移動で死ぬほど苦しむことになります。

まとめ

キー配列の変更について色々書きました。 まあ私のキー配列変更はあまりに過激なので全くオススメしませんが、キー配列を変えること自体はかなり面白い部分があると思うので、参考とかインスピレーションとかになればと思います。 細かいところを少しChangeKey等で簡単に自分好みに変えてみる、というのを是非やってみてはいかがでしょうか。