1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hammerspoon実践活用:Macの作業効率を劇的に向上させる自動化レシピ集

Posted at

Hammerspoon実践活用:Macの作業効率を劇的に向上させる自動化レシピ集

この記事では、Macの作業効率を劇的に向上させる強力な自動化ツール「Hammerspoon」の実践的な活用方法を解説します。Hammerspoonは、Luaスクリプトを使ってMacの様々な操作を自動化できるため、日々の作業を大幅に効率化することが可能です。この記事を通して、Hammerspoonの導入から実践的なレシピまでを学び、あなたのMac環境をより快適に、そして生産性の高いものにしましょう。

1. はじめに:Hammerspoonで実現できることと、その強力な理由

Hammerspoonは、Macの操作をLuaスクリプトで制御できる、非常に強力な自動化ツールです。キーボードショートカットのカスタマイズ、ウィンドウ操作、アプリケーションの制御、テキスト入力の効率化など、多岐にわたる操作を自動化できます。

Hammerspoonが強力な理由

  • 高いカスタマイズ性: Luaスクリプトによって、ほぼすべての操作を自由にカスタマイズできます。
  • 柔軟な拡張性: 豊富なAPIが用意されており、複雑な自動化も実現可能です。
  • 無料かつオープンソース: 費用を気にせず、自由に利用・貢献できます。
  • キーボード中心の操作: マウス操作を減らし、より効率的な作業環境を構築できます。

この記事では、Hammerspoonの基本的な使い方から、具体的なレシピまでを解説し、あなたの作業効率を最大化するお手伝いをします。

2. 必須設定:Hammerspoon導入と初期設定の最適化

