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

Show HN: Rift – macOS用タイルウィンドウマネージャー

概要

Rift は、 macOS 向けのタイル型ウィンドウマネージャー。 パフォーマンス使いやすさ を重視した設計。 現在も 積極的に開発中 で、安定動作が期待できる。 非公開API の活用による高い信頼性とパフォーマンス。 glide-wm をベースに独自進化したプロジェクト。

Riftの特徴

  • macOS 専用のタイル型ウィンドウマネージャー
  • パフォーマンス操作性 を最重視した設計思想
  • アニメーションディスプレイごとのフルスクリーン に対応
  • 非公開API未公開API の積極的活用
  • glide-wm をフォークした後、独自路線で大幅に改良
  • yabai など他プロジェクトのリバースエンジニアリング成果を活用
  • glide-wmyabai とは無関係な独立プロジェクト

クイックスタート

  • 公式Wiki にて 設定方法クイックスタート 手順を提供
  • 初期設定や導入方法のガイドライン
  • 迅速な導入をサポートするドキュメント整備

開発状況

  • アクティブな開発 が継続中
  • 公式リリース は未提供(今後のリリース予定あり)
  • 安定性 は高いが、仕様変更の可能性
  • IssueやPR の積極的な受け入れ体制

開発動機(Motivation)

  • Aerospace の機能性は評価しつつも、 アニメーションディスプレイごとのフルスクリーン が不足
  • 非公開API の利用による高信頼性・高パフォーマンスの追求
  • パブリックAPI よりも OS内部API の方が堅牢で高速と判断
  • 詳細な設計思想や目的は manifesto に記載

クレジット・ライセンス

  • glide-wm のフォークを起点としたプロジェクト
  • glide-wm ライセンスを継承しつつ、独自改良を多数実装
  • yabai などのリバースエンジニアリング成果物を利用
  • glide-wm および yabai とは一切の提携関係なし

Hackerたちの意見

かなりクールだけど、Macbookのトラックパッドを使うならSwishには敵わないよね。 https://highlyopinionated.co/swish/

"かなり意見が強い"って感じだね ;) Divvy^1を好む理由の一つは、カスタムキーボードショートカットが、トラックパッドで直接タイピングする時も、(もっと頻繁に)外部キーボードを使う時も使えるから。 1. https://mizage.com/divvy/

5k/6kディスプレイだと、普通のタイル配置は冗談みたいなもんだよね。ウィンドウが大きすぎるから。だから、moonみたいなアプリの方が全然いい選択肢だよ。WindowsにはMoomみたいなのがないから、komorebiみたいなタイルマネージャーを使ってる。いろんなOSやデバイスを使い分けてる人間としては、riftがalt+hjklみたいな確立されたキー割り当てを使ってないのは残念だな。5k以上のディスプレイ(またはウルトラワイド)では、こういうウィンドウのタイル配置は必須だし(komorebiにはそれがある) +-----+-----------+-----+ | | | | | | +-----+ | | | | | | +-----+ | | | | +-----+-----------+-----+ ~うーん、頑張ったけど、HNではこれがうまく表示されないみたいだね~

貼り付けたものを4スペース分インデントすると、HNはそれをコードとして扱うよ。それが役立つかも。

: https://youtu.be/u3eJcsa_MJk?si=UnHjFXBsWir4QiTz

以前はi3をヘビーユーザーだったんだ。すごく柔軟で設定も自由自在で、ウィンドウを動かす以上のことができる。でも、Macに切り替えてからは、機能が豊富で安定したタイルウィンドウマネージャーが見つからなかった。いくつか試した結果、今はRectangle[1]を使ってる。ウィンドウマネージャーじゃなくて、ウィンドウを左/右/上/下に動かしたり、画面を3/4/6セクションに分けてウィンドウを配置するためのショートカットを提供してるだけ。これで80%のニーズをカバーできて、落ちることも予期しない動作もないから、今は満足して使ってる。もう一つの理由は、年を取ってきて、たくさんのカスタム設定がある柔軟なソフトを使うのに疲れたから。 [1] https://rectangleapp.com/

似たような経験と視点だね -- でもDivvy^1を使ってるよ(Rectangleじゃなくて)。 1. https://mizage.com/divvy/

Rectangleもおすすめだよ。Linuxからの移行がかなり楽になった。

RectangleにSpectacleのキー割り当てオプションがあるのは素晴らしいね。いつか普通のやり方を覚えるかもしれないけど、今はもうそれに慣れちゃってる。

もしかしたら誤解してるかもしれないけど、一方では機能が豊富なウィンドウマネージャーが欲しいと言って、もう一方ではたくさんの設定がある柔軟なソフトウェアに疲れたと言ってるよね。それって矛盾してない?

Rectangleの「todoモード」が大好きなんだ。実際にはtodoには使ってないけど、ウィンドウを常に表示させておいて、フルウィンドウショートカットがそれに合わせて調整されるのが最高。

うん、長い間Rectangleを使ってるユーザーだよ。複数のデスクトップ(Spaces)を使って、タスクごとにウィンドウ(ブラウザ、Emacsフレーム、iTermウィンドウ)を配置してる。これで、いろんなことをやるときのコンテキストスイッチが楽になるんだ。

本当に面倒なことを経て、今の状態に満足してるんだけど、ここにいる人たちは、どうやってこんなに重複したキーボードショートカットを管理してるのかな?もしかして俺だけかもしれないけど、エルゴノミクスのために、いろんなことをhjklの組み合わせに割り当てたいんだ... Aerospaceのモーダル機能がそのショートカットの競合を解決するのにちょっと役立ってるけど... 他の人たちはこれをどう対処してるんだろう?

似たようなことをしたよ。Karabinerを使って、外部キーボードの右OptionキーをOption+Shift(A1)に、右ControlキーをControl+Option+Shift(A2)にマッピングした。Aerospaceを設定して、フォーカスを変えたい時はA1 + hjklでフォーカスを移動させて、ウィンドウを動かしたい時はA2 + hjklを使ってる。ワークスペースを切り替える時はA1 + ui、ワークスペース間でウィンドウを移動させる時はA2 + uiを使ってる。モニター間のフォーカスを移動させる時はA1 + m、それらの間を移動する時はA2 + m。これらが今一番よく使うショートカットで、もし競合するショートカットがあるアプリがあれば、それを別のものに変更してる。あまり考えてないけど、もっとエルゴノミクスを良くするためにこのパターンを拡張できると思う。今のところ、すごくうまくいってるよ。

Aerospaceを試してみたけど、デフォルトで全てのaltキーが26個の異なるワークスペースに割り当てられてて、どのアプリでも使えるエマックス風のショートカットが全部消えちゃった。それに、基本的なキーのマッピングに関するチュートリアルが全くなくて、ただコマンドが並んでるだけで、使い方のヒントもない… ここ数週間、Linuxでswayやhyprlandをいじって、ディスク暗号化パスワードをシリアルポートと物理キーボードの両方で入力できるようにブートローダーをいじってたんだけど、結局Aerospaceを削除して、別のローリングウィンドウマネージャー(Rift)を試すことにした。最終的には自分でタイルウィンドウマネージャーを書くことになるかもね。そういうことをしたいと思ってる人には、確かに色々な選択肢があるみたいだし。

そうじゃないって印象を受けてる。普段使い始めて数分でショートカットの競合に遭遇することが多い。約1年前にAerospaceに切り替えたんだけど、全部をリーダーキー(alt+space)で隠してる。そのおかげでAerospaceの通常モードに入れるんだ。そこでいくつかのaltショートカットを使って素早くアクセスしてる:例えば、alt-{hjkl}でペイン間を移動できる。でも、ほとんどのことは専用モードに入ってる。‘go-to’モードと‘move-to’モードがあって、どちらかのモードに入ると、任意の文字や数字を押すことで、その文字や数字に対応するスペースにペインを移動できる。例えば、ターミナルをスペース‘t’に移動したい時はalt+space g tって打つ。スペースに移動する時はalt+space m tって打つ。これが自然なターミナルのセットアップの延長みたいで楽しんでるんだけど、Aerospaceの一つの悩みは、画面を切り替えた後にウィンドウが隠れちゃうこと。右下隅で探さないといけなくて、なんとか視界に戻せることを願うしかない。

Meh(ctrl alt shift)とhyper(ctrl alt shift cmd)を使ってる。Caps Lockを長押しでmeh、タップでescにバインドしてるから、簡単にホットキーにアクセスできるよ。例えば、meh + 数字でスペースを切り替えられる。ターミナルのホットウィンドウはmeh + スペースにバインドしてる。ウィンドウ間のフォーカス移動はmeh + hjlkでやってる。

これが多くの人には十分じゃないかもしれないけど、たまにちょっと苦労することもあるよね。でも、僕みたいにMacで基本的に一つのウィンドウしか使わない人や、外部モニターを使ってる時に二つの画面を使う人には、これで結構満足できるかな(まあ、僕は重い「タイル」ユーザーじゃないけどね)。

