Convoker — アプリ単位のウィンドウ制御ツール
varie-ai/convoker
GitHub で見る
概要
Convokerは、macOS向けの「アプリ単位ウィンドウ操作」ツールです。ユーザーはアプリ名を入力してEnterを押すだけで、そのアプリに属するすべてのウィンドウを一括で集めたり、特定ウィンドウにフォーカスしたり、ウィンドウを分割配置したりできます。ウィンドウを個別に選んで移動・最前面化する手間を省き、マルチウィンドウでの作業効率を高めることが目的です。軽量でシンプルな操作感を重視しており、配布用のリリースが用意されている点から実用を想定したユーティリティであることがうかがえます(約300字)。
リポジトリの統計情報
- スター数: 2
- フォーク数: 0
- ウォッチャー数: 2
- コミット数: 4
- ファイル数: 6
- メインの言語: Swift
主な特徴
- アプリ名で検索してEnter:そのアプリに属する全ウィンドウを対象に操作を実行
- Gather / Focus / Splitなど複数の一括操作をサポート
- macOS向けにSwiftで実装された軽量ユーティリティ
- リリース配布が用意されており即利用可能
技術的なポイント
ConvokerはmacOSのウィンドウ管理をアプリ単位で行うため、OSレベルのウィンドウ列挙と操作APIを利用する必要があります。一般的にこの種のツールでは以下の要素が重要になります。
- ウィンドウ検出:実行中のアプリケーションとそのウィンドウを列挙するには、Accessibility API(AXUIElement)やCore GraphicsのCGWindowListなどを用いるのが一般的です。アプリのバンドルIDやプロセス名、表示名でフィルタを行い、対象アプリに属するウィンドウ群を特定します。
- ウィンドウ操作:集約(全ウィンドウを画面中央や指定領域に移動)、フォーカス(ウィンドウの最前面化やキーボードフォーカス付与)、分割(複数ウィンドウを左右やグリッドに並べる)といったアクションは、ウィンドウ位置/サイズの変更、最前面フラグの操作、アクティブ化などを組み合わせて実現します。AXUIElement経由でウィンドウの位置・サイズを設定したり、NSWindowやAccessibilityのAPIでフォーカスを切り替えたりします。
- 権限とセキュリティ:ユーザーがシステム環境設定 → セキュリティとプライバシー → アクセシビリティでアプリに操作許可を与える必要があります。サンドボックス化や署名、Notarization(配布時の署名・公証)も考慮すると配布体験が向上します。一部操作はサンドボックス内では制限されるため、適切なエンタイトルメントや配布方式を選ぶ必要があります。
- UI/UX実装:READMEの説明からは、シンプルなテキスト入力+Enterで完了するワークフローが採用されています。Swiftを用いていることから、UIはAppKitかSwiftUIで実装されている可能性が高く、軽量なウィンドウ選択/コマンド実行のフローを備えていると考えられます。キーボード中心の操作を重視する設計は、作業効率を高めるうえで有利です。
- 配置アルゴリズム:Split(分割)時には複数ウィンドウのアスペクト比やスクリーンサイズを考慮したレイアウト計算が必要です。単純な左右分割だけでなく、二分割→グリッド配置などの戦略を用いることで、ウィンドウの見やすさと操作性を両立できます。
- 実装上の注意点:ウィンドウタイトルやツリー構造、ミニウィンドウ/メニューウィンドウの扱い、フルスクリーンウィンドウの例外処理など、実運用での境界条件が多く存在します。これらを丁寧に扱うことで誤操作や不意なウィンドウ移動を抑えることが重要です。
Convokerのリポジトリ自体は軽量で、アセットやアイコン、ライセンス、READMEが含まれており、初期段階のプロジェクト/ユーティリティとしての体裁を整えています。実際に利用する際は、アクセシビリティ許可の付与や動作確認を行ってください。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- Convoker: dir
- LICENSE: file
- README.md: file
- assets: dir
…他 1 ファイル
Convokerディレクトリにはソースコード(Swiftファイル)やアプリ本体のエントリが格納されている想定です。assetsにはアイコン画像などのリソースが含まれており、READMEには使用例やダウンロードリンクが記載されています。
まとめ
シンプルな操作でアプリ単位のウィンドウ管理を実現する、macOS向けの実用的なユーティリティです(約50字)。
リポジトリ情報:
- 名前: convoker
- 説明: Type an app name, press Enter, all its windows come to you. Per-app window control for macOS.
- スター数: 2
- 言語: Swift
- URL: https://github.com/varie-ai/convoker
- オーナー: varie-ai
- アバター: https://avatars.githubusercontent.com/u/257187343?v=4
READMEの抜粋:
Convoker
Type an app name, press Enter, all its windows come to you.
Per-app window control for macOS. Gather, focus, or split — all windows of one app at once.
Download • この記事は、GitHub で公開されている README などの情報をもとに AI が自動生成したものです。 内容に誤りが含まれる可能性があるため、利用前には必ず公式リポジトリをご確認ください。
関連記事
Notchy — ノッチに表示する軽量ターミナル(macOS)
NotchyはmacOS用のメニューバーアプリで、MacBookのノッチ部分に小さな浮動ターミナルパネルを表示します。ノッチにホバーするかメニューバーアイコンをクリックすると、埋め込みセッションを持つ端末パネルが現れ、開いているXcodeプロジェクトを自動検出してそのプロジェクトフォルダへ移動(cd)します。シンプルに開発ワークフローにアクセスできることを狙ったツールです。(約300字)
Quitty — macOSメニューバーでのアプリ監視と即終了ツール
Quittyはパワーユーザー向けに設計された軽量なmacOSメニューバー・ユーティリティです。ネイティブなSwiftUIで構築され、メモリ使用量のリアルタイム監視、実行中プロセスの一覧表示、アプリの即時終了(終了/強制終了)などをメニューバーから直感的に操作できます。起動時の自動実行(Launch at Login)にも対応し、シンプルかつ高速なワークフローでメモリ管理やプロセス整理を行いたいユーザーに適しています。(約300字)
ContextD — 画面活動を継続的にキャプチャしてローカルで要約するmacOSツール
ContextDは、macOS上で2秒ごとにスクリーンショットを取得し、前回との差分を抽出して変化領域だけをOCRし、抽出したテキストをローカルに蓄積・要約(LLMを利用)して他のローカルツールから利用できるようにする効率的なアプリです。差分ベースの処理で計算負荷とストレージを抑えつつ、継続的にユーザーの画面文脈を構築します。
Flash Translate — 極小で高速な macOS メニューバー翻訳ツール
Flash Translate は、選択テキストをすばやく翻訳することに特化した極小の macOS メニューバーアプリです。純粋な Swift/SwiftUI で実装され、Command キーのダブルタップで選択箇所を検知してマウス付近に浮かぶ翻訳ウィンドウを表示します。Google 翻訳をデフォルトに、OpenAI 互換 API などカスタム翻訳エンドポイントも利用可能。軽量で遅延がほとんどなく、アニメーションや画面端自動回避など細かな UX 改善も備えています。インストールは DMG をダウンロードしてアプリを配置するだけのシンプルさが魅力です。
AnsiSaver — macOS向けANSIアート・スクリーンセーバー
AnsiSaverは、BBS時代のANSIアートをmacOSのスクリーンセーバーとして復活させるプロジェクトです。16colo.rsに蓄積されたBBS用パックを直接取得して画面上にスクロール表示し、CP437文字セットや当時のカラーパレットを再現します。Swiftで実装され、Xcodeプロジェクトとブリッジングヘッダを含み、外部のANSIレンダリング実装(サブモジュール)と連携して高速かつ忠実な描画を行います。(約300字)
iMessagePrinter — iMessage/SMS会話を美しくPDF化するmacOSアプリ
iMessage、SMS、RCSの会話を読み取り、タイムスタンプ、既読/配信情報、リアクション、連絡先名、インライン画像などを保持した整形済みPDFとして書き出すmacOSアプリ。ローカルのMessagesデータを解析してフル会話履歴を取得し、Contactsアプリとの照合で送り主/受信者名を解決します。使いやすいGUIで会話をプレビューしてエクスポート可能。





