MacのWindows App(旧 Remote Desktop)で ⌘ + Spaceによる日英入力切替を両立させるまでの長い道のり: Microsoft Windows App × Karabiner‑Elements 活用ガイド

## 1．この記事の目指す所  
- **対象読者**  
  - macOS を使い、**⌘ + Space** で Spotlight ではなく「日本語⇄英語」の入力ソースを切り替えてきた “昔ながら” の Mac ユーザー  
  - Microsoft Remote Desktop が **Windows App** に置き換わり、リモート先（Windows）でも同じキーで IME を切り替えたい人  
- **ゴール**  
  1. **macOS 側**では従来どおり ⌘ + Space で入力ソースを変更  
  2. **Windows App 側**でも ⌘ + Space で Win + Space を送出しつつ、  
     スタートメニューが誤爆しないように抑制する  

> **補足：macOS で ⌘ + Space を Spotlight から奪還する方法**  
> 1.  > システム設定 > **キーボード** → *キーボードショートカット*  
> 2. **Spotlight** の「検索を表示」を OFF、  
>    **入力ソース**の「前の入力ソースを選択」に ⌘ + Space を割り当てる

---

## 2．最初の取り組み

### 2‑A．Windows 側で解決しようとした（失敗例）  
| アプローチ | ツール／方法 | 結果 |
|------------|-------------|------|
| IME キー割り当て変更 | Windows 設定 | **×** 　Win キー単独の抑制不可 |
| ショートカット無効化 | PowerToys / AutoHotkey | **×** 　Windows App ではフックが効かず |
| Win キーを封印 | レジストリ編集 | **×** 　職場 PC で管理者権限なし |

### 2‑B．Mac 側で変換して送ろうとした（失敗例）  
- **Hammerspoon** で ⌘ + Space → Ctrl + Space に書き換え → OS レベルでは不可  
- **Karabiner‑Elements** を導入し「Windows App 使用時だけ ⌘ 無視」は成功  
  - しかし ⌘ キーが殺され Mac 側へ戻る操作ができず悪循環…

---

## 3．あきらめ  
いろいろなアプリを導入し、Windows側・Mac側の両方から解決策を模索してきましたが、次第に **「豆腐を切るのに、わざわざチェーンソーを持ち出しているような状態」** に思えてきて、あきらめムードが漂っていました。

しかし一度立ち止まって冷静に考えてみたところ、これまでの失敗からいくつかの気づきが得られました。
本質的な問題は、「 ⌘ + Space による入力切替はできているものの、( ⌘ キーにより）Winキー単独も同時に反応してしまい、スタートメニューが開いてしまう」という点だったのです。

**「それなら、スタートメニューが開いても すぐに閉じてしまえばいいのでは？」** という発想にたどり着きました。
---

## 4．新しいアイデア  
1. ⌘ + Space を押下  
2. Windows では Win + Space が走る（IME 切替）  
3. **キーを離した瞬間に <kbd>Esc</kbd> を送信** → スタートメニューを閉じる  
   - 遅延送信では間に合わず → **`to_after_key_up`** で実装

---
## 5．ようやくたどり着いた最終解決案（Karabiner‑Elements JSON）

数々の回り道と失敗を経て――ついに、納得のいく動作にたどり着きました。  
もう **「豆腐をチェーンソーで切る」** ような大げささともお別れです。

最終的にたどり着いたのは、**Command + Space を押したあと、キーを離した瞬間に Escape を送る**というシンプルで洗練された方法。  
驚くほど自然に動作し、**スタートメニューが一瞬たりとも表示されないまま、日本語・英語の入力切り替えがスムーズに完了**します。

Karabiner‑Elements による設定は以下のとおりです：

```json
{
  "description": "When using Microsoft Remote Desktop, after pressing ⌘+Space, on key-up send Escape",
  "manipulators": [
    {
      "type": "basic",
      "conditions": [
        {
          "type": "frontmost_application_if",
          "bundle_identifiers": [
            "^com\\.microsoft\\.rdc\\.macos$"
          ]
        }
      ],
      "from": {
        "key_code": "spacebar",
        "modifiers": {
          "mandatory": ["left_command"],
          "optional": ["any"]
        }
      },
      "to": [
        { "key_code": "spacebar", "modifiers": ["left_command"] }
      ],
      "to_after_key_up": [
        { "key_code": "escape" }
      ]
    }
  ]
}
```

この設定によって、  
- ⌘ + Space による **入力ソース切替**はこれまで通り可能  
- **スタートメニューの誤作動もゼロ**  
- ⌘ キー自体は温存されるので Mac⇄Windows のアプリ切替もスムーズ
という、まさに「いいとこ取り」の状態が実現しました。

### 使い方  
1. **Karabiner‑Elements** ➜ *Complex Modifications* ➜ *Add Rule*  
2. 上記 JSON を `~/.config/karabiner/assets/complex_modifications/` に保存し読み込む  
3. Windows App（旧 Remote Desktop）起動中のみルールが適用される
---

## まとめ  
- **Windows App** へ移行したことで「⌘ + Space 問題」が再燃したが、  
  `to_after_key_up` で <kbd>Esc</kbd> を送るだけのシンプル構成で解決  
- システム権限やレジストリ編集不要、Mac 側だけで完結  
- 今後 Windows App の挙動が変わる可能性もあるため、  
  Karabiner‑Elements で柔軟に対応できる形にしておくと安心

---
ご意見・改善案があればコメントでお知らせください！