- AeroSpace は、macOSで i3 に似た操作感を提供するベータ段階のタイル型ウィンドウマネージャーで、ツリーベースの配置とキーボード中心のワークフローを志向している
- macOS標準の Spaces に依存せず、独自の 仮想ワークスペースエミュレーション を使用し、アニメーションなしの高速なワークスペース切り替えと、SIP を無効化せずに動作する構成を打ち出している
- 設定は プレーンテキストの TOML ベースで、CLI 優先設計となっており、manpage とシェル補完を含み、マルチモニターは i3 に似たパラダイムでサポートされる
- 現在は Public Beta で、日常利用は可能だが 1.0 までは breaking change が予想され、1.0 前には大規模なリファクタリング、シェル風コンビネーター、グローバルショートカット API の調査などが残っている
- プロジェクトの価値観は、上級ユーザーと開発者、キーボード中心、実用機能、公開アクセシビリティ API 中心の保守に置かれており、GUI 設定・macOS Spaces との調和・ricing は優先度が低い
AeroSpace が提供する macOS のタイル環境
- AeroSpace は macOS 向けの i3-like タイル型ウィンドウマネージャー
- デモとドキュメントは別途提供されている
主要機能と設計
- ウィンドウ配置は ツリーパラダイム に基づくタイル型ウィンドウマネージャーとして構成されている
- 使用体験は i3 から着想を得ている
- ワークスペース切り替えはアニメーションなしで高速に動作し、SIP の無効化 は不要
- macOS 標準の Spaces にはかなりの制約があるため使用せず、AeroSpace が独自の 仮想ワークスペース をエミュレートする
- 設定は dotfiles に適したプレーンテキスト方式で、デフォルト設定例は default-config.toml で確認できる
- CLI 優先設計で、manpage とシェル補完を含む
- マルチモニターは i3 に似たパラダイムでサポートされる
インストールとセキュリティ関連の条件
- 推奨されるインストール方法は Homebrew cask で、自動更新を受け取れる
brew install --cask nikitabobko/tap/aerospace
- マルチモニター環境では、モニターが正しく配置されていることを確認する必要がある
- 他のインストール方法は インストールガイド にある
- AeroSpace は notarized 状態ではない
- Homebrew のインストールスクリプトは
com.apple.quarantine 属性を自動削除するよう構成されている
- この構成により、“Apple cannot check AeroSpace for malicious software” という警告なしにアプリがそのまま動作するはず
プロジェクトの状態と 1.0 前の作業
- 現在の状態は Public Beta
- 日常利用は可能だが、1.0 に到達するまでは breaking change を想定する必要がある
- 1.0 リリースを妨げている作業として、次の項目が残っている
- パフォーマンス課題: macOS の blocking AX API を回避するための application ごとの thread 実装は完了している
- 大規模なリファクタリング: mutable double-linked core tree データ構造を immutable single-linked persistent tree に書き直す作業
- 安定性と潜在的な性能に重要
- ウィンドウがフォーカスされたワークスペースへランダムに移動してしまう安定性問題の修正に役立つ
- macOS native tabs のサポートに役立つ
- シェル風コンビネーターの実装
||, &&, ; と、複数のコマンドを一度に送る eval コマンドを導入する最小アプローチが有力
- グローバルショートカットに
CGEvent.tapCreate API を使える可能性の調査
- 左右の modifier を区別できるかもしれないし、できないかもしれない
- 1.0 以降に予定されている大きな課題として sticky windows と Dynamic TWM がある
プロジェクトの価値観と非目標
- AeroSpace は 上級ユーザーと開発者 を対象としている
- キーボード中心の利用を志向している
- 設定ファイル、CLI、動作に関する breaking change は可能な限り避けるが、ソフトウェアの停滞を防ぐため、慎重な breaking change は発生しうる
- 1.0 以降は、breaking change がある場合に Semver の major version を上げることが保証される
- 1.0 前は、breaking change がそのまま発生しうる
- GUI は本当に必要な場合を除き使用しない
- 設定用 GUI を提供する予定はない
- 視覚的フィードバックのためのステータスメニューアイコンは許容される
- 機能は 実用性 を基準とし、ウィンドウ枠・透明度・アニメーションのような外観機能は実用機能とは見なさない
- private API やコード注入のような “dark magic” は可能な限り避ける
- 現在はアクセシビリティオブジェクトの window ID を取得するために
_AXUIElementGetWindow private API を 1 つだけ使っている
- それ以外は macOS の公開 accessibility API を使用している
- SIP の無効化は求めない
- macOS アップデートに強く、保守しやすい構成を目指している
- 既存の macOS 機能とうまく調和することは非目標
- macOS Spaces の存在を前提とせず、独自のワークスペースエミュレーションを使用する
- ricing の優先度は低い
- gaps と bar 統合用 callback をいくつか最小限サポートするのみ
- 現在の maintainer は ricing に関心がなく、関連 issue の多くは優先度が低いか無視されている
- maintainer が増えれば、ricing に対する姿勢が変わる可能性はある
互換性、コミュニティ、関連プロジェクト
- macOS の互換性はビルド方法によって異なる
- AeroSpace バイナリの実行: macOS 13+
- ソースからの debug build: macOS 14+
- ソースからの release build: macOS 15+、Xcode 26+ が必要
- issue はすぐには受け付けず、まず Discussion を作成するよう求めている
- GitHub Discussions には、全体、お知らせ、リリース告知、機能アイデア、一般、潜在的バグ、質問と回答のチャンネルがある
- 関連プロジェクトとして次が挙げられている
1件のコメント
Hacker Newsの意見
これを毎日使っているが、結論としてはMacでウィンドウを管理する最良の方法ではあるものの、i3/swayには及ばない。
特に、ウィンドウを互いの相対位置にドラッグして再配置するサポートが非常に限られていて、swayのように新しい縦/横分割を作れない。そのため、望むウィンドウ配置を作るには、たいてい不自然にキーボードコマンドで回り道する必要がある。
例えばウィンドウが2つ左右にあり、片方を縦に分割したい場合、swayでは新しいウィンドウを開いて既存ウィンドウの上/下半分にドラッグ&ドロップすれば終わり。AeroSpaceでは、新しいウィンドウを開き、3つのウィンドウをすべて縦スタックに変えたうえで、もともと左にあったウィンドウにフォーカスして
move leftを実行する、という方法が一番ましだった。**正規化(normalization)**をオンにしておけば、「縦スタックへ切り替え」る必要はない。
この配置で:
h_tiles
├── window1 (focused)
├── window2
└── window3
move leftを実行するとこうなる:h_tiles
├── window1 (focused)
└── v_tiles
├── window2
└── window3
swayでウィンドウをドラッグ&ドロップできることも知らなかった。自分は分割したいウィンドウを選んでから
Command + vで縦分割を設定し、新しいウィンドウ、たいていはターミナルを作る。あるいは
Command + Shift + [hjkl]でウィンドウを移動する。まず自分の主な問題が解決するか見たくて試してみるつもり。Macで画面配置の記憶をそれらしくやってくれる方法を探している。
起動後にスリープから復帰するたび、3画面を使うデスクトップが完全に記憶喪失状態になる。
理想的には、自分でワークスペースを運用し、ノートPCの画面だけを使う場合や、職場/自宅の別々の机で外部モニターを2〜3台使う場合に対応できるとよい。
Spectacleを使っているが、もうサポートされていない。
これは使ったことがないが、yabaiを使っていて、説明したものとまったく同じように動作する。
SIPを無効にしなくてもいい点がとても興味深い。似たようなウィンドウマネージャは事実上すべてSIPの無効化が必要で、ためらっていた。AeroSpaceは何を違ったやり方にして、SIPと併用できるようにしているのか気になる。
READMEで見つけた内容:
AeroSpaceはSIP(System Integrity Protection)をオフにするよう要求しない。例えばyabaiは一部機能を使うにはSIPをオフにする必要がある。AeroSpaceは別の方法を見つけるか、例えばワークスペースをエミュレートするか、あるいはその機能をそもそも実装しない。ウィンドウの透明度とウィンドウの影は実用的な機能ではない。
ただ、yabaiのフォーカスがマウスに追従する機能は本当に良かったので、AeroSpaceにi3のような機能を任せつつ、yabaiをその機能だけに使うことが可能なのか気になっている。
素晴らしい。これまでAmethystを使ってきたが、AeroSpaceのほうがすぐに気に入った。
Amethystで一番不満なのは、ウィンドウを非常にもたついて不安定に投げることだ。AeroSpaceではウィンドウが別のワークスペース/モニターへ一瞬で移動し、失敗しない。
macOS内蔵のワークスペースを完全に捨てて独自の仮想ワークスペースを使う点も良い。作者が言うように内蔵方式はかなり不満があり、この方式のおかげでマルチモニター環境を耐えられるもの、少し楽しいものとして扱えるようになる。
仕事用のコンピュータではSIPの無効化が必要なためyabaiを使えなかったが、AeroSpaceの作者はこれに明示的に反対していて、その判断は妥当に見える。
Linuxを使っていた頃はi3からxmonadへ移ったが、macOSではAeroSpaceのほうが明らかに良く感じる。macOSの3つのウィンドウマネージャはいずれもLinuxの本物のウィンドウマネージャには及ばないが、AeroSpaceは可能な範囲では最善に近いように見える。
偽Spacesというアプローチが気に入った。
ウィンドウを最小化して似たようなことをしてみようかと思ったことはあるが、実際にはやらなかった。
macOSではAPI不足のため、タイリングはどうしても憂鬱なものになる。それでもこの方式がおそらく最もパフォーマンスの良いアプローチだと思う。
yabaiは使ってみたが、ウィンドウ移動とフォーカスがマウスに追従する機能にだけ使い、タイリングには使わなかった。不安定だったからで、yabaiのせいではない。
nikitabobkoに感謝。
あとは、すべての偽ワークスペースのウィンドウを隅に集めた状態で、alt-tabがそれらを無視するように修正する方法さえ見つかれば、すぐに使ってみるつもり。
ドキュメントでリンクされているJankyBordersも良い。
https://github.com/koekeishiya/yabai
https://github.com/lwouis/alt-tab-macos
https://github.com/FelixKratz/JankyBorders
alt+h/alt+jでウィンドウ間を行き来して解決している。Command+Tabはグローバルなウィンドウ切り替えで、上記のショートカットはワークスペースの文脈内でのローカル切り替え用だ。Raycastのウィンドウ管理ツールにある程度慣れていたが、AeroSpaceとは実質的に併用しにくい。
例えばRaycastでは
reasonable sizeオプションでウィンドウを適度なサイズで表示し、中央に配置できる。左半分/右半分の分割を作ったり、最大化したり、4分割/3分割も可能だ。しかしAeroSpaceでは、タイル内のウィンドウを左半分、右半分、左2/3へ移動したり、
reasonable sizeでフローティングさせようとしても動作しない。また、「next desktop」と「previous desktop」でアプリを移動するときにバグがある。AeroSpaceはMacの複数のデスクトップを独自のワークスペースとして実装しているようで、動画ガイドで実際に示しているのは異なるデスクトップ間の切り替えではなく、異なるワークスペース間の切り替え。
その結果、「next desktop」と「previous desktop」を使うとタイリングが完全に崩れる。ワークスペースがMacの各デスクトップに直接結び付いていて、ワークスペースの移動がそのままデスクトップの移動になっていれば、RaycastやmacOS標準機能ともある程度互換性があったはずなので残念。
Raycastは本当に良い。
今後、Macのパワーユーザーにとって標準アプリのような存在になりそう。
便利な機能が多すぎるので、ちゃんと掘り下げてみる必要がありそう。自分はLinear.app連携を一番よく使っている。
過去5つのmacOSバージョンにわたって、仕事用のコンピュータでSIPを切らずにyabaiをかなり使ってきた。
本当に気に入っていて、タイリングが不安定になるのは数日に一度くらい。yabaiコマンドは少なくとも1分に1回は実行している方だが、それでもこの程度なので、
yabai --restart-serviceをショートカットキーに割り当ててあり、実行するといつもすぐ復帰する。だから、かなり安定していて優秀だと感じている。マルチモニターは難しく、あまり使ってはいないが、スタックと素早い「フルスクリーン」風の最小化が本当に良い。
一部のバージョンアップ時には会社のアンチウイルスがウイルスと判断して24時間無効化することがあり、その日はコンピュータを使うのが嫌になるほど鈍く、憂うつに感じる。
数カ月使ってみている。i3はほぼ完璧で、AeroSpaceは良い試みだが、i3とはかなり距離があり、かなり不安定。
おそらくMac OS XがUnixのウィンドウマネージャのような完全な制御を許していないからだと思う。
それでも、これより良いものはまだ見つけられていない。Apple SiliconでLinuxがうまく動くようになったらインストールするつもり。少なくとも自分にとっては、i3だけでもLinuxを使う理由として十分で、Mac OS Xはウィンドウマネージャの面では本当にひどい。
趣味プロジェクトでこの近い領域を少し触ってみたことがあるが、公式APIが限定的なため。
結局、文書化されていない非公開APIとハックに大きく依存することになる。こうしたものは内部向けなので不安定で、OS自体もウィンドウ/プロセス管理に大きく介入する状況にうまく協調するよう設計されていない。そのため、OSとサードパーティアプリが頻繁に互いの足を踏み合うことになる。
同じ問題がある。まだOS X標準のフルスクリーンモードをきちんと扱えるウィンドウマネージャを見つけられていない。
AeroSpaceは標準フルスクリーンを使うと混乱する。どこにフォーカスを置くべきか分からなくなる。
自分の場合:
Workspace 1: terminal
Workspace 2: slack app
Open chrome in native full screen
ここでworkspace 1に切り替えてみると問題が起きる。
当面は標準フルスクリーンアプリなしでさらに使ってみるつもり。そうすればもっと動作が良くなることを期待している。
これとYabaiのユーザー体験の違いが気になる。YabaiのSIP問題は大きな問題だとは思わない。自分の知るYabaiユーザーでSIPを切っている人はいないし、みんな問題なく使っているようだ。
違いがi3スタイルなのか気になる。
個人的にはFluxboxのように、修飾キーの組み合わせを押した状態で、ウィンドウ内のどの位置からでもマウスでリサイズや移動ができるユーティリティを使っている。自動化はされていないが、不安定でもない。完全に管理された方式に移行するというより、マウス移動を減らしてフローティングをずっと楽にする方向に近い。
両方かなり使ってみたが、自分はAeroSpaceの方が好き。
自分にとって決定的なのはマルチモニター対応で、それ以外にも小さな利点がある。
Yabaiでワークスペースを新しいモニターへ移動するとIDが変わるため、キーボードショートカットで継続してアクセスできない。
alt+2が壊れるのは、もはやworkspace 2ではなく、11や別の番号になってしまうから。AeroSpaceではalt+mとalt+shift+mでワークスペースをモニター間で簡単に移動できる。もう一つの機能は、Mission Controlのアニメーションなしにウィンドウが即座に収まる点。これは本当に大きく気になる部分だった。
自分がほぼ毎日必要とする機能はこの2つで、ワークスペース対応が足りないため、Yabaiは自分にはほとんど使い物にならないものに近い。
YabaiでSpacesを何らかの形で扱ったり、ウィンドウの重なり順を変えたり、その他多くの機能を使ったりするにはSIPを切る必要がある [0]。
そうした機能を使わないなら各自の選択だが、多くのユーザーにとっては中核的な機能。
[0] https://github.com/koekeishiya/yabai/wiki/Disabling-System-I...
Amethystと何が違うのか気になる。Amethystは最近ずっと安定してきており、楽しく使っている。
テキストベース設定は第一印象としてかなり良さそうだが、乗り換えるほどかはよく分からない。
これまでAmethystを使ってきたが、AeroSpaceの方がすぐに気に入った。
Amethystで一番不満なのは、ウィンドウを非常にもっさりと不安定に投げること。AeroSpaceではウィンドウが別のワークスペース/モニターへ一瞬で移動し、失敗しない。
macOS内蔵のワークスペースを完全に捨てて、独自の仮想ワークスペースを使う点も良い。おかげでマルチモニター設定を、なんとか耐えられ、少し楽しく扱えるようになった。
Linux時代にはi3からxmonadへ移ったが、macOSではAeroSpaceの方が明らかに良いと感じる。macOSの3つのウィンドウマネージャはいずれもLinuxの本物のウィンドウマネージャには及ばないが、AeroSpaceは可能な範囲では最善に近いように見える。
自分の経験では、AeroSpaceはほとんどの面ではるかに良い。
いくつか変な点があり、バグレポートをいくつか出す必要はあるが、AmethystよりmacOSをずっと耐えられるものにしてくれた。
Amethystでもテキストベース設定はできる。
https://github.com/ianyh/Amethyst/blob/development/docs/conf...
ここ数か月これを使っていて、概ね気に入っています。すべて単一ファイルで設定できる点、つまり GUI がない点が良いです
ひとつ問題なのは、アプリが Mac 標準のタブを使うと、AeroSpace が各タブをウィンドウとして扱ってしまい、フルスクリーン機能が完全に壊れることです。Alacritty が一例で、かなり奇妙です
関連する Issue が開かれています:
https://github.com/nikitabobko/AeroSpace/issues/68