2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CTRL配列 - v.4.0

Last updated at Posted at 2025-08-14

はじめに

こんにちは、Ctrlです。

CTRL配列 を基軸としたキーマップを「CTRL配列 v.4.0」のメジャーアップデートとしてまとめました。前回までのアップデートとして、片手配列で左手と右手、そして新しくCTRL配列による両手、マインクラフトを遊ぶためのレイヤーなども追加しています。

使用しているPCB:物理キーボード

使用している物理キーボードは@takashicompanyさんのWorm Eatenです。

IMG_20250810_195909429.jpg

現在は、左手にKensingtonのスリムブレード、右手にWorm Eaten、ディスプレイの下に無指向性マイクを設置して作業しています。

1. keymap.cファイルの全体像

まずは、今回解説するkeymap.cファイルの全体像を見てみましょう。このファイルは、QMKファームウェアにおけるキーボードの動作を定義するC言語のソースコードです。

/* Ctrl */

#include QMK_KEYBOARD_H
enum layer_number {
    _BASE = 0,_C,_S,_B,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,
};

enum custom_keycodes {
	VOICE = SAFE_RANGE,PRN,BRC,CBR,ABK,
};

#define SEND_PAIR(str) if (record->event.pressed) SEND_STRING(str);

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case VOICE: SEND_PAIR(SS_TAP(X_LNG1) SS_RCTL(SS_LSFT("s"))); break;
        case PRN:   SEND_PAIR("()"); break;
        case BRC:   SEND_PAIR("[]"); break;
        case CBR:   SEND_PAIR("<>"); break;
        case ABK:   SEND_PAIR("{}"); break;
    }
    return true;
}

enum {
    A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
};

#define TD_LTR(kc) ACTION_TAP_DANCE_DOUBLE(KC_##kc, S(KC_##kc))

#define TD_ROW(a, b, c, d, e) \
    [a] = TD_LTR(A), [b] = TD_LTR(B), [c] = TD_LTR(C), [d] = TD_LTR(D), [e] = TD_LTR(E)

tap_dance_action_t tap_dance_actions[] = {
    [A] = TD_LTR(A), [B] = TD_LTR(B), [C] = TD_LTR(C), [D] = TD_LTR(D), [E] = TD_LTR(E),
    [F] = TD_LTR(F), [G] = TD_LTR(G), [H] = TD_LTR(H), [I] = TD_LTR(I), [J] = TD_LTR(J),
    [K] = TD_LTR(K), [L] = TD_LTR(L), [M] = TD_LTR(M), [N] = TD_LTR(N), [O] = TD_LTR(O),
    [P] = TD_LTR(P), [Q] = TD_LTR(Q), [R] = TD_LTR(R), [S] = TD_LTR(S), [T] = TD_LTR(T),
    [U] = TD_LTR(U), [V] = TD_LTR(V), [W] = TD_LTR(W), [X] = TD_LTR(X), [Y] = TD_LTR(Y),
    [Z] = TD_LTR(Z),
};

#define BSPC         KC_BSPC
#define ENG          KC_LNG2
#define JPN          KC_LNG1
#define DEL          KC_DEL
#define SPC          KC_SPC
#define BTN1         KC_BTN1
#define BTN2         KC_BTN2
#define BTN3         KC_BTN3
#define ESC          KC_ESC
#define TAB          KC_TAB
#define ENT          KC_ENT
#define RGHT         KC_RGHT
#define LEFT         KC_LEFT
#define HOME         KC_HOME
#define END          KC_END
#define MINECRAFT    C(KC_F1)   // minecraft-launcher
#define KEYBOARD     C(KC_F2)   // xfce4-keyboard-settings
#define MOUSE        C(KC_F3)   // xfce4-mouse-settings
#define CHROME       C(KC_F4)   // google-chrome
#define VSCODE       C(KC_F5)   // vscode
#define SOUND        C(KC_F6)   // pavucontrol
#define APPEARANCE   C(KC_F7)   // xfce4-appearance-settings
#define WINDOW       C(KC_F8)   // xfwm4-settings
#define FIREFOX      C(KC_F9)   // firefox-esr
#define APPFINDER    C(KC_F10)  // xfce4-appfinder
#define THUNAR       C(KC_F11)  // thunar
#define TERMINAL     C(KC_F12)  // xfce4-terminal
#define OBS          C(KC_F13)  // obs

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
    LT(_8,ESC),   LT(_7,KC_DOT),LT(_6,KC_COMM),MS_WHLU,      VOICE,        /*    */	    VOICE,        MS_WHLU,      LT(_6,KC_COMM),LT(_7,KC_DOT),LT(_8,ESC),
    LT(_9,BTN3),  LEFT,         RGHT,          LT(_5,BTN1),  LT(_4,TAB),   /*    */     LT(_4,TAB),   LT(_5,BTN1),  LEFT,          RGHT,         LT(_9,BTN3),
    LT(_10,ENT),  KC_VOLD,      KC_VOLU,       MS_WHLD,      LT(_3,SPC),   /*    */     LT(_3,SPC),   MS_WHLD,      KC_VOLD,       KC_VOLU,      LT(_10,ENT),
    KC_MPLY,      KC_MUTE,      TG(_C),        LT(_1,DEL),   LT(_2,BSPC),  /*    */     LT(_2,BSPC),  LT(_1,DEL),   TG(_C),        KC_MUTE,      KC_MPLY),
[_C] = LAYOUT(
    LT(_8,KC_L),  LT(_7,KC_O),  LT(_6,KC_E),   KC_Y,         KC_W,         /*    */     KC_P,         KC_R,         LT(_6,KC_T),   LT(_7,KC_S),  LT(_8,KC_X),
    LT(_9,KC_A),  KC_J,         KC_C,          LT(_5,KC_I),  LT(_4,KC_F),  /*    */     KC_H,         LT(_5,KC_N),  KC_D,          KC_Z,         LT(_9,KC_K),
    LT(_10,KC_Q), LEFT,         RGHT,          KC_U,         LT(_3,KC_V),  /*    */     KC_B,         KC_M,         LEFT,          RGHT,         LT(_10,KC_G),
    KC_MPLY,      KC_MUTE,      TG(_C),        LT(_S,DEL),   LT(_B,BSPC),  /*    */     LT(_S,SPC),   LT(_B,ENT),   TG(_C),        KC_MUTE,      KC_MPLY),
[_S] = LAYOUT(
    S(KC_L),      S(KC_O),      S(KC_E),       S(KC_Y),      S(KC_W),      /*    */     S(KC_P),      S(KC_R),      S(KC_T),       S(KC_S),      S(KC_X),
    S(KC_A),      S(KC_J),      S(KC_C),       S(KC_I),      S(KC_F),      /*    */     S(KC_H),      S(KC_N),      S(KC_D),       S(KC_Z),      S(KC_K),
    S(KC_Q),      XXXXXXX,      XXXXXXX,       S(KC_U),      S(KC_V),      /*    */     S(KC_B),      S(KC_M),      XXXXXXX,       XXXXXXX,      S(KC_G),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       PRN,          KC_UNDS,      /*    */     JPN,          ENG,          XXXXXXX,       XXXXXXX,      XXXXXXX),
