🍀

Karabiner Elementsにカスタムルールを追加して公開するまでの方法

2021/08/20に公開

What?

Macを使っているユーザー(特にUS配列のキーボードを使っている人)の中には、
Karabiner Elements を使って、特定のキー入力を別のキー入力として変換するように設定してる人も多いかと思います。
(例: 「左のコマンドキーを単体で押した時に、入力ソースを英字入力に切り替える」など)

Karabinerではjsonファイルにこのようなルールを記述することでカスタムルールを作ることができるのですが、どのようにそれをimportできるのか分かりにくかったので、調べたことをメモしておきます。

Why?

そもそも筆者の場合は、下記のような事情がありました。

  • Macを使っている
  • キーボードはUS配列
  • 日本語・英語・中国語を使う(使用頻度はEn -> Jp -> Ch)
  • For Japanese (日本語環境向けの設定) (rev 6) という設定を入れている
    • 左右のコマンドキーをEn/Jpの切り替えにマッピングされている
  • 中国語に切り替える場合は、入力ソースの切り替え(Cmd+Spaceにマップしている)をグルグルと回らなければいけない(※下図参照)

そこで、どうしても1回のキー入力で中国語に切り替えるルールが欲しかったのですが、
公式のカスタムルール共有サイトに公開されているカスタムルールの中に、自分の状況に適しているものが見つからなかったため、新しく作ることにしました。

なので、最終的なゴールとしては、

  • 左の⌘(コマンド)キー単体入力 -> 英字入力
  • 右の⌘(コマンド)キー単体入力 -> 日本語入力
  • 左の⌥(オプション)キー単体入力 -> 中国語(簡体字)入力

この3つを満たせることがゴールとなります。

作成から公開まで

1. 独自ルールを作る

公式のドキュメントがあんまり分かりやすくはなかったのですが、jsonに記述するべきルールはだいたいこの辺に書いてあります。

また、公式ではルールジェネレーターとして下記の2つが紹介されています。

筆者の場合は、既存のルールのjsonファイルを見ながら、見よう見まねでなんとなく作りました。

2. ローカルで動作確認する

作ったはいいものの、どのようにしてKarabiner Elementsに取り込むのか分かりませんでした。

なぜなら、KarabinerのGUI上では、下図のようにルール共有サイトからimportする方法しか存在していないからです。

色々調べた結果、
どうやら

~/.config/karabiner/assets/complex_modifications/

というディレクトリの下に配置されているjsonファイルを読んでいることがわかったので、
CUIから手で cp して配置すると、無事に取り込むことができ、動作も確認することができました🎉

この時点で、自分の目的は達成できたのですが、

  • 毎回PCを購入し直す度にこの作業をするのが嫌なことと
  • もしかしたら世の中に同じようなルールを求めている人がいるかもしれないこと

から一応、共有サイトに追加しようと思いました。

3. 共有サイトに追加する

共有サイト にはimportするための機能は一通りあるのですが、どうやったらアップロードできるのか全然分かりませんでした。

色々探した結果、どうやらこのGitHubリポジトリでカスタムルールを管理していることが分かりました。

(READMEに書いてある通りですが)手順を簡単にまとめると、

  1. ソースコードをcloneする
  2. .json ファイルを指定されたディレクトリに追加する
  3. 検索インデックスするためのファイルがあるので、そこに追加したファイルへのパスを追加する
  4. make build する
  5. make server すると http://localhost:8000 に共有サイトが立ち上がるので、そこで自分の追加したルールが存在することを確認する
  6. リポジトリをforkする
  7. 作業内容をコミットしてupstreamに対してPRを作る(メンテナへの感謝の気持ちを忘れずに)

まとめ

本記事執筆時点ではPRを作った直後で、このPRが取り込まれるかどうかも分からず、最終的な本番環境での動作確認まではできていないのですが、一応一通りの手順は記せたかと思います。

また、PRの行く末はさておいても、自分個人としては非常にペインの大きかった言語入力切り替えがスムーズになったことで、とても満足しています😊

2021/08/21 追記

PRをマージしていただき、無事に公開されていることを確認できました🎉

Discussion