ありがとう、そんなのがあるなんて全然知らなかった!

これってTahoe限定なの?前に見たことなかったな。

いつか自分のウィンドウマネージャーを作りたいと思ってたけど、MacOSの適切なAPIがないことにすぐにビビっちゃった。基本的にはアクセシビリティAPIを使ってハックしないといけないんだよね。このプロジェクトはObjective CのバインディングとアクセシビリティAPIを使ってるみたいだけど、デバッグや機能追加はどれくらい簡単だったのかな?どんなツールが使われてたんだろう。

アクセシビリティフレームワークは、個人的には「ハック」って感じじゃないな。結構考えられてて、機能も充実してるし。最近、Rustで似たようなものを作ってたんだけど、そんなに怖くないよ。Rustの開発環境とrust-analyzer、Appleのドキュメントサイトとobjc2 crateのドキュメントを開いておけば、特別なXCodeの設定はいらない。

わからないな。macOSでタイルマネージャーを使う必要がある人って、どうしてなんだろう?アプリを並べて表示することって、どれくらい必要なの?ほとんどの場合、アプリをフルスクリーンにして、4本指でウィンドウを切り替えるだけで十分だと思うんだけど。教えてくれない?

いつもだよ。右の四分の一にSlack。残りはブラウザ、ターミナル、IDE、タスクによっていろんな組み合わせ。結構多いのはブラウザとログの監視。各アプリにもサブディビジョンがあって、VS Codeはマルチファイルとターミナルを同時に使うことができる。ターミナル自体もマルチプレックスされてるし、ブラウザはサイドバイサイドのページでZen状態になることが多い。

タイルウィンドウマネージャーが「必要」かどうかは言わないけど、「アプリをフルスクリーンにして、4本指でウィンドウを切り替えるだけで十分」っていうのは、あなたの意見だね。私はmacOSでほとんどのジェスチャーやアニメーション、複数のデスクトップ(スペース?)を無効にしてる。フルスクリーンのアプリ間をスワイプするのが、私にはすごく遅く感じる。片方のアプリからもう片方に行くために通過しなきゃいけないから、必要なアプリが画面に出るまでに2回か3回スワイプしなきゃいけないこともある。誰かが逆方向にスワイプしてすぐ戻るのを見ると、ちょっと恥ずかしくなる。画面にアプリを表示したいとき、何ステップ離れているかを考えたくないし、アプリを通過する必要もないんだ。

誰も何も「必要」じゃないよ、結局は好みの問題。私はアプリを常に並べて使ってるけど、使ってるOS(Mac、Win、Linux)で同じスタイルのウィンドウマネージャーを使うことで、似たようなワークフローを保てるんだ。それぞれのOSの決められたワークフローに合わせる必要がないからね。

確かに役立つ時もあるよ。例えば、IDEの隣にドキュメントを表示したり、あるアプリから別のアプリに転記するようなワークフローの時とか。ほとんどの場合、私はフルスクリーンを好んで、仮想デスクトップを使って行き来するけど、シナリオによるね。それに、ターミナルやSpotify、Discord、ChatGPTなどのアプリは、そんなに画面スペースを必要としないことも多いから、フルスクリーンだと逆に変に見えることもある。だから、そういうのは仮想デスクトップの四分の一にタイルして使ってる。

macOSではないけど、Linuxでタイルを使う理由は私のと同じだと思う。小さいノートパソコンを使ってるなら、その意見は正しいよね。でも、モニターが大きくなるほど、並べて表示することのメリットが増えてくる。私はいつもそうしてるよ。メールについて書いているドキュメントと、そのメールを並べて表示したり、エディタ、ターミナル、VCS GUIを同時に開いたり、ドキュメントとコードを並べて表示したり、テンプレートとブラウザを開いたり、会計ソフトと銀行明細を並べたり、ファイルマネージャーと何でも一緒に使ったり。ほとんどの時、これが楽で生産的だと感じる。

いつもだよ。49インチの画面はそれ用に作られてるからね。通常のセットアップは、ターミナルが中央の半分で、その一部にnvimがあって、時々はそれを2つに分けることもあるし、そうじゃないこともある。右のペインには2つのターミナルタブ(zellij)。ブラウザは左の四分の一。右の四分の一は、SlackやGmeetなど、何でも。