[_B] = LAYOUT(
    ESC,          KC_DOT,       KC_COMM,       MS_WHLU,      VOICE,        /*    */	    VOICE,        MS_WHLU,      KC_COMM,       KC_DOT,       ESC,
    BTN3,         LEFT,         RGHT,          BTN1,         TAB,          /*    */     TAB,          BTN1,         LEFT,          RGHT,         BTN3,
    ENT,          XXXXXXX,      XXXXXXX,       MS_WHLD,      SPC,          /*    */     SPC,          MS_WHLD,      XXXXXXX,       XXXXXXX,      ENT,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_COMM,      KC_DOT,       /*    */     LEFT,         RGHT,         XXXXXXX,       XXXXXXX,      XXXXXXX),
[_1] = LAYOUT(
    TD(L),        TD(O),        TD(E),         TD(Y),        TD(W),        /*    */     TD(W),        TD(Y),        TD(E),         TD(O),        TD(L),
    TD(A),        TD(J),        TD(C),         TD(I),        TD(F),        /*    */     TD(F),        TD(I),        TD(C),         TD(J),        TD(A),
    TD(Q),        XXXXXXX,      XXXXXXX,       TD(U),        TD(V),        /*    */     TD(V),        TD(U),        XXXXXXX,       XXXXXXX,      TD(Q),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       XXXXXXX,      JPN,          /*    */     JPN,          XXXXXXX,      XXXXXXX,       XXXXXXX,      XXXXXXX),
[_2] = LAYOUT(
    TD(X),        TD(S),        TD(T),         TD(R),        TD(P),        /*    */     TD(P),        TD(R),        TD(T),         TD(S),        TD(X),
    TD(K),        TD(Z),        TD(D),         TD(N),        TD(H),        /*    */     TD(H),        TD(N),        TD(D),         TD(Z),        TD(K),
    TD(G),        XXXXXXX,      XXXXXXX,       TD(M),        TD(B),        /*    */     TD(B),        TD(M),        XXXXXXX,       XXXXXXX,      TD(G),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       ENG,          XXXXXXX,      /*    */     XXXXXXX,      ENG,          XXXXXXX,       XXXXXXX,      XXXXXXX),
[_3] = LAYOUT(
    KC_F2,        S(HOME),      S(END),        S(KC_UP),     C(KC_A),      /*    */     C(KC_A),      S(KC_UP),     S(HOME),       S(END),       KC_F2,
    RCS(KC_V),    S(LEFT),      S(RGHT),       C(KC_C),      C(KC_X),      /*    */     C(KC_X),      C(KC_C),      S(LEFT),       S(RGHT),      RCS(KC_V),
    C(KC_V),      XXXXXXX,      XXXXXXX,       S(KC_DOWN),   XXXXXXX,      /*    */     XXXXXXX,      S(KC_DOWN),   XXXXXXX,       XXXXXXX,      C(KC_V),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       S(DEL),       A(KC_F4),     /*    */     A(KC_F4),     S(DEL),       XXXXXXX,       XXXXXXX,      XXXXXXX),
[_4] = LAYOUT(
    MINECRAFT,    MOUSE,        KEYBOARD,      CHROME,       APPFINDER,    /*    */     APPFINDER,    CHROME,       KEYBOARD,      MOUSE,        MINECRAFT,
    SOUND,        APPEARANCE,   WINDOW,        QK_BOOT,      XXXXXXX,      /*    */     XXXXXXX,      QK_BOOT,      WINDOW,        APPEARANCE,   SOUND,
    OBS,          XXXXXXX,      XXXXXXX,       FIREFOX,      VSCODE,       /*    */     VSCODE,       FIREFOX,      XXXXXXX,       XXXXXXX,      OBS,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       THUNAR,       TERMINAL,     /*    */     TERMINAL,     THUNAR,       XXXXXXX,       XXXXXXX,      XXXXXXX),
[_5] = LAYOUT(
    KC_HASH,      KC_COLN,      KC_SLSH,       XXXXXXX,      XXXXXXX,      /*    */     XXXXXXX,      XXXXXXX,      KC_SLSH,       KC_COLN,      KC_HASH,
    C(KC_T),      KC_EXLM,      KC_QUES,       XXXXXXX,      BTN2,         /*    */     BTN2,         XXXXXXX,      KC_QUES,       KC_EXLM,      C(KC_T),
    KC_UNDS,      XXXXXXX,      XXXXXXX,       C(KC_Y),      C(KC_Z),      /*    */     C(KC_Z),      C(KC_Y),      XXXXXXX,       XXXXXXX,      KC_UNDS,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       RCS(KC_T),    C(KC_W),      /*    */     C(KC_W),      RCS(KC_T),    XXXXXXX,       XXXXXXX,      XXXXXXX),
[_6] = LAYOUT(
    KC_INSERT,    KC_PSCR,      XXXXXXX,       C(HOME),      A(KC_S),      /*    */     A(KC_S),      C(HOME),      XXXXXXX,       KC_PSCR,      KC_INSERT,
    KC_PAUSE,     XXXXXXX,      XXXXXXX,       A(TAB),       XXXXXXX,      /*    */     XXXXXXX,      A(TAB),       XXXXXXX,       XXXXXXX,      KC_PAUSE,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       C(END),       C(KC_H),      /*    */     C(KC_H),      C(END),       XXXXXXX,       XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       RCS(KC_C),    C(KC_F),      /*    */     C(KC_F),      RCS(KC_C),    XXXXXXX,       XXXXXXX,      XXXXXXX),
[_7] = LAYOUT(
    XXXXXXX,      KC_SCLN,      KC_BSLS,       KC_AMPR,      KC_TILD,      /*    */     KC_TILD,      KC_AMPR,      KC_BSLS,       KC_SCLN,      XXXXXXX,
    XXXXXXX,      KC_PIPE,      KC_DLR,        KC_AT,        KC_PERC,      /*    */     KC_PERC,      KC_AT,        KC_DLR,        KC_PIPE,      XXXXXXX,
    KC_CAPS,      XXXXXXX,      XXXXXXX,       KC_CIRC,      KC_GRV,       /*    */     KC_GRV,       KC_CIRC,      XXXXXXX,       XXXXXXX,      KC_CAPS,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_DQUO,      KC_QUOT,      /*    */     KC_QUOT,      KC_DQUO,      XXXXXXX,       XXXXXXX,      XXXXXXX),
[_8] = LAYOUT(
    XXXXXXX,      KC_SCLN,      KC_BSLS,       KC_AMPR,      KC_TILD,      /*    */     KC_TILD,      KC_AMPR,      KC_BSLS,       KC_SCLN,      XXXXXXX,
    XXXXXXX,      KC_PIPE,      KC_DLR,        KC_AT,        KC_PERC,      /*    */     KC_PERC,      KC_AT,        KC_DLR,        KC_PIPE,      XXXXXXX,
    KC_CAPS,      XXXXXXX,      XXXXXXX,       KC_CIRC,      KC_GRV,       /*    */     KC_GRV,       KC_CIRC,      XXXXXXX,       XXXXXXX,      KC_CAPS,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_DQUO,      KC_QUOT,      /*    */     KC_QUOT,      KC_DQUO,      XXXXXXX,       XXXXXXX,      XXXXXXX),
