世界を動かす技術を、日本語で。

macOSにおけるネイティブインスタントスペーススイッチング

概要

  • MacOS のスペース切り替えアニメーションが不便という問題提起
  • 標準や一般的な解決策では根本的な解消にならない現状
  • InstantSpaceSwitcher という新しい解決法の紹介
  • システム保護無効化や複雑な設定が不要な利点
  • GitHub上での入手・インストール方法も説明

MacOSのスペース切り替え問題と既存の解決策

  • MacOS のウィンドウ管理で最も不満なのは、 スペース(仮想デスクトップ)切り替え時のアニメーション を即時に無効化できないこと
  • Appleはアニメーション無効化要望を長年無視し続けている現状
  • 頻繁にスペースを切り替えるユーザーにとって、短いとはいえ アニメーションがストレス要因
  • ネット上でよく推奨される「 Reduce motion」設定は、単にフェードインアニメーションに置き換わるだけで根本的解決にはならない
    • prefers-reduced-motion メディアクエリがブラウザにも影響
  • yabai タイル型ウィンドウマネージャー利用による高速切り替えも存在
    • システムインテグリティ保護(SIP)を無効化する必要
    • yabai専用の操作体系習得や他ウィンドウマネージャーとの 互換性問題
  • サードパーティの仮想スペース管理アプリ(FlashSpaceやAeroSpace)も選択肢
    • MacOSネイティブでないため、単なるアニメーション無効化には過剰な印象
  • BetterTouchTool の有料ライセンスで「Move Right/Left Space (Without Animation)」機能利用も可能

InstantSpaceSwitcherの紹介

  • InstantSpaceSwitcher (作者: jurplel)は、 GitHub で公開されているメニューバーアプリ
  • 上記の欠点をすべて回避し、 SIP無効化不要・追加ウィンドウマネージャー不要・無料 という利点
  • 仕組みは トラックパッドの高速スワイプをシミュレート し、即座にスペース切り替えを実現
  • SpaceName と併用可能
  • スペース番号へのジャンプコマンドラインインターフェース も提供
  • インストール手順(README未記載)
    • $ git clone https://github.com/jurplel/InstantSpaceSwitcher
    • $ cd InstantSpaceSwitcher
    • $ ./build.sh
  • 実行後、 ネイティブアプリ として利用可能
  • コマンドラインからは以下で操作
    • $ .build/release/ISSCli --help
    • 例: .build/release/ISSCli [left|right|index <n>]
  • GitHubスター数が1(筆者自身) という現状
    • 利用者拡大と信頼性向上のため、便利だと感じたら スター付与 の呼びかけ

まとめと補足情報

  • InstantSpaceSwitcher は、MacOSスペース切り替えアニメーション問題の 最適解
  • シンプルな導入・運用と安全性
  • 他のウィンドウマネージャーや有料ツールに頼る必要なし
  • instantspaces (yabaiの切り替え機能を独立させたプロジェクト)も存在するが、筆者環境(MacOS Tahoe)では動作せず
    • InstantSpaceSwitcherの方が推奨
  • 興味がある場合は GitHubでスター を付けて支援

Hackerたちの意見

HyperlandやNiriみたいなLinuxの選択肢にやられちゃったから、OmniWMに手を出してみたよ。 - https://github.com/BarutSRB/OmniWM

同じ状況だ!これ、めっちゃいいね!試してみるよ、ありがとう!

まだ開発初期だけど、すごくいいよ。問題も見つけたらすぐに修正されてるし。仕事でmacOSを使わなきゃいけない時もあるけど、OmniWMのおかげで耐えられるようになった。

スペースもウィンドウマネージャーも使わない俺としては、実際何を見逃してるの?cmdタブでアプリを切り替えるのがダメな理由は何?これって何か大きな気づきになるの?

いいハックだね。OS X 10.5/10.6の2Dスペースグリッドが復活する方法があればいいのに… 10.7以降の直線的なデザインは、なんかシンプルすぎる気がする。

それが一番恋しかったものだよ。macOSからKDEに移行した時に、グリッドデスクトップが戻ってきて、本当に大好きになった。9つの仮想デスクトップがあって、3x3のグリッドは9つの横並びよりもずっとナビゲートしやすい。今はAppleもダイナミックにしてるし、各デスクトップに特定の目的を割り当ててる。まるで9台のコンピュータを指先で操作してるみたい。10.6以降のmacOSのほとんどのリリースで、自分が使ってたものが削除されて、代わりのものもほとんど良くなかったから、どんどん不満が溜まっていった。自分の意見を押し付けないOSから離れて、設定可能性や選択肢を大事にするデスクトップ環境を持てて本当に嬉しい。トランジションアニメーションでは、フェードやスライドなどのいくつかのオプションを選べるし、完全にオフにすることもできる(このハックがmacOSに対してやってるように)。いくつかのトランジションの速度も設定できる。スライドを選んでるけど、通常より速くしてる。スライドすることで、グリッド内でどこに移動してるかの空間認識が少し得られるけど、まだサクサク感がある。ほんとにオプションをいくつか選ぶだけでできるんだ。KDE大好き <3

くそ、15秒前までmacOSのスペース切り替えアニメーションがウザいって知らなかったよ。ありがとう!

120Hzのモニターでなんでか遅く感じるのに気づくまで待ってみて!アニメーションが完全に終わるまで、入力デバイスが前のスペースに集中したままだよ!

yabaiの話が出てるね、Aerospaceもチェックしてみて。Linuxでi3を何年も使った後にいくつかのWMを試したけど、これが一番良かった(自分にとっては)。ほんとに使いやすいよ。 - https://github.com/nikitabobko/AeroSpace

自分はmacOSのSpacesをヘビーユーザーだったんだけど、数ヶ月前にどこかでAerospaceを勧められて、切り替えたら大好きになった。Yabaiも考えたけど、いくつかの機能がSIP(システム整合性保護)を無効にする必要があったんだ。

ここにもAerospaceのファンが!個人的には、ほとんど設定なしで素晴らしい仕事をしてくれると思う(デフォルトの設定で十分、何年も使ってるけどほとんど調整してない)。とはいえ、タイル型ウィンドウマネージャーのパワーユーザーではないから、90%の時間は一つのアプリを一つのワークスペースで使ってる。

MacOS Tahoeの5回のリリース後にこのバグに影響されて、Fedora Asahi Remixに切り替えたよ。[1] https://asahilinux.org/fedora/ [2] https://youtube.com/watch?v=JjptYWKGVc4

このアニメーションには子供の頃から慣れ親しんでたから、数年前に新しいMacBookを買うまではイライラしなかったんだ。システムのフォーカスが切り替わる前にキーボードショートカットを押しちゃうことがあって、ちょっとしたつまずきがあったんだよね。無害なものもあれば、イラッとくるものも。もしかしたら寝不足だったのかも。時間が経つにつれてそれが頻繁に起こるようになったから、ググってみたら、筋肉記憶は間違ってなかった。アニメーションの速度がほんの少し変わって、新しいMac(2021年以降のMacBook)では120Hzのディスプレイだと遅くなってるみたい。60Hzに切り替えると、アニメーションが速く戻るんだ。なんでこのアニメーションが遅くなったの?画面のリフレッシュレートに依存する理由は何?いくつか技術的な理論はあるけど、5年経っても直ってない理由が組織的に考えられない。ググるとこの件についての議論がたくさん出てくるよ。頻繁にこの機能を使ってる人には目立ってイライラすることなんだ。

これは、計算している減速アニメーションに基づいているんじゃないかな?ゲームでフレームレートが制限されていない場合に見る逆の現象みたいな。リフレッシュレートが逆の関係になる理由は、これで説明がつくかも。

こんなに長い間このバグが残ってるなんて、信じられないよ。AppleのエンジニアはmacOSを使ってないの?

ちょっと関連する話。再起動した後、Finderが以前開いていたマルチタブウィンドウを開いたとき、タブをクリックすると突然ビューやウィンドウが別のスペースに移動することがあるんだ。同じウィンドウ内の異なるタブが別のスペースに属していると思っているみたい。最近のAppleソフトウェアのバグの増加(と感じるもの)に共通しているのは、そのバグの論理が全く理解できないこと。コーナーケースのバグを見ているわけじゃなくて、むしろ「悪いモデル」のコードが見えてきて、設計の悪さが露呈している感じ。

macOSのSpacesはやめた方がいいよ。何もフルスクリーンにしないで、OSSの長方形を使ってホットキーで全部移動させて。Shortcatを使って画面上のどこにでもカーソルを自動で持っていって、Enterでクリックしたりタイプしたりして。

俺もRayCast Hotkeys使って、好きなアプリを前面に持ってくるだけだし、あんまり気にしてないよ。最近は、集中するために小さいシングルスクリーンのセットアップを最適化してる。option-cmd-oでBOOM、Outlookはopt-cmd-gでBang、Ghosttyはopt-cmd-vでPOW、VSCodeはopt-cmd-sでBoff、Slackとかもね… あと、これ前のスレッドで学んだことなんだ。

いや、ショートカットを起動するたびにHTTPリクエストが一回発生するって知ったときの君の顔が見たいな、やばいよね。

わかってないな。スペースはフルスクリーン用じゃなくて、基本的にはi3 Linuxスタイルの仮想デスクトップなんだ。ここが優れたユーザー体験だよ:1. moomをインストール。キーボードでのウィンドウ配置は最高。二段階のタイル配置がすごい。例えば、caps-aでショートカットのポップアップを表示して、次に「a」で画面の縦1/3を指定。sで中の2/3、qで左上の1/3に割り当てられる。どの部分にも任意の文字を割り当てられるんだ。2. option1-6でデスクトップを切り替える。3. 例えば、alt-4は全てを一つの画面に表示するデスクトップ(俺は6k xdr持ってるからね):Safari、メール、メッセージ、Telegram、Heyメール、Reeder。alt-3は生産性デスクトップで、カレンダー、Basecamp、Notes、IA Writerがある。alt-1と2はメインの作業用、Rider IDEとかね。alt-5はリモートデスクトップやサーバー用のリモート作業。これで、どこに何があるかのメンタルモデルができて、すぐに切り替えられる。TODOやノートを見たい?alt-3。ブラウザやメッセージを見たい?alt-4。わかるでしょ。Moomは6k 32” xdrみたいな画面にはタイルマネージャーよりも優れてるよ。タイルマネージャーも全然問題ないけど、例えばWindowsではKomorebiを使ってる。

俺は主にこれをやってる。macOSのフルスクリーンは、切り替え以外にも色々な理由で面倒だから。でも、時々画面共有やVMが別のスペースにないと混乱することがあるし、映画は本当にフルスクリーンにすべきだよね。

スペースは常に使ってるけど、アニメーションについて考えたことはなかったな。正直言って、気づいたこともなかった。だから、ここでみんながどれだけイライラしてるかのコメントを読むのはすごく興味深い。これは擁護じゃなくて純粋な興味なんだけど、OSの中で他の人が気にしない部分でイライラしてることもあると思う。

どうやら「ナチュラルスクロール」オプションは、スペース切り替えのスワイプジェスチャーも逆にするらしい、笑