- macOS 環境を Lua スクリプトで制御できるオープンソースの自動化ツールで、OS とスクリプティングエンジンをつなぐ ブリッジの役割を果たす
- 多様な 拡張モジュール(extensions) を通じてシステム機能を公開し、これらを組み合わせてウィンドウ管理、入力制御などの複雑な作業を自動化できる
- インストールは Homebrew または手動ダウンロードに対応しており、ユーザー設定ファイル
~/.hammerspoon/init.lua を自分で作成してはじめて動作する
- プロジェクトは Mjolnir からフォークされ、より統合されたユーザー体験を提供しつつ、継続的に システム API の拡張 と 拡張間の統合強化 を目指している
- 開発者やパワーユーザーが macOS を細かく制御できる 高度な自動化プラットフォーム として定着している
Hammerspoon 概要
- Hammerspoon は macOS(旧 OS X)向けの 強力な自動化ツール で、OS と Lua スクリプティングエンジン をつなぐブリッジとして動作する
- ユーザーは Lua スクリプトを通じてシステムのさまざまな機能を制御できる
- 中核機能は 拡張モジュール(extensions) によって提供され、各モジュールがシステムの特定機能を公開する
- これにより、ウィンドウ管理、オーディオ制御、入力デバイス設定など、多様な自動化作業を実行できる
インストール方法
- 手動インストール
- GitHub の 最新リリース をダウンロード
Hammerspoon.app を Applications フォルダへ移動
- Homebrew でのインストール
- コマンド:
brew install hammerspoon --cask
初期設定と活用
- インストール直後は何も動作せず、ユーザーが自分で
~/.hammerspoon/init.lua ファイルを作成する必要がある
- 参考にできるリソース:
プロジェクトの歴史
- Hammerspoon は Mjolnir プロジェクトのフォーク として始まった
- Mjolnir は最小限のアプリケーション構造を志向し、拡張を外部 Lua パッケージとして管理していた
- Hammerspoon はこれを基盤に、より統合されたユーザー体験 を提供するために開発された
プロジェクトの今後の方向性
- システム API の拡張範囲拡大
- 拡張モジュール間の統合強化
- ユーザー体験の改善
技術構成と統計
- 主な言語構成: Objective-C 51%, Lua 24.7%, C 16.3%, HTML 5.6%, Shell 0.7%, Python 0.5%
- GitHub 統計: 14.9k stars, 678 forks, 133人の貢献者
- ライセンス: MIT License
- 公式ウェブサイト: www.hammerspoon.org
主なトピックタグ
- macOS, automation, lua, objective-c, osx, mjolnir, hammerspoon, irc
1件のコメント
Hacker News のコメント
Hammerspoon は、自分の Mac 全体をひとつにまとめる接着剤のような存在
Safari のタブを Obsidian の文書にダンプしたり、Hyper キー組み合わせ(Ctrl+Opt+Cmd) で Safari、Finder、Terminal、VS Code、Notes など主要アプリを新しいウィンドウで開いたりしている
AeroSpace と連携してウィンドウを別のモニターへ移動したり、2つのウィンドウを並べたり、入れ替えたり、すべてのウィンドウを1つのワークスペースに集めたりと、さまざまな自動化を設定している
さらに、バックグラウンドアプリが落ちたら自動で再起動し、ディスクイメージがゴミ箱に入れられたらアンマウントするよう促すプロンプトも出す
Skim と連携して、Markdown リンクから PDF の特定セクションへジャンプする機能もある
もともとは Outlook の共有リンクを使っていたが、認証が必要になったため Apple Calendar を経由するようにした。ただ、予定の40%しか同期されないのは今でも謎
以前は tiling window manager が好きだったが、Mac では視覚的に複雑なアプリを多く使うので、画面配置のほうが重要になった
メール、IDE、ブラウザー、ターミナル、チャットアプリそれぞれに合わせた ウィンドウサイズのプリセット を作り、Hammerspoon のショートカットで切り替えている
IDE がビルド中でもブラウザーを開いて下部ログを確認できるし、モーダルショートカットでアプリ切り替えも速い
多段階モーダルという考え方が興味深い
Hammerspoon の メンテナー として、現在 Lua から JavaScript へ移行する v2 を開発中
自分のプロジェクト Spacehammer は、Spacemacs/Doom に着想を得た Hammerspoon のモーダルツールキット
「alt+spc a b」でブラウザーを開いたり、「alt+spc m j/k」で音量を調整したり、どんなアプリのテキストでも Emacs で編集できる
Fennel で書かれていて、REPL を通じてリアルタイム開発ができ、Yabai のようなウィンドウマネージャーともよく連携する
自分は Hammerspoon で 疑似タイル型ウィンドウマネージャー を実装している
ウィンドウを画面比率で再配置し、ショートカットでモニター間の移動もできる
最近初めて Hammerspoon を使ってみたが、メニューバーアプリのオプションに ショートカットを直接割り当てる ために ChatGPT が AppleScript でスクリプトを書いてくれた
本当にすごくて、これからもっと多くの自動化を試してみるつもり
Zoom の画面共有コントロールを隠すスクリプトを作り、ESC を押しても再表示されないようにしている
自分の設定全体はたった1行
ctrl + Dで グリッドインターフェース を表示して、ウィンドウを好きな位置に調整する他のウィンドウマネージャーよりシンプルで直感的
hs.grid.setGrid('4x4')でグリッドサイズを変えたり、hs.grid.ui.textSizeで文字サイズを調整したりもできるCtrl+Dと衝突しないのか気になる自分も Hammerspoon のおかげで ウィンドウ切り替えのストレス から解放された
Cmd+1〜9 で Chrome のウィンドウを切り替え、Cmd+0 で選択ダイアログを開く
自分の設定ファイル を見ると、ウィンドウ名を記憶して再起動後も維持するようになっている
Hammerspoon は Mac の Automator より強力
Automator が今では JavaScriptCore をサポートしているように、Hammerspoon も Lua の代わりに JS を使うなら Node パッケージをそのまま活用できるはず
Lua で書き直さなければならないなら、かなり苦労しそう