Hammerspoonを利用するには、まずインストールと初期設定が必要です。

  1. Hammerspoonのダウンロード: 公式サイト(http://www.hammerspoon.org/)から最新版をダウンロードし、インストールします。
  2. 設定ファイルの作成: ~/.hammerspoon/init.lua に設定を記述します。このファイルがHammerspoonのメイン設定ファイルとなります。
  3. アクセシビリティ設定: システム環境設定の「セキュリティとプライバシー」で、Hammerspoonにアクセシビリティを許可します。

初期設定として、以下の設定をinit.luaに記述することを推奨します。

-- リロード用のキーバインドを設定 (Ctrl + Shift + R)
hs.hotkey.bind({"ctrl", "shift"}, "r", function()
  hs.reload()
end)

-- 設定ファイルの変更を監視し、自動でリロードする
hs.fs.watcher.new(os.getenv("HOME") .. "/.hammerspoon", function()
  hs.reload()
end):start()

この設定により、設定ファイルを変更するたびにHammerspoonを再起動する必要がなくなります。

3. ウィンドウ操作の自動化:キーボードだけでウィンドウを自由自在に操る

Hammerspoonの強力な機能の一つが、ウィンドウ操作の自動化です。キーボードショートカットを使って、ウィンドウの移動、リサイズ、画面分割などを効率的に行うことができます。

具体例:画面分割、ウィンドウ移動、リサイズをショートカットで実行

以下のコードは、hs.gridモジュールを使って、ウィンドウを画面の左半分、右半分、全画面に移動させる例です。

-- グリッド設定
local grid = hs.grid.new()

-- ウィンドウを左半分に移動
hs.hotkey.bind({"ctrl", "alt"}, "left", function()
  grid:pushWindowToUnit(hs.window.focusedWindow(), grid.getUnit(1, 1, 2, 1))
end)

-- ウィンドウを右半分に移動
hs.hotkey.bind({"ctrl", "alt"}, "right", function()
  grid:pushWindowToUnit(hs.window.focusedWindow(), grid.getUnit(3, 1, 2, 1))
end)

-- ウィンドウを全画面に移動
hs.hotkey.bind({"ctrl", "alt"}, "m", function()
  grid:pushWindowToUnit(hs.window.focusedWindow(), grid.getUnit(1, 1, 4, 1))
end)

このコードをinit.luaに追加し、Hammerspoonをリロードすると、Ctrl + Alt + Leftでウィンドウが左半分に、Ctrl + Alt + Rightで右半分に、Ctrl + Alt + Mで全画面に移動するようになります。

コード例:hs.gridモジュールを使ったウィンドウ操作スクリプト

上記の例をさらに拡張し、グリッドのサイズをカスタマイズすることも可能です。

-- グリッドを4x2に設定
local grid = hs.grid.new(4, 2)

-- ウィンドウを左上に移動
hs.hotkey.bind({"ctrl", "alt"}, "1", function()
  grid:pushWindowToUnit(hs.window.focusedWindow(), grid.getUnit(1, 1, 1, 1))
end)

-- ウィンドウを右上に移動
hs.hotkey.bind({"ctrl", "alt"}, "2", function()
  grid:pushWindowToUnit(hs.window.focusedWindow(), grid.getUnit(2, 1, 1, 1))
end)

-- ウィンドウを左下に移動
hs.hotkey.bind({"ctrl", "alt"}, "3", function()
  grid:pushWindowToUnit(hs.window.focusedWindow(), grid.getUnit(1, 2, 1, 1))
end)

-- ウィンドウを右下に移動
hs.hotkey.bind({"ctrl", "alt"}, "4", function()
  grid:pushWindowToUnit(hs.window.focusedWindow(), grid.getUnit(2, 2, 1, 1))
end)

この例では、ウィンドウを画面の四隅に移動させることができます。

4. アプリケーション起動・切り替えの高速化:Alfredを超える効率的なランチャー構築

Hammerspoonを使って、アプリケーションの起動や切り替えを高速化することも可能です。Alfredのようなランチャーを、よりカスタマイズされた形で構築できます。

具体例:特定のアプリを特定のワークスペースで起動、アプリ切り替えを快適に

以下のコードは、特定のアプリケーションを特定のワークスペースで起動する例です。

-- アプリケーション起動関数
local function launchApp(appName, workspace)
  local app = hs.application.find(appName)
  if not app then
    hs.application.launch(appName)
    app = hs.application.find(appName)
  end
  if app then
    app:activate(true)
    if workspace then
      hs.spaces.moveToSpace(workspace, app:windows()[1])
    end
  end
end

-- 特定のアプリを特定のワークスペースで起動
hs.hotkey.bind({"ctrl", "alt"}, "t", function()
  launchApp("iTerm2", 1)
end)

hs.hotkey.bind({"ctrl", "alt"}, "e", function()
  launchApp("Visual Studio Code", 2)
end)

このコードでは、Ctrl + Alt + TでiTerm2をワークスペース1で、Ctrl + Alt + EでVisual Studio Codeをワークスペース2で起動します。

コード例:hs.applicationモジュールを使ったアプリ制御スクリプト

hs.applicationモジュールを使用すると、アプリケーションの起動、アクティブ化、終了など、様々な操作を自動化できます。

-- アプリケーションを切り替える関数
local function switchApp(appName)
  local app = hs.application.find(appName)
  if app then
    app:activate(true)
  end
end

-- アプリケーションを切り替えるショートカット
hs.hotkey.bind({"ctrl", "alt"}, "a", function()
  switchApp("Safari")
end)

hs.hotkey.bind({"ctrl", "alt"}, "s", function()
  switchApp("Slack")
end)

このコードでは、Ctrl + Alt + AでSafari、Ctrl + Alt + SでSlackに切り替えます。

5. テキスト入力の効率化:スニペット、変換、マクロで作業時間を大幅短縮

Hammerspoonは、テキスト入力の効率化にも役立ちます。スニペット機能や、日付、時刻の自動挿入などを実現できます。

具体例:よく使うテキストをショートカットで入力、日付や時刻を自動挿入

以下のコードは、よく使うテキストをショートカットで入力するスニペット機能の例です。

-- スニペットを設定
local snippets = {
  ["em"] = "example@email.com",
  ["sig"] = "--\nYour Name\nYour Title",
}

-- スニペット展開関数
local function expandSnippet(key)
  local snippet = snippets[key]
  if snippet then
    hs.textinput.insert(snippet)
  end
end

-- スニペット展開ショートカット
hs.hotkey.bind({"ctrl", "alt"}, "1", function()
  expandSnippet("em")
end)

hs.hotkey.bind({"ctrl", "alt"}, "2", function()
  expandSnippet("sig")
end)

-- 日付を挿入する関数
local function insertDate()
  local date = os.date("%Y-%m-%d")
  hs.textinput.insert(date)
end

-- 日付挿入ショートカット
hs.hotkey.bind({"ctrl", "alt"}, "d", function()
  insertDate()
end)

このコードでは、Ctrl + Alt + 1でメールアドレス、Ctrl + Alt + 2で署名、Ctrl + Alt + Dで現在の日付を挿入します。

コード例:hs.textinputモジュールを使ったスニペット機能の実装

hs.textinputモジュールを使うと、より複雑なスニペット機能も実装できます。

-- スニペットを動的に生成する関数
local function dynamicSnippet(prefix)
  local snippet = prefix .. os.date("%Y-%m-%d %H:%M:%S")
  hs.textinput.insert(snippet)
end

-- 動的なスニペット挿入ショートカット
hs.hotkey.bind({"ctrl", "alt"}, "t", function()
  dynamicSnippet("Timestamp: ")
end)

このコードでは、Ctrl + Alt + Tで「Timestamp: 」に続けて現在の日時を挿入します。

6. カスタムメニューと通知の活用:作業を中断させない情報収集と操作

Hammerspoonでは、カスタムメニューや通知を実装することも可能です。これにより、作業を中断することなく、必要な情報を収集したり、操作を実行したりできます。

具体例:クリップボード履歴、システム情報の表示、外部スクリプトの実行

以下のコードは、クリップボード履歴を表示するメニューを作成する例です。

-- クリップボード履歴を保持するテーブル
local clipboardHistory = {}

-- クリップボード監視
hs.pasteboard.watcher.new(function(changeType)
  if changeType == "change" then
    local content = hs.pasteboard.getContents()
    if content then
      table.insert(clipboardHistory, 1, content)
      if #clipboardHistory > 10 then
        table.remove(clipboardHistory, 11)
      end
    end
  end
end):start()

-- メニュー作成
local clipboardMenu = hs.menubar.new()

-- メニュー更新関数
local function updateMenu()
  local items = {}
  for i, text in ipairs(clipboardHistory) do
    table.insert(items, hs.menubar.menuItem(text, function()
      hs.pasteboard.setContents(text)
    end))
  end
  clipboardMenu:setMenu(items)
end

-- メニュー表示ショートカット
hs.hotkey.bind({"ctrl", "alt"}, "c", function()
  updateMenu()
  clipboardMenu:show()
end)

このコードでは、Ctrl + Alt + Cでクリップボード履歴を表示するメニューが表示されます。

コード例:hs.menubarモジュールとhs.notifyモジュールを使ったメニューと通知の実装

hs.menubarモジュールとhs.notifyモジュールを組み合わせることで、様々な情報をメニューに表示したり、通知を送信したりできます。

-- システム情報を表示するメニュー
local systemMenu = hs.menubar.new()
local function updateSystemMenu()
  local items = {
    hs.menubar.menuItem("CPU: " .. hs.cpu.usage(), nil),
    hs.menubar.menuItem("Memory: " .. hs.memory.usage(), nil),
    hs.menubar.menuItem("Battery: " .. hs.battery.level() * 100 .. "%", nil),
  }
  systemMenu:setMenu(items)
end

-- システム情報メニュー表示ショートカット
hs.hotkey.bind({"ctrl", "alt"}, "i", function()
  updateSystemMenu()
  systemMenu:show()
end)

-- 通知を送信する関数
local function sendNotification(title, message)
  hs.notify.new({title = title, informativeText = message}):send()
end

-- 通知送信ショートカット
hs.hotkey.bind({"ctrl", "alt"}, "n", function()
  sendNotification("Hammerspoon", "Notification test")
end)

このコードでは、Ctrl + Alt + Iでシステム情報を表示するメニュー、Ctrl + Alt + Nで通知を送信します。

7. トラブルシューティングと注意点:Hammerspoonでハマりやすい落とし穴と解決策

Hammerspoonは強力なツールですが、設定ミスやエラーが発生することもあります。以下に、よくあるトラブルシューティングと注意点をまとめました。

  • 設定ファイルの管理: init.luaは非常に重要なファイルです。変更する前にバックアップを取ることを推奨します。
  • エラーログの確認: Hammerspoonのコンソールでエラーログを確認し、問題の原因を特定します。
  • パフォーマンスチューニング: 過度に複雑なスクリプトはパフォーマンスに影響を与える可能性があります。不要な処理を減らし、効率的なコードを心がけましょう。
  • 競合するショートカット: 他のアプリケーションやシステムとショートカットが競合しないように注意しましょう。
  • アクセシビリティ許可: アクセシビリティ許可が正しく設定されているか確認しましょう。

8. まとめ:Hammerspoonを使いこなして、Macでの作業効率を最大化する

この記事では、Hammerspoonの基本的な使い方から、実践的なレシピまでを解説しました。Hammerspoonは、あなたのMac環境をより快適に、そして生産性の高いものにするための強力なツールです。

この記事で紹介したコード例を参考に、ぜひ自分だけのカスタマイズを試してみてください。Hammerspoonを使いこなすことで、Macでの作業効率を最大化し、より快適なデジタルライフを送りましょう。

参考リンク:

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?