UK/USキーボードが捗るキーバインド設定

最近MacのMagic KeyboardをUK配列（USとほぼ同じ）に切り換えたので、[Karabiner-Elements](https://karabiner-elements.pqrs.org)を使用してキーバインドをカスタマイズしました。


# caps_lockをcontrolに変更する
これはJIS配列でもお馴染みですね。Karabiner-Elementsの`Preferences>Simple modifications`から、`Add item`で設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182110/644e2f6c-ed63-9f8a-5b35-385207c4ce14.png)


# commandで英語・日本語入力を切り替える
UK/USキーボードに乗り換える際の懸念点として、英数・かな入力キーのキーがないことが挙げられます。
その代わりとして、左下の地球儀キーでToggleで言語の切り替えができるようになっているのですが、正直遠くて押しにくいです。また個人的にはToggleよりそれぞれキーが分かれている方が、今どちらの言語なのか考えずに使えるので好きです。

なので、左右の`command`キーをそれぞれ英数・かな入力キーとして割り当てます。こうするとJISの配置にも近くずっと扱いやすくなります。

これはWeb上で提供されているカスタムルールを利用します。
Karabiner-Elementsの`Preferences>Complex modifications>Add rule>Import more rules from the Internet`をクリックし、ブラウザで`International(Language Specific)>For Japanese`をImportします。

この中に「コマンドキーを単体で押したときに、英数・かなキーを送信する。（左コマンドキーは英数、右コマンドキーはかな）」というルールが含まれているので、再度`Preferences>Complex modifications>Add rule`と進んでこれをEnableすれば設定完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182110/b800ec9b-dc6f-e949-f186-3cf73ecca5ce.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182110/986a0ae4-4543-cc2c-ed52-68ce54b6e792.png)


ちなみに使っていると気づきますが、UK/US配列では親指はそれぞれ左右の`command`上にいるのが基本で、そのまま`command`関連の大抵の操作が可能です。慣れると非常に楽で、これが元々の設計思想における使い方なのだと勝手に理解しました。

# escapeのショートカットを設定する
これもJIS配列と共通の話ですが、`esc`キーはそのままだと押しにくいため、`control-[`をショートカットとして設定すると便利です。

これは先ほどImportしたルールの中の「Ctrl+[を押したときに、escキーと英数キーを送信する」をEnableすれば使用できます。


# shift-3を£から#に変換する
こちらはUK配列特有ですが、`#`の入力は`option-3`になっています。これが非常に使いづらいです。
一方`shift-3`の組み合わせが日本ではあまり使うことのない`£`（Pound）に設定されています。
よって、`shift-3`を`option-3`のショートカットとして設定します。

先ほどはWebからルールを引っ張ってきましたが、ユーザー自身でルールを定義することも可能です。`~/.config/karabiner/assets/complex_modifications`ディレクトリに以下の内容のJSONファイルを配置します。

定義の詳細についてはこちらの記事が参考になります：https://qiita.com/s-show/items/a1fd228b04801477729c

```:custom_rules.json
{
  "title": "Custom Rules",
  "rules": [
    {
      "description": "Change £ to #",
      "manipulators": [
        { "type": "basic",
          "from": {
            "key_code": "3",
            "modifiers": { "mandatory": [ "shift" ] }
          },
          "to": [
            {
              "key_code": "3",
              "modifiers": [ "option" ]
            }
          ]
        }
      ]
    }
  ]
}
```



その後`Preferences>Complex modifications>Add rule`で定義したルールをEnableします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182110/c0d9355e-d907-03d1-7c68-44e450e2181f.png)


# ctrl-commandで英語・日本語入力を切り替える
先にcommandを使って英語・日本語入力を切り替える設定について記載しましたが、実際使っていくと他のキーを押す際にcommandを押したままとなり、意図しないショートカットが効いてしまうミスが頻発することがわかってきました。
したがって、英語・日本語入力を切り替える操作をctrl-commandに変更するのも一案です。
これはWebからImportした「コマンドキーを単体で押したときに、英数・かなキーを送信する。（左コマンドキーは英数、右コマンドキーはかな）」のルールを修正することで設定できます。
Importしたルールは`~/.config/karabiner/assets/complex_modifications`配下のファイル内で定義されていますので、コピペして修正します。
変更内容は以下です。
```:custom_rules.json
    {
      "description": "Ctrlとコマンドキーを押したときに、英数・かなキーを送信する。（左コマンドキーは英数、右コマンドキーはかな） (rev 3)",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "left_command",
            "modifiers": {
              "mandatory": [
                "left_control"
              ]
            }
          },
          "parameters": {
            "basic.to_if_held_down_threshold_milliseconds": 100
          },
          "to": [
            {
              "key_code": "left_command",
              "lazy": true
            }
          ],
          "to_if_held_down": [
            {
              "key_code": "left_command"
            }
          ],
          "to_if_alone": [
            {
              "key_code": "japanese_eisuu"
            }
          ]
        },
        {
          "type": "basic",
          "from": {
            "key_code": "right_command",
            "modifiers": {
              "mandatory": [
                "left_control"
              ]
            }
          },
          "parameters": {
            "basic.to_if_held_down_threshold_milliseconds": 100
          },
          "to": [
            {
              "key_code": "right_command",
              "lazy": true
            }
          ],
          "to_if_held_down": [
            {
              "key_code": "right_command"
            }
          ],
          "to_if_alone": [
            {
              "key_code": "japanese_kana"
            }
          ]
        }
      ]
    }
```