MacのUSキーボードで日本語環境を快適に！ MacもWinも同じ⌘キーで！

## Karabiner-elementsを利用したキー割り当て設定：MacOS/Windows10onVirtualBox
![uskeyboard.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2212777/76b26d3b-92f8-03f7-1733-52b4486170fd.jpeg)
MacユーザでUSキーボードを使いたい人は多い、またVirtualBoxでWindows環境を併用している人も多い、私もその一人である。　しばらくはMacキーバインドとWindowsキーバインドでそれぞれ使っていたが、やはり同じキー操作で使うのが快適であると思い立ち、Karabiner-elementsを利用することで「macもwinも同じキー操作に」する方法を紹介する。

:::note info
確認した環境情報：Apple純正USキーボード(Magic Keyboard US)で...
MacOS BigSur/Monterey/Ventura、
Karabiner-elements 14.3.0（14.12.0でも動作確認済：2023/4月）、
Windows10 on VirtualBox 6.1.28/6.1.32（7.0.6でも動作確認済：2023/4月）
:::

実現したことは下記：
(1)MacOSでの日本語切替は、左⌘キーを押すと「英字」に、右⌘キーを押すと「ひらがな」になる
　　（↑これまで通り、⌘+c, ⌘+v, ⌘+x, ⌘+z, ⌘+a, ⌘+s ...などは問題なく機能する） 
(2)Windows10 onVirtualBoxでは、左⌘キーを押すと「英数」に、右⌘キーを押すと「かな」になる
　　（↑Macと同じ様に、⌘+c, ⌘+v, ⌘+x, ⌘+z, ⌘+a, ⌘+s ...なども機能する） 
(3)おまけ：Windows10 onVirtualBoxで、⌘と←, →, ↑, ↓ の押下で それぞれ 行top, 行end, 文書top, 文書end

:::note warn
おまけのカーソル移動：注意点
・MacOSのMS-Officeは一般的なMacキー所作とは異なる部分あり（⌘やctrlの組合せに関して）
・MacOSではctrl+aやctrl+eでも行端移動できるが今回方法のWindows上では未対応
:::

