Hammerspoon:LuaでmacOSを自動化―オープンソースのパワーツール
Hammerspoon: Luaで動かすmacOSオートメーションツール
macOSユーザーは、日々同じドラッグ&ドロップやメニュークリックを繰り返すことが多いです。開発者・デザイナー、あるいはパワーユーザーを問わず、これらの習慣を自動化すれば何時間もの作業を節約できます。そこで登場するのが Hammerspoon です。軽量でオープンソースのアプリケーションとして、macOS APIをLuaスクリプト言語へ公開します。Hammerspoonを使えば、次のようなことが可能です。
- アプリ起動、ウィンドウタイル、メディア制御のホットキーを作成。
- クリップボード履歴、通知、ファイル管理を自動化。
- Objective‑CやSwiftで書かれたカスタムモジュールでOSを拡張。
- ハードウェアイベント(Bluetooth、キーボードLED、Stream Deckボタン等)にフック。
- Lua HTTPライブラリを介してDropbox、GitHub等外部サービスと統合。
はじめに
1. Hammerspoonのインストール
# Homebrew Caskを使用
brew install --cask hammerspoon
あるいは、GitHubリリースページから最新版をダウンロードし、Hammerspoon.app を Applications フォルダへドラッグしてください。
2. 最初のスクリプト設定
初回起動時に Hammerspoon は ~/.hammerspoon/ ディレクトリを作成します。ここに init.lua という名前のファイルを置くと、メイン設定ファイルとして機能します。
-- ~/.hammerspoon/init.lua
hs.loadSpoon("Window")
-- 例: Cmd‑Shift‑F で Finder ウィンドウを切り替え
hs.hotkey.bind({"cmd", "shift"}, "F", function()
local f = hs.application.get("Finder")
if f then
f:activate()
f:hide()
else
hs.osascript.applescript('tell application "Finder" to activate')
end
end)
ファイルを保存し、デフォルトのリロードホットキー Cmd‑Alt‑F を押すと、カスタムキー割り当てが動作します。
フックとモジュールで拡張
Hammerspoonは hs.window、hs.pathmonitor、hs.audiodevice など macOS のサービスを公開する「拡張セット」ライブラリを標準装備しています。追加の拡張は専用リポジトリ extensions で確認でき、C/Objective‑C で書き直接ビルドに含めることも可能です。
-- 例: 動的なウィンドウレイアウトを設定
hs.hotkey.bind({"cmd", "shift"}, "W", function()
local win = hs.window.focusedWindow()
if win then win:move({x=0, y=0, w=0.5, h=1}) end
end)
luarocks などのパッケージマネージャーを使用してサードパーティLuaライブラリを導入し、hs.http モジュールでシンプルなウェブフックを作成することもできます。
コミュニティとリソース
- ドキュメント – 公式の Getting Started Guide と API Docs は必携です。
- 例 – リポジトリの
samples/ディレクトリからサンプルinit.luaを参照・コピー。 - サポート – Libera の #hammerspoon IRC チャンネル、または Google Group に参加。
- 貢献 – レポジトリをフォークし、ルートで
make testを実行してからプルリクエストを提出。プロジェクトは厳格な lint/CI パイプラインを採用しています。
パワーユーザー向けヒント
- 効率的にリロード –
Cmd‑Option‑Fを押してアプリを再起動せずに設定を更新。 - Spoon サポートを活用 –
hs.loadSpoon("<name>")でWindowやDesktopなどのサードパーティライブラリをロード。 - コンソールでデバッグ –
hs.debug.disable()でデバッグ出力を非表示、あるいはprintでロジックをトレース。 - ログイン時に自動起動 –
~/.hammerspoon/init.luaをログイン項目に追加して、起動時にスクリプトを実行。 - 再利用可能モジュール – Lua モジュールを
~/.hammerspoon/modules/に置き、init.luaからrequire("module")で呼び出す。
次のステップ
- 自分だけのオートメーションツールキットを構築:カスタムメディアコントローラーを追加、ウィンドウタイルマネージャーを作成、あるいはコーディングワークフローを自動化。
- Stream Deck やタッチバーとの統合を Hammerspoon 拡張機能で試す。
- 高度な機能を探求するなら Hammerspoon Extension Wiki を閲覧。
Lua のシンプルさと macOS API の奥深さを組み合わせることで、Hammerspoonはデスクトップをカスタマイズ可能で応答性の高い環境へと「プログラム」します。さあ、スクリプトを書き始め、作業効率を急上昇させましょう。