リモート会議中に画面共有していると、目的のウィンドウがどこかへ行くことがあります。
資料を開いて、ブラウザを開いて、エディタを開いて、チャットを開いて、
気づいたら「あのウィンドウどこだっけ?」となることありますよね?
画面共有中だと、その探している時間が気になります。
macOSにはMission ControlやCommand-Tabがあります。
ショートカットを工夫して切り替えることもできます。
ただ、ウィンドウが多いと見た目で目的のウィンドウを選ぶまでにもたつくことがありました。
そこで、開いているウィンドウをサムネイルで一覧表示して、見た目で選んで呼び出せるアプリを作りました。
https://github.com/maeda-niku18/WindowFinder/releases/
作ったもの
Window Finder というmacOS用アプリです。
開いているウィンドウを一覧から選んで、すばやく前面に呼び出すためのアプリです。
画面中央にウィンドウ一覧を表示し、サムネイルを見ながら目的のウィンドウを選べます。
キーボードでも、マウスでも操作でき、選んだウィンドウは最小化されていても復元して前面に呼び出します。
できること
- 開いているウィンドウをサムネイル付きで一覧表示
- アプリ名やウィンドウタイトルで検索
- 矢印キーで選択し、Enterで呼び出し
- マウスクリックでウィンドウを呼び出し
- 最小化中のウィンドウを復元して前面に表示
- グローバルショートカットでいつでも表示
- 表示順、サムネイルサイズ、列数、高さ、自動スクロールを設定
使い方
基本操作はシンプルです。
- ⌃⌥Space を押してWindow Finderを表示します
- 一覧から呼び出したいウィンドウを選びます
- Enter またはクリックで、そのウィンドウを前面に呼び出します
閉じるときは Esc かアクティブではなくなると閉じます。
| 操作 | 内容 |
|---|---|
| ⌃⌥Space | Window Finderを表示、表示中は一覧を更新 |
| ↑ ↓ ← → | ウィンドウを選択 |
| Enter | 選択中のウィンドウを呼び出す |
| Esc | 閉じる |
既定のショートカットは ⌃⌥Space です。設定画面から別のキー組み合わせにも変更できます。
検索欄に入力すると、アプリ名またはウィンドウタイトルで絞り込めます。候補の先頭が自動で選択されるので、文字を入力してEnterを押すだけで目的のウィンドウに移動できます。
実装で考えたこと
実装はSwift / SwiftUI + AppKitです。
ウィンドウの一覧取得や前面化にはAccessibility APIを使っています。
サムネイルの取得にはScreenCaptureKitを使っています。
大まかには以下のような構成です。
- Accessibility APIで各アプリのウィンドウ一覧を取得する
- ScreenCaptureKitでウィンドウのサムネイルを取得する
- SwiftUIでサムネイルのグリッドを表示する
- AppKitの
NSPanelで画面中央にHUDっぽく出す - KeyboardShortcutsでグローバルショートカットを扱う
サムネイル表示には画面収録権限が必要です。
未許可の場合はアプリアイコンで代替します。
ウィンドウを前面に呼び出すときは、最小化されていれば解除し、対象ウィンドウをraiseして、所有アプリをアクティブにしています。
Mac App Storeではなく.dmg配布にした
最初はMac App Storeで配布することも考えていました。
ただ、このアプリは他のアプリのウィンドウ一覧を取得したり、選択したウィンドウを前面に呼び出したりします。そのためAccessibility権限が必須になります。
さらに、他アプリのウィンドウを操作する都合上、App Sandboxとの相性がかなり厳しいです。
結果として、Mac App StoreではなくDeveloper ID署名と公証済み.dmgで配布する形にしました。
BMCも用意した
せっかく公開するので、Buy Me a Coffeeも登録して支援ページを用意しました。
必須の課金ではなく、もし役に立ったら支援してもらえる導線として置いています。
ClaudeとCodexで作った
実装はClaudeとCodexを使いながら進めました。
設計の整理、実装、READMEの整備、ローカライズ、配布まわりの修正などを、AIとやり取りしながら詰めています。
とはいえ、何を作りたいか、どの体験を優先するか、Mac App Storeではなく.dmg配布にするか、といった判断は人間側で決めています。
AIにコードを書かせるというより、実装の相談相手と作業者を兼ねてもらう感覚でした。
まとめ
小さな不便でも、毎日の作業や会議中に何度も起きると意外と効いてきます。
今回は「ウィンドウを探す時間を減らす」ことだけに絞ったので、機能としてはシンプルですが、自分の作業ではかなり使いやすくなったと思います。
が、
まだまだなアプリなのでちょくちょく更新したり意見いただけるのであればいただきたいです!
同じようにウィンドウを見失いがちな人の参考になれば嬉しいです。
https://github.com/maeda-niku18/WindowFinder/releases/
仕事以外で初めてアプリ配布なのでドキドキです(多くの人が見たら嬉しい)