------
#### （１）MacOSでUSキーボードの左右の⌘で日本語のON/OFFする手順
:::note warn
Karabiner-elementsのバージョンで下記と画面が異なりますご了承ください
:::
まず、[Karabiner-elements](https://karabiner-elements.pqrs.org) をインストールする。
インストールしたら、[Preferences]メニューから表示されるポップアップ画面の[Complex modifications]タブを選んで、左下のボタン[Add rule]を押す。
![karabiner-preferences](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2212777/6f803dfb-5f3b-5f16-3978-3b3e47f234ca.jpeg)
すると、ポップアップに[Import more rules from the Internet]というボタンが現れるのでコレを押してブラウザを開く。
![import-rules](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2212777/c44f8481-4130-1ef9-411c-417a3a64b5f3.jpeg)
ブラウザ表示されたページの上部リンクから[International(Language Specific)]をクリックすると、ページ下方にジャンプするので[For Japanese（日本語環境向けの設定）]　を"Import"する。
![page-link](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2212777/3110ce7b-de3b-0b86-b526-45fc5480837f.jpeg)
Karabiner-elementsにImportされたので、[Preferences]メニューの一覧から「コマンドキーを単体で押したときに、英数・かなキーを送信する」を"Enable"にする。
これで、左⌘キーを押すと英字モード、右⌘キーを押すとひらがなモードの切り替えが実現する。
![enable-set](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2212777/2e3cd18b-12a2-93d8-86ac-808096962281.jpeg)
![added-rule](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2212777/42d28e88-2ed7-885a-7475-38f487a5cc7a.jpeg)

#### （２）Windows10(VirtualBox)で、MacOSと同じに左右の⌘で日本語のON/OFFする手順
Karabiner-elementsの既存rulesに望みのものが見つからなかったので、新たにruleを作成（JSON記述）
下記のコードでJSONファイルを作成します。
（※下記コードには、（３）のおまけ：カーソル移動キーruleも含んでいます）

```json:JapaneseSettingForMacUSkeyOnVirtualBox.json
{
    "title": "Japanese-Setting for US-keyboard on VirtualBox",
    "rules": [
    {
        "description": "Japanese On/Off : Make ⌘key for Japanese on(right⌘)/off(left⌘) as 'CTRL+7'/'CTRL+.' under VirtualBox",
        "manipulators": [
        {
            "type": "basic",
            "from": { "key_code": "left_command", "modifiers": { "optional": [ "any" ] } },
            "parameters": { "basic.to_if_held_down_threshold_milliseconds": 100 },
            "to": [ { "key_code": "left_control", "lazy": true } ],
            "to_if_held_down": [ { "key_code": "left_control" } ],
            "to_if_alone": [ { "key_code": "7" , "modifiers" : [ "left_control" ] } ],
            "conditions": [ { "type": "frontmost_application_if",
                "bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
        },
        {
            "type": "basic",
            "from": { "key_code": "right_command", "modifiers": { "optional": [ "any" ] } },
            "parameters": { "basic.to_if_held_down_threshold_milliseconds": 100 },
            "to": [ { "key_code": "left_control", "lazy": true } ],
            "to_if_held_down": [ { "key_code": "left_control" } ],
            "to_if_alone": [ { "key_code": "period" , "modifiers" : [ "left_control" ] } ],
            "conditions": [ { "type": "frontmost_application_if",
                "bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
        }
      ]
    },
    {
        "description": "Cursor-Move with CTRL+←,→,↑,↓ (i.e. CTRL=⌘) as lineTop,lineEnd,docTop,docEnd under VirtualBox",
        "manipulators": [
        {
            "type": "basic",
            "from": { "key_code": "left_arrow", "modifiers": { "mandatory":["left_control"] } },
            "to": [ { "key_code": "left_arrow", "modifiers": [ "fn" ] } ],
            "conditions": [ { "type": "frontmost_application_if",
                "bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
        },
        {
            "type": "basic",
            "from": { "key_code": "right_arrow", "modifiers": { "mandatory":["left_control"] } },
            "to": [ { "key_code": "right_arrow", "modifiers": [ "fn" ] } ],
            "conditions": [ { "type": "frontmost_application_if",
                "bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
        },
        {
            "type": "basic",
            "from": { "key_code": "up_arrow", "modifiers": { "mandatory":["left_control"] } },
            "to": [ { "key_code": "home", "modifiers": [ "left_control" ] } ],
            "conditions": [ { "type": "frontmost_application_if",
                "bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
        },
        {
            "type": "basic",
            "from": { "key_code": "down_arrow", "modifiers": { "mandatory":["left_control"] } },
            "to": [ { "key_code": "end", "modifiers": [ "left_control" ] } ],
            "conditions": [ { "type": "frontmost_application_if",
                "bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
        }
      ]
    }
  ]
}
```

:::note info
このruleの概要：VirtualBox環境の時のみに適用されるルール
・単独で左⌘キーを押した場合にctrl+7 に置換え、右⌘キーを押した場合にctrl+. に置換える
　（↑後でWindows側のIME設定変更あり：ctrl+7 , ctrl+. を それぞれ 英数, かな に変更）
・⌘を装飾キー（組合せ）で使う場合は、ctrlとして機能する
・カーソル移動に⌘を使えるようにする：⌘+←,→,↑,↓ は 行頭, 行末, 文書頭, 文書末へ移動する
　（↑⌘はctrlに置き換わっているので、実際はctrl+←,→,↑,↓ の置換え処理）
:::

作成したJSONファイルを、Karabiner-elementsのrule保存場所（下記）に保存します。

```path:rule格納場所
~/.config/karabiner/assets/complex_modifications
```

Karabiner-elementsの[Preferences]メニューから表示されるポップアップ画面の[Complex modifications]タブを選んで、左下のボタン[Add rule]を押す。　表示されるruleから、"Japanese-Setting for US-keyboard on VirtualBox"の [Japanese On/Off:...] を"Enable"にする。
【重要】EnableになったRulesの順番を変更します、[Japanese On/Off:...]を "↑Up"ボタン で先頭に移動します。
![commandKeyToCtrlKey.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2212777/5e56c6c4-fa4d-1fde-d0af-32e6d84988b6.jpeg)
【重要】ここで、VirtualBoxを起動してWindows10のVMにし、IMEのキー割り当てを変更します。
IMEの「あ/A アイコン」で右クリックしてプロパティを開きます、さらに詳細設定を開いて、[全般][編集操作][キー設定]の"変更"ボタンから開いたウインドウで"キー追加"ボタンを押し、ctrl+7 を押下でOKします。これで追加されたctrl+7の行の先頭項目'入力/変換済み文字なし'を"IME-オフ"に設定します（項目を右クリック）
同じように、"キー追加"ボタンを押し、ctrl+. を押下でOKします。これで追加されたctrl+.の行の先頭項目'入力/変換済み文字なし'を"IME-オン"に設定します（項目を右クリック）
※つまり、Karabiner-elementsで、左⌘はctrl+7 , 右⌘はctrl+. となっているので、これをIME-オフ, オンにする
![winKeySetting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2212777/bd2b7277-8a92-a79f-c9c0-134e9d0ce895.jpeg)
これで、Windows10(VirtualBox)で、Macと同じように左⌘キー/右⌘キーで日本語が切り替わります。

:::note warn
★追記！：困ったWindows変更：IMEプロパティ設定が勝手に無くなる！！キー変更が機能しない...
対処方法：いろんな人が文句を言いながらも対処を載せている（下記参考：記事の一例）
※一度プロパティ設定してある場合は、プロパティ表示が無くなっても復活させればキー設定も復活します
:::
【参考URL：IMEプロパティ復活】
[IMEのプロパティがない！詳細設定がない！最短で元に戻す方法【Windows 10】](https://kiryusblog.com/ime-downgrade/) 

#### （３）おまけ：Windows10(VirtualBox)で、MacOSと同じに⌘+←,→,↑,↓ でカーソル移動の手順
Karabiner-elementsの[Preferences]メニューから表示されるポップアップ画面の[Complex modifications]タブを選んで、左下のボタン[Add rule]を押す。　表示されるruleから、"Japanese-Setting for US-keyboard on VirtualBox"の [CursorMove with CTRL...] を"Enable"にする。
【重要】EnableになったRulesの順番を変更します、[CursorMove with CTRL...]を "↑Up"ボタン で先頭の次（２番目）に移動します。
![ctrlKeyToLineMove.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2212777/a804a70d-aaa3-d3ac-3a7a-fadeb9d53c34.jpeg)
これで、Windows10(VirtualBox)で、Macと同じように⌘+←,→,↑,↓ が行頭,行末,文書頭,文書末へのカーソル移動となります。

:::note warn
【windows側の日本語切り替えは、なぜ ctrl+7, ctrl+. キーなのか？ の話】
Windows(VirtualBOX)でMS-Officeを使使いますよね〜ふつう...
で、Word,PowerPoint,Excel,特にExcelではショートカットキーが大量に存在してて、そのキーを変更できなかったり変更が面倒だったりします。このために、日本語のIME-オフ、オンにしたいキーとカブったりすると困るわけです。
そこで、MS-Officeのどれにも使われてないショートカットキーを探しました、すると（たぶん...）ctrl+7, ctrl+. は大丈夫そうでした。
そういうわけで、このキー割り当てになっています。
:::
:::note warn
その後の話 ...（2023年）
Windowsアプリは、どうにもショートカットキーが散乱・混乱してて統一されておらず勝手に個々にアサインしている気配。なので被らないキーを割り当てようとしても難しい・・・
現時点では、左⌘キーは CTRL+Shift+F11 とすることで他アプリと競合しない模様.
JapaneseSettingForMacUSkeyOnVirtualBox.jsonスクリプトは、
"description": "Japanese On/Off :...のブロックの最初のルール定義部分の
```
"to_if_alone": [ { "key_code": "7" , "modifiers" : [ "left_control" ] } ],
```
を
```
"to_if_alone": [ { "key_code": "f11" , "modifiers" : [ "left_control" ,"shift" ] } ],
```
に変更してください.
:::

***
参考情報：
[快適キーボード操作のためのキーカスタマイズ ～Mac編～](https://knowledge.sakura.ad.jp/23355/)
[Karabiner Elementsの記号対応表](https://qiita.com/funatsufumiya/items/2d0395c6622468a31b4f)