macOS の Mission Control(Spaces)によるウィンドウ管理に限界を感じ、タイリングウィンドウマネージャー AeroSpace に乗り換えました。本記事では、導入の背景から設定のポイント、実際に使っているカスタマイズまでを紹介します。
なぜ Mission Control をやめたのか
macOS 標準の Mission Control(Spaces)は直感的で手軽ですが、日常的にウィンドウを大量に扱うようになると、いくつかの不満が出てきました。
- 切り替えアニメーションが遅い — Spaces の移動には毎回スライドアニメーションが入り、無効化もできない
- ウィンドウの配置が手動 — 毎回ドラッグでリサイズ・配置するのは非効率
- Space 数の上限 — モニタあたり最大 16 という制約がある
- マルチディスプレイとの相性 — Spaces を増やすほど挙動が不安定になりがち
これらを解決するために、i3 ライクなタイリングウィンドウマネージャーである AeroSpace を導入しました。
AeroSpace とは
AeroSpace は、macOS 向けのタイリングウィンドウマネージャーです。Linux の i3wm に強くインスパイアされており、以下の特徴を持ちます。
- キーボード主体のウィンドウ操作 — マウスに手を伸ばさずにウィンドウの移動・リサイズ・配置が可能
- 独自の Workspace 機能 — macOS Spaces に依存しない仮想デスクトップ管理
- TOML ベースの設定ファイル — テキストファイル 1 つでほぼすべてを管理
- 軽量で高速 — アニメーションなしで瞬時にワークスペースを切り替え
インストール
Homebrew でインストールします。
brew install --cask nikitabobko/tap/aerospace デフォルト設定ファイルをコピーして、カスタマイズの出発点にします。
cp /Applications/AeroSpace.app/Contents/Resources/default-config.toml ~/.aerospace.toml まず最初にやること:macOS Spaces を「実質オフ」にする
AeroSpace を使ううえで最も重要なポイントがこれです。
AeroSpace は macOS 純正の Spaces ではなく、独自の workspace 機能で仮想デスクトップを実現します。公式ガイドでも「macOS の Space はディスプレイごとに 1 つだけにして、それ以上は作らない」運用が推奨されています。
推奨する設定
- System Settings → Desktop & Dock → Mission Control で、Spaces 関連のショートカットやジェスチャをオフにする
- ディスプレイごとに macOS デスクトップは 1 つだけ を維持
- 仮想デスクトップの切り替えはすべて AeroSpace の workspace(
alt + 1〜alt + 9、alt + A〜alt + Z)で行う
基本操作:キーバインド早見表
AeroSpace のキーバインドは i3 に似ており、alt キーを軸に操作します。
フォーカス移動
| キー | 操作 |
|---|---|
alt + H | 左のウィンドウにフォーカス |
alt + J | 下のウィンドウにフォーカス |
alt + K | 上のウィンドウにフォーカス |
alt + L | 右のウィンドウにフォーカス |
ウィンドウ移動
| キー | 操作 |
|---|---|
alt + Shift + H | ウィンドウを左へ移動 |
alt + Shift + J | ウィンドウを下へ移動 |
alt + Shift + K | ウィンドウを上へ移動 |
alt + Shift + L | ウィンドウを右へ移動 |
ワークスペース操作
| キー | 操作 |
|---|---|
alt + 1 〜 9 | ワークスペース 1〜9 に切り替え |
alt + A 〜 Z | ワークスペース A〜Z に切り替え |
alt + Shift + 1 〜 9 | ウィンドウをワークスペース 1〜9 に送る |
alt + Tab | 直前のワークスペースに戻る |
alt + Shift + Tab | ワークスペースを次のモニターに移動 |
レイアウト・リサイズ
| キー | 操作 |
|---|---|
alt + / | タイルレイアウト切り替え(水平 ↔ 垂直) |
alt + , | アコーディオンレイアウト切り替え |
alt + - | ウィンドウを縮小(-50px) |
alt + = | ウィンドウを拡大(+50px) |
おすすめカスタマイズ
ここからは、私が実際に行っているカスタマイズを紹介します。
1. JankyBorders でアクティブウィンドウを視覚化
タイリング環境では「今どのウィンドウにフォーカスがあるか」が分かりにくくなることがあります。JankyBorders を使えば、フォーカス中のウィンドウに色付きの枠線を表示できます。
brew tap FelixKratz/formulae
brew install borders ポイントは、brew services ではなく AeroSpace の起動時コマンドから呼び出すことです。こうすると AeroSpace → JankyBorders の起動順が保証され、タイル管理と枠表示のタイミングが揃います。
after-startup-command = [
"exec-and-forget borders active_color=0xffe1e3e4 inactive_color=0xff494d64 width=5.0"
] -
active_color— フォーカス中のウィンドウの枠色(明るいグレー#e1e3e4) -
inactive_color— 非フォーカスのウィンドウの枠色(暗めのグレー#494d64) -
width— 枠の太さ
2. ギャップを入れてウィンドウ間に余白をつくる
デフォルトではウィンドウ同士がぴったり隣接しますが、少し隙間を入れるだけで視認性が大幅に向上します。
[gaps]
inner.horizontal = 10
inner.vertical = 10
outer.left = 10
outer.bottom = 10
outer.top = 10
outer.right = 10 3. フォーカス変更時にマウスを自動追従させる
キーボードでフォーカスを切り替えたとき、マウスカーソルもそのウィンドウの中央に自動で移動させます。これにより、キーボード操作の直後にマウスが必要になった場面でも、カーソルが常に正しいウィンドウにいてくれます。
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
on-focus-changed = "move-mouse window-lazy-center" 4. アプリを特定のワークスペースに自動振り分け
これが AeroSpace の真骨頂とも言える機能です。on-window-detected ルールを使えば、アプリ起動時に自動でワークスペースを割り当てられます。
# Notion → ワークスペース N
[[on-window-detected]]
if.app-id = 'notion.id'
run = 'move-node-to-workspace N'
# Cursor(エディタ)→ ワークスペース C
[[on-window-detected]]
if.app-id = 'com.todesktop.230313mzl4w4u92'
run = 'move-node-to-workspace C' アプリの頭文字でワークスペースを決めておくと、「alt + N で Notion」「alt + C で Cursor」のように瞬時にアクセスできます。
app-id は aerospace list-apps コマンドで確認できます。 5. 特定アプリをフローティングにする
システム設定や証券ツールなど、タイリングに不向きなアプリはフローティング(タイル管理の対象外)に設定できます。
# Docker Desktop → フローティング
[[on-window-detected]]
if.app-id = "com.docker.docker"
run = "layout floating"
# システム設定 → フローティング
[[on-window-detected]]
if.app-id = "com.apple.systempreferences"
run = "layout floating"
# HYPER SBI 2 → ワークスペース S + フローティング
[[on-window-detected]]
if.app-id = 'jp.co.sbisec.HYPERSBI2'
run = ['layout floating', 'move-node-to-workspace S'] ワークスペース移動とフローティングを組み合わせることで、「特定のワークスペースにまとめつつ自由に配置」という運用も可能です。
6. Service モードでメンテナンス操作をまとめる
AeroSpace には binding mode という概念があり、特定のキーで「モード」を切り替えることで、通常とは異なるキーバインドを使えます。
alt + Shift + ; で service モードに入り、以下の操作が可能です。
| キー | 操作 |
|---|---|
Esc | 設定リロード&メインモードに戻る |
R | ワークスペースのレイアウトをリセット |
F | フローティング ↔ タイリングの切り替え |
Backspace | 現在のウィンドウ以外をすべて閉じる |
[mode.service.binding]
esc = ['reload-config', 'mode main']
r = ['flatten-workspace-tree', 'mode main']
f = ['layout floating tiling', 'mode main']
backspace = ['close-all-windows-but-current', 'mode main'] 私の運用ルール
実際に使ってみて落ち着いた運用ルールをまとめます。
ワークスペースの使い分け
アプリの頭文字に合わせてワークスペースを割り当てています。
| ワークスペース | 用途 | 割り当てアプリ |
|---|---|---|
| C | コーディング | Cursor |
| N | ノート・ドキュメント | Notion |
| S | 株式トレード | HYPER SBI 2(フローティング) |
| 1〜9 | 汎用・一時作業 | 自由に使用 |
頭に入れておくと便利な操作
-
alt + Tab— 直前のワークスペースとの行き来(back-and-forth)。2 つの作業を頻繁に切り替えるときに便利 -
alt + Shift + Tab— ワークスペースごと次のモニターに移動。マルチディスプレイで重宝 -
alt + /— 水平 ↔ 垂直レイアウトの切り替え。画面の使い方をその場で変えたいときに
補助ツールとの組み合わせ
AeroSpace 単体でも強力ですが、以下のツールと組み合わせるとさらに快適になります。
| ツール | 役割 | 連携方法 |
|---|---|---|
| JankyBorders | ウィンドウ枠の表示 | after-startup-command で起動 |
| AutoRaise | マウスホバーで自動フォーカス | brew でインストール・常駐 |
| Ghostty | 高速ターミナルエミュレータ | タイリング環境と好相性 |
まとめ
Mission Control から AeroSpace に移行して感じた最大の変化は、ウィンドウ管理に「考える時間」がなくなったことです。
- アプリは起動した瞬間に決まったワークスペースに配置される
- キーボードだけでフォーカス移動・リサイズ・ワークスペース切り替えが完結する
- Spaces のアニメーションによる待ち時間がゼロになる
設定は ~/.aerospace.toml の 1 ファイルで完結するため、Git 管理して dotfiles に含めておけば環境の再現も簡単です。
macOS のウィンドウ管理に不満を感じている方は、ぜひ AeroSpace を試してみてください。