[_9] = LAYOUT(
    TG(_11),      RCS(KC_PGUP), RCS(KC_PGDN),  KC_F7,        KC_F5,        /*    */     KC_F5,        KC_F7,        RCS(KC_PGUP), RCS(KC_PGDN),  TG(_11),
    XXXXXXX,      KC_F8,        KC_F11,        KC_MPLY,      KC_F10,       /*    */     KC_F10,       KC_MPLY,      KC_F11,        KC_F8,        XXXXXXX,
    KC_MUTE,      XXXXXXX,      XXXXXXX,       RCS(TAB),     C(TAB),       /*    */     RCS(TAB),     C(TAB),       XXXXXXX,       XXXXXXX,      KC_MUTE,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       A(LEFT),      A(RGHT),      /*    */     A(LEFT),      A(RGHT),      XXXXXXX,       XXXXXXX,      XXXXXXX),
[_10] = LAYOUT(
    S(KC_MUTE),   KC_1,         KC_2,          KC_3,         KC_4,         /*    */     KC_1,         KC_2,         KC_3,          KC_4,         S(KC_MUTE),
    XXXXXXX,      KC_5,         KC_6,          KC_7,         KC_8,         /*    */     KC_5,         KC_6,         KC_7,          KC_8,         XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_9,         KC_0,         /*    */     KC_9,         KC_0,         XXXXXXX,       XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_VOLD,      KC_VOLU,      /*    */     KC_VOLD,      KC_VOLU,      XXXXXXX,       XXXXXXX,      XXXXXXX),
[_11] = LAYOUT(
    TG(_11),      KC_E,         BTN2,          SPC,          KC_Q,         /*    */     KC_Q,         SPC,          BTN2,         KC_E,         TG(_11),
    LT(_12,ESC),  BTN2,         KC_LSFT,       BTN1,         KC_F3,        /*    */     KC_F3,        BTN1,         KC_LSFT,       BTN2,         LT(_12,ESC),
    A(TAB),       XXXXXXX,      XXXXXXX,       S(BTN1),      C(KC_W),      /*    */     C(KC_W),      S(BTN1),      XXXXXXX,       XXXXXXX,      A(TAB),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       S(KC_S),      S(KC_W),      /*    */     S(KC_W),      S(KC_S),      XXXXXXX,       XXXXXXX,      XXXXXXX),
[_12] = LAYOUT(
    XXXXXXX,      KC_1,         KC_2,          KC_3,         KC_4,         /*    */     KC_1,         KC_2,         KC_3,          KC_4,         XXXXXXX,
    XXXXXXX,      KC_5,         KC_6,          KC_7,         KC_8,         /*    */     KC_5,         KC_6,         KC_7,          KC_8,         XXXXXXX,
    ENG,          XXXXXXX,      XXXXXXX,       KC_F,         KC_9,         /*    */     KC_9,         KC_F,         XXXXXXX,       XXXXXXX,      ENG,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_S,         KC_W,         /*    */     KC_W,         KC_S,         XXXXXXX,       XXXXXXX,      XXXXXXX),
};

2. #include ディレクティブとレイヤー定義

keymap.cの冒頭にある#include QMK_KEYBOARD_Hと、enum layer_numberについて解説します。

#include QMK_KEYBOARD_H
enum layer_number {
    _BASE = 0,_C,_S,_B,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,
};
  • #include QMK_KEYBOARD_H: これはQMKファームウェアの基本的な定義やマクロが含まれるヘッダーファイルを読み込むためのものです。QMKでキーボードをカスタマイズする際には、必ず必要となるおまじないのようなものですね。
  • enum layer_number: ここでは、キーボードの「レイヤー」を定義しています。レイヤーとは、キーボードの異なる状態を切り替えるためのもので、例えばLTやTGキーを押すと、それぞれに対応したレイヤーが使えるようになるようになっており、一つの物理キーに複数の機能を割り当てるために使われます。
    • _BASE = 0: これは、キーボードの最も基本的なレイヤー(デフォルトの状態)を定義しています。通常、このレイヤーがアクティブになっています。
    • _C, _S, _B, _1, _2, ...: これらは、カスタムレイヤーの定義です。それぞれのレイヤーに特定の機能やキー配置を割り当てることが可能です。

3. カスタムキーコードの定義

enum custom_keycodes#define SEND_PAIR(str)process_record_user関数について解説します。

enum custom_keycodes {
	VOICE = SAFE_RANGE,PRN,BRC,CBR,ABK,
};

#define SEND_PAIR(str) if (record->event.pressed) SEND_STRING(str);

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case VOICE: SEND_PAIR(SS_TAP(X_LNG1) SS_RCTL(SS_LSFT("s"))); break;
        case PRN:   SEND_PAIR("()"); break;
        case BRC:   SEND_PAIR("[]"); break;
        case CBR:   SEND_PAIR("<>"); break;
        case ABK:   SEND_PAIR("{}"); break;
    }
    return true;
}
  • enum custom_keycodes: ここでは、QMKの標準キーコードにはない、独自のカスタムキーコードを定義しています。
    • VOICE = SAFE_RANGE: SAFE_RANGEは、QMKが内部で使用するキーコードと衝突しない範囲を示す定数です。VOICEは、音声入力に関連するカスタムキーコードとして定義されています。主にはGoogleドキュメントと、VS code の音声入力のショートカットを設定しています。
    • PRN, BRC, CBR, ABK: これらは、それぞれ括弧 ()、角括弧 []、山括弧 <>、波括弧 {} を入力するためのカスタムキーコードです。
  • #define SEND_PAIR(str) if (record->event.pressed) SEND_STRING(str);: これは、キーが押されたときに指定された文字列を送信するためのマクロです。例えば、PRNキーが押されたら()が入力されるように、ペアの記号を簡単に入力できるようにしています。
  • bool process_record_user(uint16_t keycode, keyrecord_t *record): この関数は、キーが押されたり離されたりするたびにQMKファームウェアによって呼び出されます。カスタムキーコードの処理は、この関数内で行われます。
    • switch (keycode): どのカスタムキーコードがトリガーされたかに応じて、異なる処理を実行します。
    • case VOICE: SEND_PAIR(SS_TAP(X_LNG1) SS_RCTL(SS_LSFT("s"))); break;: VOICEキーが押された場合、特定のショートカット(Ctrl + Shift + S)を送信し、音声入力機能をトリガーします。
    • case PRN: SEND_PAIR("()"); break;: PRNキーが押された場合、()を送信します。他の括弧も同様です。
    • return true;: この関数がtrueを返すと、QMKはキーイベントの通常の処理を続行します。falseを返すと、QMKはそれ以上の処理を行いません。

4. タップダンスの定義

enum で定義されているアルファベットと、TD_LTRTD_ROW マクロ、そして tap_dance_actions 配列について解説します。

enum {
    A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
};

#define TD_LTR(kc) ACTION_TAP_DANCE_DOUBLE(KC_##kc, S(KC_##kc))

#define TD_ROW(a, b, c, d, e) \
    [a] = TD_LTR(A), [b] = TD_LTR(B), [c] = TD_LTR(C), [d] = TD_LTR(D), [e] = TD_LTR(E)

tap_dance_action_t tap_dance_actions[] = {
    [A] = TD_LTR(A), [B] = TD_LTR(B), [C] = TD_LTR(C), [D] = TD_LTR(D), [E] = TD_LTR(E),
    [F] = TD_LTR(F), [G] = TD_LTR(G), [H] = TD_LTR(H), [I] = TD_LTR(I), [J] = TD_LTR(J),
    [K] = TD_LTR(K), [L] = TD_LTR(L), [M] = TD_LTR(M), [N] = TD_LTR(N), [O] = TD_LTR(O),
    [P] = TD_LTR(P), [Q] = TD_LTR(Q), [R] = TD_LTR(R), [S] = TD_LTR(S), [T] = TD_LTR(T),
    [U] = TD_LTR(U), [V] = TD_LTR(V), [W] = TD_LTR(W), [X] = TD_LTR(X), [Y] = TD_LTR(Y),
    [Z] = TD_LTR(Z),
};
  • enum { A,B,C,...Z, };: ここでは、アルファベットを列挙型として定義しています。これは、後述するタップダンスのインデックスとして使用されます。
  • #define TD_LTR(kc) ACTION_TAP_DANCE_DOUBLE(KC_##kc, S(KC_##kc)): これは、タップダンスの動作を定義するマクロです。
    • ACTION_TAP_DANCE_DOUBLE: QMKのタップダンス機能の一つで、キーを1回タップしたときと2回タップしたときで異なる動作を割り当てることができます。
    • KC_##kc: キーコードを生成します。例えば、TD_LTR(A)KC_A(Aキー)を意味します。
    • S(KC_##kc): シフトキーを押しながらキーコードを送信します。つまり、TD_LTR(A)は、1回タップでa、2回タップでAを入力するタップダンスを定義しています。片手入力時に大文字を入力するために設定してあります。
  • #define TD_ROW(a, b, c, d, e) ...: これは、複数のタップダンスをまとめて定義するためのマクロです。行ごとにアルファベットのタップダンスを定義する際に使用されます。
  • tap_dance_action_t tap_dance_actions[] = { ... };: ここでは、実際に使用するタップダンスの配列を定義しています。各アルファベットに対応するタップダンスが、TD_LTRマクロを使って設定されています。

5. アプリケーションショートカットと特殊キーの定義

#define で定義されている様々なキーコードとアプリケーションショートカットについて解説します。

#define BSPC         KC_BSPC
#define ENG          KC_LNG2
#define JPN          KC_LNG1
#define DEL          KC_DEL
#define SPC          KC_SPC
#define BTN1         KC_BTN1
#define BTN2         KC_BTN2
#define BTN3         KC_BTN3
#define ESC          KC_ESC
#define TAB          KC_TAB
#define ENT          KC_ENT
#define RGHT         KC_RGHT
#define LEFT         KC_LEFT
#define HOME         KC_HOME
#define END          KC_END
#define MINECRAFT    C(KC_F1)   // minecraft-launcher
#define KEYBOARD     C(KC_F2)   // xfce4-keyboard-settings
#define MOUSE        C(KC_F3)   // xfce4-mouse-settings
#define CHROME       C(KC_F4)   // google-chrome
#define VSCODE       C(KC_F5)   // vscode
#define SOUND        C(KC_F6)   // pavucontrol
#define APPEARANCE   C(KC_F7)   // xfce4-appearance-settings
#define WINDOW       C(KC_F8)   // xfwm4-settings
#define FIREFOX      C(KC_F9)   // firefox-esr
#define APPFINDER    C(KC_F10)  // xfce4-appfinder
#define THUNAR       C(KC_F11)  // thunar
#define TERMINAL     C(KC_F12)  // xfce4-terminal
#define OBS          C(KC_F13)  // obs
  • #define BSPC KC_BSPC のような定義: これは、QMKの標準キーコードに別名を付けて、コードの可読性を高めています。例えば、KC_BSPC(バックスペースキー)をBSPCと短く記述できるようになります。
  • #define ENG KC_LNG2#define JPN KC_LNG1: これらは、言語切り替えのためのキーコードです。KC_LNG1KC_LNG2は、QMKで定義されている言語切り替え用のキーコードで、それぞれ日本語と英語の切り替えに割り当てられています。
  • #define MINECRAFT C(KC_F1) // minecraft-launcher のような定義: これらは、特定のアプリケーションを起動するためのショートカットキーを定義しています。
    • C(KC_F1): CtrlキーとF1キーの組み合わせを意味します。
    • コメント(// minecraft-launcher)は、そのショートカットがどのアプリケーションに対応しているかを示しています。
    • このように定義しておき、OS側のキーボードショートカットの機能と組み合わせることで、キーボードから直接アプリケーションを起動できるようになり、作業効率が向上します。

6. レイヤーの定義

_BASE レイヤー

_BASE レイヤーは、キーボードの基本的なキー配置を定義しています。このレイヤーは通常、キーボードが起動したときにアクティブになるデフォルトのレイヤーです。

[_BASE] = LAYOUT(
    LT(_8,ESC),   LT(_7,KC_DOT),LT(_6,KC_COMM),MS_WHLU,      VOICE,        /*    */	    VOICE,        MS_WHLU,      LT(_6,KC_COMM),LT(_7,KC_DOT),LT(_8,ESC),
    LT(_9,BTN3),  LEFT,         RGHT,          LT(_5,BTN1),  LT(_4,TAB),   /*    */     LT(_4,TAB),   LT(_5,BTN1),  LEFT,          RGHT,         LT(_9,BTN3),
    LT(_10,ENT),  KC_VOLD,      KC_VOLU,       MS_WHLD,      LT(_3,SPC),   /*    */     LT(_3,SPC),   MS_WHLD,      KC_VOLD,       KC_VOLU,      LT(_10,ENT),
    KC_MPLY,      KC_MUTE,      TG(_C),        LT(_1,DEL),   LT(_2,BSPC),  /*    */     LT(_2,BSPC),  LT(_1,DEL),   TG(_C),        KC_MUTE,      KC_MPLY),
  • LT(_8,ESC): これは「レイヤーとタップ」の組み合わせです。キーをホールドすると_8レイヤーに一時的に切り替わり、タップするとESCキーコードを送信します。
  • KC_DOT, KC_COMM: 標準のキーコードで、それぞれピリオドとカンマを表します。主に音声入力で作業しており、音声ではなかなか入力しにくい記号なので、デフォルトレイヤーに設置してあります。
  • MS_WHLU, MS_WHLD: マウスホイールの上下スクロールを割り当てています。
  • VOICE: 先ほど「カスタムキーコードの定義」で解説した、音声入力に関連するカスタムキーコードです。
  • LEFT, RGHT: 標準の矢印キーです。
  • KC_VOLD, KC_VOLU: 音量ダウンと音量アップのキーコードです。
  • KC_MPLY, KC_MUTE: メディア再生/一時停止とミュートのキーコードです。
  • TG(_C): _Cレイヤーをトグル(オン/オフ切り替え)します。これにより、両手でCTRL配列が入力できる_Cレイヤーに定義されたキー配置に切り替えることができます。
  • LT(_1,DEL), LT(_2,BSPC): _1レイヤーに一時的に切り替えてDEL_2レイヤーに一時的に切り替えてBSPC(バックスペース)を送信します。

_C レイヤー

_C レイヤーは、両手でCTRL配列による入力に特化したキー配置を定義しています。

[_C] = LAYOUT(
    LT(_8,KC_L),  LT(_7,KC_O),  LT(_6,KC_E),   KC_Y,         KC_W,         /*    */     KC_P,         KC_R,         LT(_6,KC_T),   LT(_7,KC_S),  LT(_8,KC_X),
    LT(_9,KC_A),  KC_J,         KC_C,          LT(_5,KC_I),  LT(_4,KC_F),  /*    */     KC_H,         LT(_5,KC_N),  KC_D,          KC_Z,         LT(_9,KC_K),
    LT(_10,KC_Q), LEFT,         RGHT,          KC_U,         LT(_3,KC_V),  /*    */     KC_B,         KC_M,         LEFT,          RGHT,         LT(_10,KC_G),
    KC_MPLY,      KC_MUTE,      TG(_C),        LT(_S,DEL),   LT(_B,BSPC),  /*    */     LT(_S,SPC),   LT(_B,ENT),   TG(_C),        KC_MUTE,      KC_MPLY),
  • LT(_8,KC_L): _8レイヤーに一時的に切り替え、タップするとLキーを送信します。他のアルファベットも同様に設定されています。
  • KC_Y, KC_W, KC_P, KC_R など: これらのキーは、特定のアルファベットを直接入力するために割り当てられています。
  • LEFT, RGHT: 標準の矢印キーです。
  • KC_MPLY, KC_MUTE: メディア再生/一時停止とミュートのキーコードです。
  • TG(_C): _Cレイヤーをトグル(オン/オフ切り替え)します。このレイヤー内で再度TG(_C)を押すことで、_BASEレイヤーに戻ることができます。
  • LT(_S,DEL), LT(_B,BSPC): _Sレイヤーに一時的に切り替えてDEL_Bレイヤーに一時的に切り替えてBSPC(バックスペース)を送信します。
  • LT(_S,SPC), LT(_B,ENT): _Sレイヤーに一時的に切り替えてSPC(スペース)、_Bレイヤーに一時的に切り替えてENT(エンター)を送信します。

_S レイヤー

_S レイヤーは、主に両手でCTRL配列による入力をする際のShiftキーと組み合わせた文字入力や、特殊な記号の入力に特化したキー配置を定義しています。

[_S] = LAYOUT(
    S(KC_L),      S(KC_O),      S(KC_E),       S(KC_Y),      S(KC_W),      /*    */     S(KC_P),      S(KC_R),      S(KC_T),       S(KC_S),      S(KC_X),
    S(KC_A),      S(KC_J),      S(KC_C),       S(KC_I),      S(KC_F),      /*    */     S(KC_H),      S(KC_N),      S(KC_D),       S(KC_Z),      S(KC_K),
    S(KC_Q),      XXXXXXX,      XXXXXXX,       S(KC_U),      S(KC_V),      /*    */     S(KC_B),      S(KC_M),      XXXXXXX,       XXXXXXX,      S(KC_G),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       PRN,          KC_UNDS,      /*    */     JPN,          ENG,          XXXXXXX,       XXXXXXX,      XXXXXXX),
  • S(KC_L): Shiftキーを押しながらLキーを送信します。これにより、大文字のLが入力されます。他のアルファベットも同様に設定されており、このレイヤーでは常に大文字が入力されるようになっています。
  • XXXXXXX: キーが割り当てられていないことを示します。
  • PRN: 先ほど「カスタムキーコードの定義」で解説した、()を入力するためのカスタムキーコードです。
  • KC_UNDS: アンダーバー(_)を入力するためのキーコードです。
  • JPN: 日本語入力モードに切り替えるためのキーコードです。
  • ENG: 英語入力モードに切り替えるためのキーコードです。

_B レイヤー

_B レイヤーは、主に基本的なキーコードやマウス操作、ナビゲーションに特化したキー配置を定義しています。両手でCTRL配列に利用するレイヤーであり、デフォルトのレイヤーを少しカスタマイズした配置になっています。

[_B] = LAYOUT(
    ESC,          KC_DOT,       KC_COMM,       MS_WHLU,      VOICE,        /*    */	    VOICE,        MS_WHLU,      KC_COMM,       KC_DOT,       ESC,
    BTN3,         LEFT,         RGHT,          BTN1,         TAB,          /*    */     TAB,          BTN1,         LEFT,          RGHT,         BTN3,
    ENT,          XXXXXXX,      XXXXXXX,       MS_WHLD,      SPC,          /*    */     SPC,          MS_WHLD,      XXXXXXX,       XXXXXXX,      ENT,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_COMM,      KC_DOT,       /*    */     LEFT,         RGHT,         XXXXXXX,       XXXXXXX,      XXXXXXX),
  • ESC: エスケープキーです。
  • KC_DOT, KC_COMM: ピリオドとカンマです。
  • MS_WHLU, MS_WHLD: マウスホイールの上下スクロールです。
  • VOICE: 音声入力に関連するカスタムキーコードです。
  • BTN3, BTN1: マウスのボタン3とボタン1です。
  • LEFT, RGHT: 標準の矢印キーです。
  • TAB: タブキーです。
  • ENT: エンターキーです。
  • SPC: スペースキーです。
  • XXXXXXX: キーが割り当てられていないことを示します。

_1 レイヤー

_1 レイヤーは、親指で切り替えるレイヤーであり主にタップダンス機能を利用したアルファベット入力、母音に特化したキー配置を定義しています。

[_1] = LAYOUT(
    TD(L),        TD(O),        TD(E),         TD(Y),        TD(W),        /*    */     TD(W),        TD(Y),        TD(E),         TD(O),        TD(L),
    TD(A),        TD(J),        TD(C),         TD(I),        TD(F),        /*    */     TD(F),        TD(I),        TD(C),         TD(J),        TD(A),
    TD(Q),        XXXXXXX,      XXXXXXX,       TD(U),        TD(V),        /*    */     TD(V),        TD(U),        XXXXXXX,       XXXXXXX,      TD(Q),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       XXXXXXX,      JPN,          /*    */     JPN,          XXXXXXX,      XXXXXXX,       XXXXXXX,      XXXXXXX),
  • TD(L): これは、Lキーのタップダンスを意味します。先ほど「タップダンスの定義」で解説したTD_LTRマクロによって、1回タップで小文字のl、2回タップで大文字のLが入力されるように設定されています。他のアルファベットも同様です。
  • XXXXXXX: キーが割り当てられていないことを示します。
  • JPN: 日本語入力モードに切り替えるためのキーコードです。

_2 レイヤー

_2 レイヤーは、_1 レイヤーと同様に親指で切り替えるレイヤーであり、主にタップダンス機能を利用したアルファベット入力、子音に特化したキー配置を定義しています。

[_2] = LAYOUT(
    TD(X),        TD(S),        TD(T),         TD(R),        TD(P),        /*    */     TD(P),        TD(R),        TD(T),         TD(S),        TD(X),
    TD(K),        TD(Z),        TD(D),         TD(N),        TD(H),        /*    */     TD(H),        TD(N),        TD(D),         TD(Z),        TD(K),
    TD(G),        XXXXXXX,      XXXXXXX,       TD(M),        TD(B),        /*    */     TD(B),        TD(M),        XXXXXXX,       XXXXXXX,      TD(G),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       ENG,          XXXXXXX,      /*    */     XXXXXXX,      ENG,          XXXXXXX,       XXXXXXX,      XXXXXXX),
  • TD(X): これは、Xキーのタップダンスを意味します。TD_LTRマクロによって、1回タップで小文字のx、2回タップで大文字のXが入力されるように設定されています。他のアルファベットも同様です。
  • XXXXXXX: キーが割り当てられていないことを示します。
  • ENG: 英語入力モードに切り替えるためのキーコードです。

_3 レイヤー

_3 レイヤーは、親指を少し上にあげて切り替えるレイヤーであり主にファンクションキー、ナビゲーション、コピー&ペーストなどのショートカットに特化したキー配置を定義しています。

[_3] = LAYOUT(
    KC_F2,        S(HOME),      S(END),        S(KC_UP),     C(KC_A),      /*    */     C(KC_A),      S(KC_UP),     S(HOME),       S(END),       KC_F2,
    RCS(KC_V),    S(LEFT),      S(RGHT),       C(KC_C),      C(KC_X),      /*    */     C(KC_X),      C(KC_C),      S(LEFT),       S(RGHT),      RCS(KC_V),
    C(KC_V),      XXXXXXX,      XXXXXXX,       S(KC_DOWN),   XXXXXXX,      /*    */     XXXXXXX,      S(KC_DOWN),   XXXXXXX,       XXXXXXX,      C(KC_V),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       S(DEL),       A(KC_F4),     /*    */     A(KC_F4),     S(DEL),       XXXXXXX,       XXXXXXX,      XXXXXXX),
  • KC_F2: ファンクションキーF2です。主にリネームに利用しています。
  • S(HOME), S(END): Shiftキーを押しながらHomeEndキーを送信します。これにより、行の先頭から現在位置まで、または現在位置から行の末尾までを選択できます。
  • S(KC_UP), S(KC_DOWN): Shiftキーを押しながら上矢印、下矢印キーを送信します。これにより、テキストを複数行選択できます。
  • C(KC_A): Ctrlキーを押しながらAキーを送信します。これにより、すべて選択(Select All)を実行できます。
  • RCS(KC_V): Ctrl + Shift + Vを送信します。これは、ターミナルなどでテキストを貼り付ける際によく使われます。
  • S(LEFT), S(RGHT): Shiftキーを押しながら左矢印、右矢印キーを送信します。これにより、テキストを文字単位で選択できます。
  • C(KC_C), C(KC_X), C(KC_V): それぞれコピー(Copy)、カット(Cut)、ペースト(Paste)のショートカットです。
  • XXXXXXX: キーが割り当てられていないことを示します。
  • S(DEL): Shiftキーを押しながらDeleteキーを送信します。これにより、選択した項目を完全に削除できます。
  • A(KC_F4): Altキーを押しながらF4キーを送信します。これにより、アクティブなウィンドウを閉じることができます。

_4 レイヤー

_4 レイヤーは、人差し指を少し伸ばして切り替えるレイヤーであり、主にアプリケーションの起動ショートカットに特化したキー配置を定義しています。

[_4] = LAYOUT(
    MINECRAFT,    MOUSE,        KEYBOARD,      CHROME,       APPFINDER,    /*    */     APPFINDER,    CHROME,       KEYBOARD,      MOUSE,        MINECRAFT,
    SOUND,        APPEARANCE,   WINDOW,        QK_BOOT,      XXXXXXX,      /*    */     XXXXXXX,      QK_BOOT,      WINDOW,        APPEARANCE,   SOUND,
    OBS,          XXXXXXX,      XXXXXXX,       FIREFOX,      VSCODE,       /*    */     VSCODE,       FIREFOX,      XXXXXXX,       XXXXXXX,      OBS,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       THUNAR,       TERMINAL,     /*    */     TERMINAL,     THUNAR,       XXXXXXX,       XXXXXXX,      XXXXXXX),
  • MINECRAFT: Minecraft Launcherを起動するショートカットです。
  • MOUSE: マウス設定を開くショートカットです。
  • KEYBOARD: キーボード設定を開くショートカットです。
  • CHROME: Google Chromeを起動するショートカットです。
  • APPFINDER: アプリケーションファインダーを起動するショートカットです。
  • SOUND: サウンド設定を開くショートカットです。
  • APPEARANCE: 外観設定を開くショートカットです。
  • WINDOW: ウィンドウマネージャー設定を開くショートカットです。
  • QK_BOOT: キーボードをブートローダーモードにするためのキーコードです。ファームウェアの書き込みなどに使用します。
  • OBS: OBS Studioを起動するショートカットです。
  • FIREFOX: Firefoxを起動するショートカットです。
  • VSCODE: VS Codeを起動するショートカットです。
  • THUNAR: Thunarファイルマネージャーを起動するショートカットです。
  • TERMINAL: ターミナルを起動するショートカットです。
  • XXXXXXX: キーが割り当てられていないことを示します。

_5 レイヤー

_5 レイヤーは、人差し指で切り替えるレイヤーであり、主に記号入力や特定のショートカットに特化したキー配置を定義しています。

[_5] = LAYOUT(
    KC_HASH,      KC_COLN,      KC_SLSH,       XXXXXXX,      XXXXXXX,      /*    */     XXXXXXX,      XXXXXXX,      KC_SLSH,       KC_COLN,      KC_HASH,
    C(KC_T),      KC_EXLM,      KC_QUES,       XXXXXXX,      BTN2,         /*    */     BTN2,         XXXXXXX,      KC_QUES,       KC_EXLM,      C(KC_T),
    KC_UNDS,      XXXXXXX,      XXXXXXX,       C(KC_Y),      C(KC_Z),      /*    */     C(KC_Z),      C(KC_Y),      XXXXXXX,       XXXXXXX,      KC_UNDS,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       RCS(KC_T),    C(KC_W),      /*    */     C(KC_W),      RCS(KC_T),    XXXXXXX,       XXXXXXX,      XXXXXXX),
  • KC_HASH: ハッシュ記号(#)です。
  • KC_COLN: コロン(:)です。
  • KC_SLSH: スラッシュ(/)です。
  • C(KC_T): Ctrlキーを押しながらTキーを送信します。これは、新しいタブを開くショートカットとしてよく使われます。
  • KC_EXLM: 感嘆符(!)です。
  • KC_QUES: 疑問符(?)です。
  • BTN2: マウスのボタン2です。
  • KC_UNDS: アンダーバー(_)です。
  • C(KC_Y): Ctrlキーを押しながらYキーを送信します。これは、やり直し(Redo)のショートカットとしてよく使われます。
  • C(KC_Z): Ctrlキーを押しながらZキーを送信します。これは、元に戻す(Undo)のショートカットとしてよく使われます。
  • RCS(KC_T): Ctrl + Shift + Tを送信します。これは、閉じたタブを再度開くショートカットとしてよく使われます。
  • C(KC_W): Ctrlキーを押しながらWキーを送信します。これは、現在のタブやウィンドウを閉じるショートカットとしてよく使われます。
  • XXXXXXX: キーが割り当てられていないことを示します。

_6 レイヤー

_6 レイヤーは、中指で切り替えるレイヤーであり、主にシステム操作や特定のショートカットに特化したキー配置を定義しています。

[_6] = LAYOUT(
    KC_INSERT,    KC_PSCR,      XXXXXXX,       C(HOME),      A(KC_S),      /*    */     A(KC_S),      C(HOME),      XXXXXXX,       KC_PSCR,      KC_INSERT,
    KC_PAUSE,     XXXXXXX,      XXXXXXX,       A(TAB),       XXXXXXX,      /*    */     XXXXXXX,      A(TAB),       XXXXXXX,       XXXXXXX,      KC_PAUSE,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       C(END),       C(KC_H),      /*    */     C(KC_H),      C(END),       XXXXXXX,       XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       RCS(KC_C),    C(KC_F),      /*    */     C(KC_F),      RCS(KC_C),    XXXXXXX,       XXXXXXX,      XXXXXXX),
  • KC_INSERT: インサートキーです。
  • KC_PSCR: プリントスクリーンキーです。OBSの録画開始ボタンに設定しています。
  • C(HOME): Ctrlキーを押しながらHomeキーを送信します。これは、ページの先頭に移動するショートカットとしてよく使われます。
  • A(KC_S): Altキーを押しながらSキーを送信します。Scrotでスクリーンショットを撮影する設定をしています。
  • KC_PAUSE: ポーズキーです。OBSの録画終了ボタンに設定しています。
  • A(TAB): Altキーを押しながらTabキーを送信します。これは、ウィンドウを切り替えるショートカットとしてよく使われます。
  • C(END): Ctrlキーを押しながらEndキーを送信します。これは、ページの最後に移動するショートカットとしてよく使われます。
  • C(KC_H): Ctrlキーを押しながらHキーを送信します。これは、検索と置換のショートカットとしてよく使われます。
  • RCS(KC_C): Ctrl + Shift + Cを送信します。これは、Googleドキュメントの文字数カウントのショートカットです。
  • C(KC_F): Ctrlキーを押しながらFキーを送信します。これは、検索(Find)のショートカットとしてよく使われます。
  • XXXXXXX: キーが割り当てられていないことを示します。

_7 レイヤー

_7 レイヤーは、薬指で切り替えるレイヤーであり、主に括弧や算術記号の入力に特化したキー配置を定義しています。

[_7] = LAYOUT(
    XXXXXXX,      XXXXXXX,      PRN,           ABK,          XXXXXXX,      /*    */     XXXXXXX,      ABK,          PRN,           XXXXXXX,      XXXXXXX,
    CBR,          XXXXXXX,      XXXXXXX,       BRC,          XXXXXXX,      /*    */     XXXXXXX,      BRC,          XXXXXXX,       XXXXXXX,      CBR,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_PLUS,      KC_MINS,      /*    */     KC_MINS,      KC_PLUS,      XXXXXXX,       XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_ASTR,      KC_EQL,       /*    */     KC_EQL,       KC_ASTR,      XXXXXXX,       XXXXXXX,      XXXXXXX),
  • PRN: 先ほど「カスタムキーコードの定義」で解説した、()を入力するためのカスタムキーコードです。
  • ABK: 先ほど「カスタムキーコードの定義」で解説した、{}を入力するためのカスタムキーコードです。
  • CBR: 先ほど「カスタムキーコードの定義」で解説した、<>を入力するためのカスタムキーコードです。
  • BRC: 先ほど「カスタムキーコードの定義」で解説した、[]を入力するためのカスタムキーコードです。
  • KC_PLUS: プラス記号(+)です。
  • KC_MINS: マイナス記号(-)です。
  • KC_ASTR: アスタリスク(*)です。
  • KC_EQL: イコール記号(=)です。
  • XXXXXXX: キーが割り当てられていないことを示します。

_8 レイヤー

_8 レイヤーは、小指を少し上に上げて切り替えるレイヤーであり、主に記号入力に特化したキー配置を定義しています。

[_8] = LAYOUT(
    XXXXXXX,      KC_SCLN,      KC_BSLS,       KC_AMPR,      KC_TILD,      /*    */     KC_TILD,      KC_AMPR,      KC_BSLS,       KC_SCLN,      XXXXXXX,
    XXXXXXX,      KC_PIPE,      KC_DLR,        KC_AT,        KC_PERC,      /*    */     KC_PERC,      KC_AT,        KC_DLR,        KC_PIPE,      XXXXXXX,
    KC_CAPS,      XXXXXXX,      XXXXXXX,       KC_CIRC,      KC_GRV,       /*    */     KC_GRV,       KC_CIRC,      XXXXXXX,       XXXXXXX,      KC_CAPS,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_DQUO,      KC_QUOT,      /*    */     KC_QUOT,      KC_DQUO,      XXXXXXX,       XXXXXXX,      XXXXXXX),
  • KC_SCLN: セミコロン(;)です。
  • KC_BSLS: バックスラッシュ(\)です。
  • KC_AMPR: アンパサンド(&)です。
  • KC_TILD: チルダ(~)です。
  • KC_PIPE: パイプ(|)です。
  • KC_DLR: ドル記号($)です。
  • KC_AT: アットマーク(@)です。
  • KC_PERC: パーセント記号(%)です。
  • KC_CAPS: Caps Lockキーです。
  • KC_CIRC: キャレット(^)です。
  • KC_GRV: グレイブアクセント(`)です。
  • KC_DQUO: ダブルクォーテーション(")です。
  • KC_QUOT: シングルクォーテーション(')です。
  • XXXXXXX: キーが割り当てられていないことを示します。

_9 レイヤー

_9 レイヤーは、小指で切り替えるレイヤーであり、主にファンクションキー、ページナビゲーション、メディアコントロール、タブ操作などに特化したキー配置を定義しています。

[_9] = LAYOUT(
    TG(_11),      RCS(KC_PGUP), RCS(KC_PGDN),  KC_F7,        KC_F5,        /*    */     KC_F5,        KC_F7,        RCS(KC_PGUP), RCS(KC_PGDN),  TG(_11),
    XXXXXXX,      KC_F8,        KC_F11,        KC_MPLY,      KC_F10,       /*    */     KC_F10,       KC_MPLY,      KC_F11,        KC_F8,        XXXXXXX,
    KC_MUTE,      XXXXXXX,      XXXXXXX,       RCS(TAB),     C(TAB),       /*    */     RCS(TAB),     C(TAB),       XXXXXXX,       XXXXXXX,      KC_MUTE,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       A(LEFT),      A(RGHT),      /*    */     A(LEFT),      A(RGHT),      XXXXXXX,       XXXXXXX,      XXXXXXX),
  • TG(_11): _11レイヤーをトグル(オン/オフ切り替え)します。
  • RCS(KC_PGUP), RCS(KC_PGDN): Ctrl + Shift + Page UpCtrl + Shift + Page Downを送信します。これは、ブラウザのタブ移動などによく使われます。
  • KC_F7, KC_F5, KC_F8, KC_F11, KC_F10: ファンクションキーです。
  • KC_MPLY: メディア再生/一時停止です。
  • KC_MUTE: ミュートです。
  • RCS(TAB): Ctrl + Shift + Tabを送信します。これは、タブを逆順に切り替えるショートカットとしてよく使われます。
  • C(TAB): Ctrl + Tabを送信します。これは、タブを順順に切り替えるショートカットとしてよく使われます。
  • A(LEFT), A(RGHT): Altキーを押しながら左矢印、右矢印キーを送信します。これは、ブラウザの戻る/進む操作などによく使われます。
  • XXXXXXX: キーが割り当てられていないことを示します。

_10 レイヤー

_10 レイヤーは、小指を少し下に下げて切り替えるレイヤーであり、主に数字入力とメディアコントロールに特化したキー配置を定義しています。

[_10] = LAYOUT(
    S(KC_MUTE),   KC_1,         KC_2,          KC_3,         KC_4,         /*    */     KC_1,         KC_2,         KC_3,          KC_4,         S(KC_MUTE),
    XXXXXXX,      KC_5,         KC_6,          KC_7,         KC_8,         /*    */     KC_5,         KC_6,         KC_7,          KC_8,         XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_9,         KC_0,         /*    */     KC_9,         KC_0,         XXXXXXX,       XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_VOLD,      KC_VOLU,      /*    */     KC_VOLD,      KC_VOLU,      XXXXXXX,       XXXXXXX,      XXXXXXX),
  • S(KC_MUTE): Shiftキーを押しながらミュートキーを送信します。
  • KC_1KC_0: 数字キーです。
  • XXXXXXX: キーが割り当てられていないことを示します。
  • KC_VOLD: 音量ダウンです。
  • KC_VOLU: 音量アップです。

_11 レイヤー

_11 レイヤーは、マインクラフトで遊ぶためのレイヤーであり、主にマインクラフトの操作に特化したキー配置を定義しています。

[_11] = LAYOUT(
    TG(_11),      KC_E,         BTN2,          SPC,          KC_Q,         /*    */     KC_Q,         SPC,          BTN2,         KC_E,         TG(_11),
    LT(_12,ESC),  BTN2,         KC_LSFT,       BTN1,         KC_F3,        /*    */     KC_F3,        BTN1,         KC_LSFT,       BTN2,         LT(_12,ESC),
    A(TAB),       XXXXXXX,      XXXXXXX,       S(BTN1),      C(KC_W),      /*    */     C(KC_W),      S(BTN1),      XXXXXXX,       XXXXXXX,      A(TAB),
    XXXXXXX,      XXXXXXX,      XXXXXXX,       S(KC_S),      S(KC_W),      /*    */     S(KC_W),      S(KC_S),      XXXXXXX,       XXXXXXX,      XXXXXXX),
  • TG(_11): _11レイヤーをトグル(オン/オフ切り替え)します。このレイヤー内で再度TG(_11)を押すことで、元のレイヤーに戻ることができます。
  • KC_E: Eキーです。これはマインクラフトでインベントリを開く設定です。
  • BTN2: マウスのボタン2です。これはマインクラフトでアイテムを置くときなどの設定です。
  • SPC: スペースキーです。これはマインクラフトのジャンプの設定です。
  • KC_Q: Qキーです。これはマインクラフトでアイテムを手放す時の設定です。
  • LT(_12,ESC): _12レイヤーに一時的に切り替え、タップするとESCキーコードを送信します。
  • KC_LSFT: 左Shiftキーです。これはマインクラフトでスニークするときの設定です。
  • BTN1: マウスのボタン1です。これはマインクラフトでアイテムを壊したりする時の設定です。
  • KC_F3: ファンクションキーF3です。これはマインクラフトでデバッグ画面を出すための設定です。
  • A(TAB): Altキーを押しながらTabキーを送信します。これは、ウィンドウを切り替えるショートカットとしてよく使われます。
  • S(BTN1): Shiftキーを押しながらマウスのボタン1を送信します。これはマインクラフトでシフトをしながらマウスクリックを押すときの設定です。
  • C(KC_W): Ctrlキーを押しながらWキーを送信します。これは、マインクラフトでダッシュで前に進む設定です。
  • S(KC_S): Shiftキーを押しながらSキーを送信します。これはマインクラフトでスニークして後ろに下がる設定です。
  • S(KC_W): Shiftキーを押しながらWキーを送信します。これはマインクラフトでスニークして前に進む設定です。
  • XXXXXXX: キーが割り当てられていないことを示します。

_12 レイヤー

_12 レイヤーは、マインクラフトで遊ぶためのレイヤーであり、主に数字入力(アイテム選択)、言語切り替え、通常の前後移動などのキー配置を定義しています。

[_12] = LAYOUT(
    XXXXXXX,      KC_1,         KC_2,          KC_3,         KC_4,         /*    */     KC_1,         KC_2,         KC_3,          KC_4,         XXXXXXX,
    XXXXXXX,      KC_5,         KC_6,          KC_7,         KC_8,         /*    */     KC_5,         KC_6,         KC_7,          KC_8,         XXXXXXX,
    ENG,          XXXXXXX,      XXXXXXX,       KC_F,         KC_9,         /*    */     KC_9,         KC_F,         XXXXXXX,       XXXXXXX,      ENG,
    XXXXXXX,      XXXXXXX,      XXXXXXX,       KC_S,         KC_W,         /*    */     KC_W,         KC_S,         XXXXXXX,       XXXXXXX,      XXXXXXX),
  • KC_1KC_8, KC_9: 数字キーです。
  • XXXXXXX: キーが割り当てられていないことを示します。
  • ENG: 英語入力モードに切り替えるためのキーコードです。
  • KC_F: Fキーです。これはJava版のマインクラフトで右手に持っているアイテムを左手に(オフハンド)をするときの設定です。
  • KC_S: Sキーです。これはマインクラフトで後ろに下がる設定です。
  • KC_W: Wキーです。これはマインクラフトで前に進む設定です。

まとめ

CTRL配列については、ほとんど配置の更新をしておらず、最近はキーマップやレイヤーの細かな変更などのカスタマイズを行っていました。配置はしてあるものの使わないキーなどもあるため、まだまだ改良の余地はあるものの、その都度違和感や使い心地を細かくチェックしながら自分好みのキーボードレイアウトになったと考えています。

物理的なキーは15キーですが、組み合わせによってその10倍以上のキーを使えるようになっており、覚えるのが大変ということも最近は感じたことはありません。主に音声入力で作業をしていること、

特に最近はGemini CLI + VS Code + 音声入力の組み合わせによって、キー入力そのものも少なくなっています。コマンドの実行さえも音声で入力したものをGemini CLIに伝えるだけで実行してくれるので手入力はほとんどしなくなりました。

ただし、QiitaではAIに書かせてはいる、もしくは人力と組み合わせているものの、やはり納品できるレベルにはならないということ、同時に著作権や目に見えない部分の法的なことを考えると、自分自身で文章を作成するスタンスを変更してはいません。

ライターとして納品する文章については、音声入力を基軸として、全てオリジナルで作成しているということも明記しておきます。

その他、何か面白いアイディアやアドバイスがあれば是非とも教えてくれると嬉しいです!

また、ライターとしてのお仕事も募集しておりますので、気軽にお声がけください!


2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?