JIS配列のMacでUS配列キーボードを使う時のキーボードの種類の切替方法


(2021/4/19 追記)
この事象が起こるのはKarabiner-Elementsを使っている場合のみで、原因はVirtual keyboard機能にありそうです。
Macにはキーボードごとに配列を記憶してくれる機能があるみたいですが、先述の機能によりうまく動いてくれません。
おそらくですが、OSには入力しているキーボードがKarabiner DriverKit VirtualHIDKeyborad x.x.xかのように見えているためかと考えています。
そのため、Virtual keyboardを無効化できれば解決しそうですが、無効化の方法が見つかりませんでした。(実際にKarabiner-Elementsを終了してみるとキーボードごとに判定される)
いつかまた状況が変わるかもしれませんが、とりあえず以下の運用を続けています。


JIS配列のMacbookでUS配列のキーボード(HHKB等)を使っていると起こる、キーボードの種類切替めんどくさい問題。
色々検索してみたところ、Karabiner-Elementsでプロファイル切り替えが安定していそうです。
そもそも原因はKarabiner-Elementsでした。

参考にさせていただいた記事:AlfredでKarabiner-Elementsのプロファイルを切り替えるWorkflowの作り方

私はAlfredを使っていないので、Automator + AppleScriptでやってみました。

環境

MacBook Air (M1, 2020) - JIS配列
macOS Big Sur (11.2.3)
Karabiner-Elements (13.4.0)
Bluetoothキーボード - US配列

Karabiner-Elementsのインストール

Karabiner-Elements
設定方法等は割愛します。

Karabiner-ElementsでProfileの作成

Karabiner-Elementsの設定でProfilesを選び、JISUSを作ります。このProfileの名称をスクリプトで使うので、違う言葉を使いたい人は後述のスクリプトでも適宜変更してください。

この時点では中身は考えなくて良いですが、すでに設定してあるものがある場合は新しいProfileにも全て設定しないといけません。
コピーする方法があるのかもしれませんが、知りません。。。教えてください。

Profileが作れたらVirtual keyboardの設定を変更します。

Country codeを以下のとおり設定します。
US:0
JIS:45

値を変えるとMacのキーボード設定アシスタントが出てくるはずです。

こちらを進めて、USの時はANSI(US配列)JISの時はJISで設定しておきます。
キーボード設定アシスタントが出てこない時はCountry codeの上下矢印で一度別の値に変えると表示されたりするので、画面が表示されてからCountry codeを正しい値に設定し、キーボード設定アシスタントをやってみてください。
それでも出ない場合はそれぞれの状態で環境設定のキーボードからやった方がいいかもしれません。

切り替えるスクリプトの作成

いよいよスクリプト作ります。
今回はキーボードショートカットに入れたいので、Automatorクイックアクションを選びます。
ワークフローの受け取る項目を入力なしに変え、ユーティリティシェルスクリプトを実行で以下のスクリプトを入力します。

# 現在のprofileを取得
cur=`'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --show-current-profile-name`

# US/JIS
if [ $cur = "JIS" ]; then
    par="US"
else
    par="JIS"
fi

# profileの切替
'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --select-profile $par

結果、こんな感じになります。

スクリプトができたら右上の実行を押してみて、うまく切り替わってるか確認。
現在のProfileはメニューバーで確認できます。

実行でエラーなく、実行後に切り替わってればOK。


うまくできたら保存して適当に名前をつけておいてください。
スクリプト作成は終了です。

ショートカットへの登録

先ほど、クイックアクションを作成して保存したので、環境設定 -> キーボード -> ショートカットのサービスにAutomatorで作成したクイックアクションが登録されています。
そちらにショートカットキーを登録すれば完成です!

(私はスクリプト名をキーボードタイプ切り替えにして、Ctrl+/を登録しています。)

さいごに

お疲れ様でした。
せっかくキーボードショートカットに登録しているものの、使う機会も少なく、ショートカットを忘れがちです。
もし使っていないキーがあれば、ショートカットを複雑にしてそのキーをKarabiner-Elementsに設定することで1ボタンで切り替えとかもできそうですが、そうなるとMacbook単体ではショートカット操作ができないとかが出てきそうです。
色々あるとはわかっていつつ、やっぱり面倒なので、Plag & Playでできる世界が来てほしいです。