s1m4ne.dev
Published on

macでターミナルを開いたときに自動で英字入力に切り替える(Hammerspoon)

Authors

はじめに

本記事ではmacでターミナルを開いたときに自動で英字入力に切り替える方法について紹介します。

前回の記事ではKeyboard Maestroを使用しましたが、実は有料ソフトだったらしく2週間のトライアルで使えなくなりました。代わりにHammerspoonを使って同じことを実現していきたいと思います。

HammerspoonとはmacOS 専用の自動化・拡張フレームワークです。Luaという軽量スクリプト言語でmacのあらゆる機能を操作できます。

手順

1. Hammerspoon のインストール

Homebrewを使ってアプリケーションをインストールします。

brew install --cask hammerspoon

2. Hammerspoonの初期設定

インストール後アプリケーション「Hammerspoon」を開いてください。手順通りに進み、設定のアクセシビリティから「Hammerspoon」の制御を許可してください。

3. スクリプト作成

設定ファイルを作成してinit.luaに自動化したい処理を記述します。以下のコマンドでディレクトリとスクリプトを作成します。

mkdir -p ~/.hammerspoon
nano ~/.hammerspoon/init.lua

nanoエディタが開くので以下のスクリプトをコピペしてください。このスクリプトはmac標準のターミナルに対して英字切り替えを自動的に行います。ターミナルが前面になったタイミングで英字入力に切り替わります。

スクリプトをペーストしたらControl + XからのYで変更を保存します。

function appWatcher(name, event, app)
  if event == hs.application.watcher.activated and name == "ターミナル" then
    if not hs.keycodes.currentSourceID("com.apple.keylayout.US") then
      hs.keycodes.currentSourceID("com.apple.keylayout.ABC")
    end
  end
end

appWatcher = hs.application.watcher.new(appWatcher)
appWatcher:start()

自分の場合は Alacritty というターミナルを使用しているので、Alacrittyとターミナルに対して設定しています。以下のスクリプトを使用しました。

function appWatcher(name, event, app)
  if event == hs.application.watcher.activated then
    if name == "Alacritty" or name == "Terminal" then
      if not hs.keycodes.currentSourceID("com.apple.keylayout.US") then
        hs.keycodes.currentSourceID("com.apple.keylayout.ABC")
      end
    end
  end
end

appWatcher = hs.application.watcher.new(appWatcher)
appWatcher:start()

4. 反映

macのメニュバー(上のバー)からハンマーのマークをクリックして「Reload Config」をクリックします。エラー等なければこれで反映されるはずです。

image-20250909102353094

5. 動作確認

ターミナルを開いて英字入力に変わるか確認してみてください。

うまく動かない場合は「Console」からログをコピペしてChatGPTに聞いてみてください。

image-20250909102507641