leopardgeckoのブログ

Macの関連事項など

Planckキーボード:MacとWindows(とiOS)で同じキーを使って日本語入力の切替。

今回もPlanckキーボードというよりはQMK Firmwareの話です。

はじめに

MacWindowsでは日本語入力の切り替え方法が違って面倒だなと思うことはないでしょうか。そもそもMac用のキーボードにはWindows用のキーがありませんし、その逆もまた然りです。同じキーボードを使い回すということを考えたことすらない人も多いでしょう。キーリマップソフトを使う手もありますが、そのソフトを入れたマシンでしか使えないのがネックとなります。

しかし、PlanckなどのQMK Firmware対応のキーボードではキーボード側にMacとWin専用のキーを共存させられるだけでなく同時押し(正確には連続押し)を割り当てることもできますから、工夫次第で同じキーでMacWindowsで同じように日本語入力切り替えができるようになります。

Planckを例に話を進めます。MacでもWinでも「Lower」キーをタップすれば英語入力になり、「Raise」キーで日本語入力に切り替わる仕組みを考えます。もちろん長押しで本来の「Lower」「Raise」キーとして動作します。

考え方

まずWindowsの標準機能で「無変換」キーをIMEオフ(日本語入力オフ)に、「変換」キーをIMEオン(日本語入力オン)に割り当てておきます。(具体的なやり方は他サイトを参照してください)

次にPlanckの「Lower」キーにMacの「英数」キーとWinの「無変換」キーの同時押しを割り当て、同様に「Raise」キーにMacの「かな」キーとWinの「変換」キーの同時押しを割り当てます。そうすることによりキーボード側でレイヤーを切り替えたりしなくてもMacでもWinでも同じキーで日本語入力のオンオフができるようになります。 この機能はiPadiPhoneなどのiOS機でも使えます。

やり方

QMK Firmwareのマクロ機能を応用します。
まず「keymap.c」の最初の方に以下のようにマクロとキーコードの宣言を追加します。

enum user_macro {
  UM_EMHL,
  UM_KHKR
};
#define M_EMHL MACROTAP(UM_EMHL)      // 「Lower」キー用のキーコード
#define M_KHKR MACROTAP(UM_KHKR)      // 「Raise」キー用のキーコード

次に「keymap.c」の後ろの方にマクロ用の関数を追加します。

const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
    switch(id) {
        case UM_EMHL: // タップで「英数」と「無変換」、ホールドで「Lower」
        return MACRO_TAP_HOLD_LAYER( record, MACRO(T(MHEN), T(LANG2), END), _LOWER );
        case UM_KHKR: // タップで「かな」と「変換」、ホールドで「Raise」
        return MACRO_TAP_HOLD_LAYER( record, MACRO(T(HENK), T(LANG1), END), _RAISE );
        };
        return MACRO_NONE;
}

あとは「Lower」のキーコードに「M_EMHL」を指定し、「Raise」に「M_KHKR」を指定すれば、MacでもWinでもiOS機でも同じキーで日本語入力切り替えができるキーボードの出来上がりです。

Windowsで事前の設定が必要になりますがOSの標準機能だけで出来ることですし、一度設定してしまえば同じキーボードで同じキーが同じように動作するのは楽だと思います。

おまけ情報

コピペなどに使う修飾キーはMacではコマンドキー、Windowsではコントロールキーという違いがあって使い分けが面倒です。そこで、QMK Firmwareのkeymapでコマンドキーとコントロールキーの位置を入れ替えておき、macOSのシステム設定でコマンドキーとコントロールキーの役割を入れ替えておけば、MacでもWindowsでも同じキーでコピペができるキーボードになります。