macOSには、⌥⌘H(Option + Command + H)という、アクティブなアプリだけを残して他をすべて隠すショートカットがあります。
しかし、一部のアプリでは何も起きないことがあります。
たまたまWezTermというターミナルアプリでできなかったので、その理由を調べてみました。
1. ⌥⌘H は何をしているのか
このショートカットは、メニューバーのアプリ名メニューにある「ほかを非表示(Hide Others)」という項目と対応しています1。
SafariやFinderのメニューを開いてみると、⌥⌘H というキー表示を確認できます。


1.1. AppKitのキーバインド
ただし、⌥⌘H は、macOS が全アプリに強制的に適用するグローバルショートカットではありません。
AppKit という macOS 標準の UI フレームワークが持つ標準アクション hideOtherApplications: に対応するデフォルトのキーバインドです。
OSレイヤーではなく、フレームワークレイヤーの機能なので、AppKit を使っていないアプリでは動作しません。
AppKit は旧称 Cocoa とも呼ばれ、macOS ネイティブアプリを作るための標準的な仕組みです2。
AppKit に準拠したアプリは、アプリ名メニューに「ほかを非表示」が自動的に挿入されます。
その項目が存在するから、⌥⌘H も機能する3。
Safari、メモ、Finder のような純正アプリはもちろん、多くのサードパーティアプリも AppKit を使っています。
普段使うアプリのほとんどが AppKit 準拠のため、「全アプリで動く」という印象が生まれます。
2. なぜアプリによって動かないのか
一方、クロスプラットフォームを前提に作られたアプリは、AppKit の標準メニュー構造をそのまま使わないことがあります。
たとえば、WezTerm はその典型で、アプリ名メニューに「ほかを非表示」の項目がありません4。
項目自体が存在しないため、⌥⌘H を押しても何も起きない。
もちろん、クロスプラットフォーム設計であっても、AppKit の標準アクションを意図的に組み込んでいれば動作します5。
単純に「クロスプラットフォームだから効かない」という二分ではなく、hideOtherApplications: を実装しているかどうかが分かれ目です。
つまり、そのアプリのメニューに「ほかを非表示」または「Hide Others」があるか確認してください。
表示されていれば ⌥⌘H は機能します6。
- この操作の実体は NSApplication の
hideOtherApplications:メソッドです。送信元のアプリ以外をすべて隠す挙動が定義されています。 – hideOtherApplications() | Apple Developer Documentation - AppKit は、アプリのメインイベントループやウィンドウ、メニューなど UI 全体を管理するフレームワークです。NSApplication クラスが中心的な役割を担います。 – NSApplication | Apple Developer Documentation
- macOS のシステム設定からアプリ別にショートカットを割り当てることもできますが、対象のメニュー項目がアプリに存在しない場合は設定しても機能しません。 – Create keyboard shortcuts for apps on Mac – Apple Support
- WezTerm は Rust で実装された GPU アクセラレーション対応のターミナルエミュレータで、macOS・Windows・Linux・BSD に対応するクロスプラットフォーム設計です。 – wezterm/wezterm – GitHub
- アプリの前面に関係なく起動するグローバルショートカットを実装するには、Carbon API や CGEventTap といった別の仕組みが必要です。AppKit の標準アクションとはレイヤーが異なります。 – How to properly realize global hotkeys on macOS? – Apple Developer Forums
- もし別のキーで同じ操作を割り当てたい場合は、システム設定のキーボードショートカット設定からアプリ別に追加できます。ただしメニュー項目が存在しないアプリには設定しても反応しません。 – Create keyboard shortcuts for apps on Mac – Apple Support