Mac で日本語ThinkPadキーボードを英語配列で使う

2021/12/20に公開

これは SmartHRアドベントカレンダー の20日目の記事です。

https://qiita.com/advent-calendar/2021/smarthr

SmartHR に入社して50日が経ちました。社内では tommy と呼ばれています(社内では Slack 名で呼び合う文化で、tmtms だと呼びにくいので tommy にした)。

会社の PC は MacBook Pro なので人生初 Mac。メモリ 32GB / SSD 512GB なのでかなり人権がある感じ。さらに PC は2年で交換対象になるらしい。
もっとしょぼいPCを5年間も使わないといけなかった職場にいたこともあるので、素晴らしい。

Linux で動くプログラムを開発するのなら macOS を使うよりも Linux を使ったほうがいいと思うんだけど、まあ Linux だと仕事で使うアプリの対応が悪いので仕方ない。

しかしこの季節 MacBook は朝冷たい。しばらく使ってたら温かくなるんで手の暖房にはいいんだけど、この調子だと夏は相当熱くなるんじゃないかなぁ。

英語キーボードと日本語キーボードを選択できたんで英語キーボードを選んだんだけどダメだった。普段日本語キーボードを英語配列で使ってるのでまあなんとかなるだろうと思ったんだけど、甘かった。

一番の問題は Esc を押し間違えること。普段 1 の左隣りに Esc を配置していたので。かといって Esc1 の左隣りに配置すると ` の行き場がなくなってしまう。

じゃあ日本語キーボードなら良かったかというと、普通の日本語キーボードは 1 の左は 半角/全角 キーがあるのに、なぜか Mac の日本語キーボードは 1 がでかくなってて左側にキーがないので、そもそもダメ。

ということで、今まで使ってた USB接続の ThinkPadトラックポイントキーボードを使うことにした。朝冷たくて手を置けないという問題も解決できる。

ThinkPad キーボード日本語版はこういう配列で、

これを英語キーボードとして認識させるとこうなるんだけど、

この赤いキーを普段 Linux ではこのように変更してるので、Mac でもこれと同じような感じにしたい。

Karabiner-Elements というのでキーマップを自由にいじれるっぽいので試してみた。いやー、神アプリだなこれ。

外付けキーボードにだけ設定を効かせることもできるので、キーボードを外して本体だけで操作しないといけなくなってもキーマップが変になることはない。

英語キーボードに無い日本語キーボードのキーは internationalX という名前で参照できるみたいで、こういう対応だった。

  • international1 → ろ
  • international2 →カタカナひらがな
  • international3 → ¥
  • international4 → 変換
  • international5 → 無変換

\ キー(元は ] キー)が backslash じゃなくて non_us_ponud だというところに少しハマった。
Karabiner-EventViewer というツールで確認できた。

短押しと長押しで設定を変更できるみたいで、「Complex modifications」→「Add Rule」→「import more rules from the Internet」から「For Japanese(日本語環境向けの設定)」を取り込んで、「コマンドキーを単体で押したときに、英数・かなキーを送信する」を有効にした。

option キー(キーボード上は Alt キー)の使いみちがわからなかったので、それも command に割り当てた。

「Change mouse motion to scroll」をインポートして「Change button3 + mouse motion to scroll wheel」を有効にしたら中ボタン+トラックポイントでスクロールできるようにはなったんだけど、中ボタン単体で中クリックを有効にしたい。

ググっても見つからなかったけど、command キーの短押しと長押しで機能を切り替えられるということは、中ボタンでもなんとかできるだろうと ~/.config/karainer/karabiner.json をテキトーにいじってたらできるようになった。やり方が合ってるかどうかはしらない。

    "profiles": [
        {
            "complex_modifications": {
                "parameters": {
                    "basic.simultaneous_threshold_milliseconds": 50,
                    "basic.to_delayed_action_delay_milliseconds": 500,
                    "basic.to_if_alone_timeout_milliseconds": 1000,
                    "basic.to_if_held_down_threshold_milliseconds": 500,
                    "mouse_motion_to_scroll.speed": 100
                },
                "rules": [
                    {
                        "available_since": "12.3.0",
                        "description": "Change button3 + mouse motion to scroll wheel (rev 1)",
                        "manipulators": [
                            {
                                "from": {
                                    "modifiers": {
                                        "optional": [
                                            "any"
                                        ]
                                    },
                                    "pointing_button": "button3"
                                },
                                "parameters": {
                                    "basic.to_if_alone_timeout_milliseconds": 100
                                },
                                "to": [
                                    {
                                        "set_variable": {
                                            "name": "enable_mouse_motion_to_scroll",
                                            "value": 1
                                        }
                                    }
                                ],
                                "to_after_key_up": [
                                    {
                                        "set_variable": {
                                            "name": "enable_mouse_motion_to_scroll",
                                            "value": 0
                                        }
                                    }
                                ],
                                "to_if_alone": [
                                    {
                                        "pointing_button": "button3"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "conditions": [
                                    {
                                        "name": "enable_mouse_motion_to_scroll",
                                        "type": "variable_if",
                                        "value": 1
                                    }
                                ],
                                "from": {
                                    "modifiers": {
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "type": "mouse_motion_to_scroll"
                            }
                        ]
                    },

これで普通に使えるようになった。


しかし macOS は使いにくい。個人的に慣れてないというのが大きいとは思うけど、ウィンドウとメニューバーが遠いというのはどういうことなんだろう。4Kみたいな大画面時代なのに未だにひとつのウィンドウを全画面で使う前提なんだろうか。

ほかには、マウスをウィンドウの上に乗せるだけでキーボードフォーカスをウィンドウにあてることができないとか。不便。

Windows や Linux に対する唯一の長所だと思ったのが、キーボードショートカットが command キーに割り当てられてて、テキスト編集に使う control とは別であること。
ブラウザ内でのテキスト編集時に Ctrl-N がブラウザに奪われることがない。Linux や Windows も Alt にショートカットキーを割り当てればよかったのになぁ。

でもこの唯一の利点が一番慣れなくて困っているところ。仕事以外の時間は Linux デスクトップを使ってるからだと思うので、Linux でも macOS と同じようなショートカットを使うようにしようかなぁ…。

たぶん xremapxkeysnail を使ってうまく設定すればある程度はいけそうな気がする。

Discussion