Karabiner-Elementsだけで"全角/半角"でのIME切り替えを実現する方法など


# 概要

Windowsでは"全角/半角"キーでIMEのON・OFFの切り替えができますが、Karabiner-Elementsを使ってMacでも同じ動作を簡単に実現できます。本記事では、その方法を紹介します。
また、IME関連ということで、左右のコマンドキーを「かな/英数」に割り当てたり、JISキーボードの「変換/無変換」を「かな/英数」に割り当てる方法もあわせて紹介します。

# 従来の設定方法

1. Karabiner-Elementsで`全角/半角`キーをF13とかに変換する
2. Macの「環境設定 -> キーボード -> ショートカット -> 入力ソース」で、「前の入力ソースを選択」のショートカットキーを1.で変換したキーに設定する

一見して分かりますが、Karabiner-Elementsでの設定に加えて、Macの環境設定も変更する必要がありますので、面倒な作業となります。

# Ver.11.1.9以降のKarabiner-Elementsを使う新しい設定方法

Ver.11.1.8で、IMEのON・OFFに応じた処理の切り替えを実現する`input_source_if`という設定項目が追加されています。また、Ver.11.1.9で、IMEの切り替えを指定する`select_input_source`、`input_source_id`という設定項目も追加されています。
これを使うと、IMEがOFF(ON)のときに"全角/半角"キーを押したらIMEをON(OFF)にする、という動作がKarabiner-Elementsだけで実現できます。

# 実際のコード

これらの設定項目を利用して"全角/半角"キーをIME切り替えキーにするコードは以下のとおりです。


```json
{
  "description": "JISキーボードの全角/半角キーをIMEのON/OFF切り替えキーに変換。",
  "manipulators": [
    {
      "type": "basic",
      "from": { "key_code": "grave_accent_and_tilde" },
      "to": [
        {
          "select_input_source": {
            "input_source_id": "^com\\.apple\\.inputmethod\\.Kotoeri\\.Japanese$"
          }
        }
      ],
      "conditions": [
        {
          "type": "input_source_if",
          "input_sources": [
            { "language": "en" }
          ]
        }
      ]
    },
    {
      "type": "basic",
      "from": { "key_code": "grave_accent_and_tilde" },
      "to": [
        {
          "select_input_source": {
            "input_source_id": "^com\\.apple\\.inputmethod\\.Kotoeri\\.Roman$"
          }
        }
      ],
      "conditions": [
        {
          "type": "input_source_if",
          "input_sources": [
            { "language": "ja" }
          ]
        }
      ]
    }
  ]
}
```

これらの設定を使うことで、従来のようなKarabiner-ElementsとMacの環境設定の２本立ての設定を行うことなく、"全角/半角"キーをIME切り替えのキーとして使うことが可能となります。

# IMEのON・OFFの判定や切り替えに使う値の確認について

上記のコードで使用している`"ja"`, `"en"`, `"^com\\.apple\\.inputmethod\\.Kotoeri\\.Roman$"`の値については、「Karabiner-EventViewew -> Variables」の画面で確認できます。実際に指定する際は、正規表現で指定するのが正しいようです。あと、私はGoogleIMEなどのサードパーティー製のIMEはインストールしておらず、Mac標準のIMEを利用しています。その状態で撮影した以下のスクリーンショットで`"input_source_id"`に`Kotoeri`の文字がありますので、GoogleIMEとかを使っている場合は値が違うかもしれません。そこは各自で確認して頂ければと思います。

![IME_ON.png](https://qiita-image-store.s3.amazonaws.com/0/136890/af532e0a-b75f-96f5-c308-64d23742e966.png "IME_ON.png")

![IME_OFF.png](https://qiita-image-store.s3.amazonaws.com/0/136890/30e55f4d-9e4c-7586-9551-b3f4de7bcb04.png "IME_OFF.png")

# 蛇足

IME関連のキー設定として、以下の２つの設定を"Complex Modifications"で行うためのキーも掲載します。（"Simple Modifications"で設定するのであれば、GUIで設定可能な内容です）

1. JISキーボードの"ひらがなキー"と"変換キー"を"かなキー"に、"無変換キー"を"英数キー"に変換する。
2. 左右のコマンドキー（JISキーボードのWindowsキー）を"かなキー"と"英数キー"に変換する。

```json
{
  "description": "'左コマンドキー'は'英数キー'に、'右コマンドキー'は'かなキー'に変換。",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "left_command",
        "modifiers": {
          "optional": [ "any" ]
        }
      },
      "to": [
        { "key_code": "left_command" }
      ],
      "to_if_alone": [
        { "key_code": "japanese_eisuu" }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "right_command",
        "modifiers": {
          "optional": [ "any" ]
        }
      },
      "to": [
        { "key_code": "right_command" }
      ],
      "to_if_alone": [
        { "key_code": "japanese_kana" }
      ]
    }
  ]
}
```

```json
{
  "description": "JISキーボードの'変換キー'と'ひらがなキー'を'かなキー'に、'無変換キー'を'英数キー'に変換。",
  "manipulators": [
    {
      "type": "basic",
      "from": {
        "key_code": "international2",
        "modifiers": {
          "optional": [ "any" ]
        }
      },
      "to": [
        { "key_code": "international2" }
      ],
      "to_if_alone": [
        { "key_code": "japanese_kana" }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "international4",
        "modifiers": {
          "optional": [ "any" ]
        }
      },
      "to": [
        { "key_code": "international4" }
      ],
      "to_if_alone": [
        { "key_code": "japanese_kana" }
      ]
    },
    {
      "type": "basic",
      "from": {
        "key_code": "international5",
        "modifiers": {
          "optional": [ "any" ]
        }
      },
      "to": [
        { "key_code": "international5" }
      ],
      "to_if_alone": [
        { "key_code": "japanese_eisuu" }
      ]
    }
  ]
}
```