なんでかって?赤が好きだからだよ。青が好きでも全然いいのに、なんで赤が好きなのか聞いてるみたいだね。もちろん青もいいけど、やっぱり赤の方が好きなんだ。

以前はスペースを切り替えてたけど、大きな画面では同じ画面に全部表示しておく方がメンタル的には楽だね。32インチのモニターを3台(両サイドに縦に2台)使ってるけど、IDE以外はフルスクリーンにすることはあまり意味がない。分割表示は常に小さい画面を持っているようなもので、どの仮想スクリーンにどのアプリがあるか探す必要がなくなるんだ。Chromeがいくつかの仮想スペースにあるとき、cmd-tabでChromeを選ぶと、必ずしも自分が欲しい方を選んでくれるわけじゃない。手動で戻らなきゃいけないから面倒なんだよね。MacBookだけを使うときは、タイルを少なくして仮想スクリーンを多く使ってウィンドウを整理するよ。スペースが限られてるからね。Slack、いくつかのChrome(コードのレンダリング、ドキュメント、ClickUpなど)、ターミナル、IDE、Postman、DataGripがすぐに集中できるショートカットの中にあって、画面全体を変えずに使えるのがいい。必要に応じてだけど、MacBookと同じサイズの8つのスクリーンを常に持っているのは本当に素晴らしくて、生産性が上がるんだ。r-cmdを使うと、アプリに素早く集中できるからすごく早いよ。デスクを切り替える必要がなくなるのも、ウィンドウの場所を見つけるのが楽になるから嬉しい。

スワイプのアニメーションが長すぎる。常に同じ仮想デスクトップにアプリを置いておくのがいいね。大きな画面では、エディタやブラウザの横にターミナルを開いたり、2つのドキュメントを作業するときに2つのブラウザウィンドウを開いたりするのが便利。

参照テキスト(コードやドキュメントなど)を使って何かを書いているとき、エディタと参照の画面を完全に切り替えなきゃいけないと、さっき読んだことや書こうとしてたことを忘れちゃうんだ。参照は視界の端に置いておきたいから、すぐに両方を行き来できるようにしたい。

フルスクリーンとトラックパッドのジェスチャーがmacOSで気持ちいいのはわかるよ。もしほとんど単一ウィンドウで作業するなら、それで十分だよね。でも、マルチウィンドウの作業フローになると、予測可能なレイアウトが重要になってくる。タイルツールは単に「2つのウィンドウを並べる」だけじゃなくて、 - コンテキストスイッチのオーバーヘッドを減らす:フォーカスの移動や再配置がキーボードでできて、流れを壊さない。 - 再利用可能な「作業パネル」を作る:プロジェクトやスペースごとに同じレイアウトを複製できるから、ウィンドウを「配置する」手間が省ける。 - 高解像度ディスプレイを有効活用する:5Kや6K、ウルトラワイドでは、正確なパーティショニングがフルスクリーンよりも優れている。私の妥協案は、macでは「ライトマネジメント」(Rectangle/Moomといくつかのショートカット)で約80%のニーズを満たしてる。もっと強いワークスペースのセマンティクスが必要なときは、Aerospace/Riftを使う。タイルが必要な人は少ないけど、ウィンドウの数や切り替え頻度が増えると、その価値が明らかになるよ。

Hammerspoonを使うと、自分だけのウィンドウマネージャーを作れるんだよね。個人的には、Divvy(https://mizage.com/divvy/)のモーダルの使い方がすごく好きなんだけど(cmd-alt-ctrl-xを押してから、レイアウトを選ぶために一つのキーを押す)、もうメンテされてないんだ。だから、OpenAIのCodexを使って、モーダルウィンドウマネージャーを作ったよ(https://github.com/ahamez/dot_hammerspoon/blob/master/wm.lua)。このアプローチをシェアしたら面白いかなと思って!

MiroWindowsManager(Hammerspoonプラグイン)を使って、MacOSでのウィンドウ管理に必要なものを手に入れてるよ。3つの異なる和音分割のバリエーションで、任意のクワドラントにウィンドウを配置できるんだ。ホットキーも同じだから、必要なところに瞬時に配置できる。

これに使えるnix flakeって誰か持ってる?yabaiの後にいくつかのウィンドウマネージャーを試してるんだけど、Aerospaceは時々遅延があるんだ。スケッチバーでいいワークスペースを表示するために出したイベントが関係してるのかはわからないけど、後でこれを試してみるかも。

これだよ: https://github.com/bromanko/nix-config/blob/main/packages/ri...