Skip to content

Instantly share code, notes, and snippets.

@3panda
Last active May 27, 2025 02:22
Show Gist options
  • Save 3panda/4b3f31cb8faa026d0d9218677aa550df to your computer and use it in GitHub Desktop.
Save 3panda/4b3f31cb8faa026d0d9218677aa550df to your computer and use it in GitHub Desktop.
macOS でターミナルなど指定したアプリに切り替えたら自動で英数入力に戻す方法(Hammerspoon + im-select)

✅ macOS でターミナルなど指定したアプリに切り替えたら自動で英数入力に戻す方法(Hammerspoon + im-select)

🔧 目的

ターミナル(ターミナル.app または iTerm2.app)や指定したアプリに切り替えたとき、自動で IMEを英数(com.apple.keylayout.ABC) に切り替える。

✅ 前提条件

  • macOS(日本語環境)
  • Homebrew がインストール済み
  • Hammerspoon アプリがインストール済み
  • ターミナル使用時に英数に自動で戻したい

🧱 手順

1. im-select を Homebrew 経由でインストール

brew tap daipeihust/tap
brew install im-select

インストール後、以下で英数モードの ID を確認:

im-select
# => com.apple.keylayout.ABC(英数入力中の場合)

2. Hammerspoon をインストール

brew install --cask hammerspoon
  • インストール後、/Applications/Hammerspoon.app に配置されます
  • 初回起動時にアクセシビリティの許可を求められたら「許可」する
    (システム設定 > プライバシーとセキュリティ > アクセシビリティ)

3. ~/.hammerspoon/init.lua を作成・編集

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

以下の内容を貼り付けて保存:

local imSelectPath = "/opt/homebrew/bin/im-select"  -- im-select のパス
local eisuuInputSource = "com.apple.keylayout.ABC"  -- 英数IMEのID

-- IMEを英数に切り替える関数
local function switchToEisuu()
  hs.execute(imSelectPath .. " " .. eisuuInputSource)
end

-- アクティブアプリ監視
local function appWatcherFn(appName, eventType, appObject)
  if eventType == hs.application.watcher.activated then
    if appName == "ターミナル" or appName == "iTerm2" then
      switchToEisuu()
    end
  end
end

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

4. 設定を反映(Reload Config)

Hammerspoon のメニューバーアイコンから:

  • Reload Config」をクリック
    または
  • ⌘ + R

✅ 動作確認

  1. 日本語入力にしておく(かな入力など)
  2. 他のアプリから ターミナルiTerm2 に切り替える
  3. 自動で英数(ABC)に戻れば成功!

📝 補足

  • appName == "ターミナル" は日本語環境での Terminal.app に対応しています
  • com.apple.keylayout.ABCim-select で確認した英数IDです(環境により異なる可能性あり)
  • hs.alert.show() などのデバッグ表示を入れると挙動確認に便利です

💡 応用例(必要に応じて)

-- Terminal(日本語表示に対応)で英数に自動切り替え

local imSelectPath = "/opt/homebrew/bin/im-select"
local eisuuInputSource = "com.apple.keylayout.ABC"

-- 英数入力に切り替える関数
local function switchToEisuu()
  hs.execute(imSelectPath .. " " .. eisuuInputSource)
end

-- 英数に戻す対象のアプリ一覧(日本語表示にも対応)
local targetApps = {
  ["ターミナル"] = true,
  ["iTerm2"] = true,
  ["goneovim"] = true,
  -- ["VS Code"] = true, -- 必要に応じて追加
}

-- アプリ切り替え時の処理
local function appWatcherFn(appName, eventType, appObject)
  if eventType == hs.application.watcher.activated then
    if targetApps[appName] then
      switchToEisuu()
    end
  end
end

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

🎉 完成!

これで、ターミナルに切り替えるたびに自動で英数入力に戻る快適な開発環境が構築できました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment