【Karabiner-Elements】Capslockを使ってWindows風に快適なプログラミング環境を作る方法(MacOS編)

【Karabiner-Elements】Capslockを使ってWindows風に快適なプログラミング環境を作る方法(MacOS編)

今回は、MacOSで快適なプログラミング環境を作るためによく使われている「Karabiner-Elements」について、作業効率化のためにどのような設定を行っているかをご紹介します。

※ Karabiner-Elementsは「ControlキーとCapslockキーを入れ替える」や「あるキーを組み合わせて押すと独自のショートカットを実行する」などができるキーボードの入力をかなり自由にカスタマイズできるアプリです。

設定のコンセプトは「CapslockでWindowsのControlキーのような操作感を実現する」で作成しました。

本記事は先日の「【AutoHotKey】Capslockを使って快適なプログラミング環境を作る方法(Windows編)」のMacOS版になります。

WindowsのAutoHotKeyと同じく、本記事執筆時点のKarabiner-Elementsの設定をGitHubに上げておきますので、使えそうなところをコピペで使ってもらえたらと思います。

matatabi3/karabiner-elements Release 2020042801-for-blog (GitHubリンク)

目次


1. 前提条件

まず本記事の内容を使うために必要な条件は以下のようになっています。

  • MacOSであること
    現時点でCatalinaのみ動作確認しています。
  • Karabiner-Elementsがインストールできること
    dmgファイルをインストールするので、管理者権限が必要になる認識です。

2. 想定利用環境

次に、今回の設定を使っているキーボード環境です。

自分は仕事の関係上WindowsとMacOSを行ったり来たりする必要があり、外付けキーボードは同じものを使用しつつ両OSでできるだけ操作感を揃えながらよりキーボードのホームポジションから手を離さずに作業できる環境を作りたいと思い、Karabiner-Elementsに独自の設定をいろいろ追加しました。
(Windows側も含め、英字配列で統一しています。)

  • MacBook Pro 13(2018年モデルのタッチバーなし英字配列)の本体キーボード
  • Mistel BAROCCO MD770(英字配列)

今回もWindows版と同じく方向キーやHome/End・PageUp/DownはFnなどと組み合わせなくても使えるキーボードの方がより便利に使える設定になっていると思います。


3. 特定のアプリではControlキーとする

では今回の設定の話に移ります。

MacOS標準のシステム設定でCapslockをControlに変更する機能はありますが、特定のアプリのみControlキーとして動かすということはできません。

Karabiner-Elementsを使って、GitHubに上げているcapslock_to_ctrl_in_app.jsonのファイルの設定を有効にすれば、標準のターミナルアプリとiTerm2だけCapslockがControlキーとして使えるようになります。

使う場合は「~/.config/karabiner/assets/complex_modifications/capslock_to_ctrl_in_app.json」に保存しておくと、Karabiner-Elementsの設定画面「Complex Modifications」でこの設定を有効にできるようになります。

有効にするとターミナルでCapslockがControlキーとして動作するので、コマンドラインの操作感がJISキーボードのMacやCapslockをCtrlキーに変更したWindows風になります。


4. Capslockキー+αの設定

次は、タイトルにもある通り今回はWindows風というコンセプトなので、Capslock+cでコピーなどが行えるような設定を追加していきます。

MacOSでは「CapslockをF13などに変更して、F13を他のキーと組み合わせる」というのができなかったため、Capslockを押したときは「右Command+右Control+右Option」キーを押したことにするという設定を行います。

capslock_to_emacs_win.jsonの下記の箇所で実現しています。

"from": {
"key_code": "caps_lock",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [
{
"key_code": "right_command",
"modifiers": [
"right_control",
"right_option"
]
}
],
"to_if_alone": [
{
"key_code": "left_control"
}
],

“to_if_alone”は単体で押したときの挙動を設定しています。

あとは「右Command+右Control+右Option+○を押したときに▲」という設定をガシガシ書いていくだけで、Capslock+αの設定を行うことができるようになります。

こちらも同じく「~/.config/karabiner/assets/complex_modifications/capslock_to_emacs_win.json」に保存しておくと、Karabiner-Elementsの設定画面「Complex Modifications」でこの設定を選択できるようになります。

※ 元々「Command+Control+Option+○」がショートカットとして割り当てられている場合は上書きされてしまうので、使っているアプリに応じて設定を使い分ける必要がありますので、後述のconditionsの箇所をご参考ください。

4.1. 基本的にはCommandキーとして動作

MacOSではコピー/切り取り/貼り付けなどのショートが主にCommandキーとの組み合わせに割り当てられているので、Windowsで使っているカスタマイズと同じになるようにCapslock+αをCommand+αとして割り当てています。

ここで、組み合わせキーの設定を行う上で1つ重要だと思う「optional」を、Capslock+wを例として解説します。

今回の設定では「Capslock+w」を「Command+w」に設定しています。

「タブを閉じる」ときなどにCommand+wを使いますが、「ウィンドウを閉じる」がCommand+Shift+wに割り当てられていることが多いです。

Capslock+Shift+wで「ウィンドウを閉じる」を動作させたいときに「”optional”: “left_shift”, “right_shift”」を追記します。

こうするとCapslock+wはCommand+w、Capslock+Shift+wはCommand+Shift+wという動作になります。

「左だけ」や「右だけ」ももちろん可能で、自分の場合は下記のように左Optionキーも追加していろいろなアプリでショートカットの組み合わせとして代用できるようにしています。

"from": {
"key_code": "w",
"modifiers": {
"mandatory": ["right_command", "right_control", "right_option"],
"optional": ["left_shift", "left_option", "right_shift"]
}
},

4.2. Emacsのようなカーソル移動

今回の設定では、Windows風にするだけでなくMacOS標準で使えるEmacs風のカーソル移動のショートカットもできるだけそのまま使えるようにしておきたかったので、WindowsのAutoHotKeyで行った設定とほぼ同じものを移植しています。

一部「Capslock+a」のように「Homeキー」として動作させいときと「Control+a」として動作させたいときがある場合に、特定の条件ではこちらの動作をする、という設定は以下のようにconditionsを指定します。

(3の特定のアプリではControlキーとするも下記のような設定を利用しています)

"conditions": [
{
"type": "frontmost_application_unless",
"bundle_identifiers": [
"^com\\.microsoft\\.rdc$",
"^com\\.microsoft\\.rdc\\.mac$",
"^com\\.microsoft\\.rdc\\.macos$",
"^com\\.microsoft\\.rdc\\.osx\\.beta$",
"^net\\.sf\\.cord$",
"^com\\.thinomenon\\.RemoteDesktopConnection$",
"^com\\.itap-mobile\\.qmote$",
"^com\\.nulana\\.remotixmac$",
"^com\\.p5sys\\.jump\\.mac\\.viewer$",
"^com\\.p5sys\\.jump\\.mac\\.viewer\\.web$",
"^com\\.teamviewer\\.TeamViewer$",
"^com\\.vmware\\.horizon$",
"^com\\.2X\\.Client\\.Mac$",
"^com\\.vmware\\.fusion$",
"^com\\.vmware\\.horizon$",
"^com\\.vmware\\.view$",
"^com\\.parallels\\.desktop$",
"^com\\.parallels\\.vm$",
"^com\\.parallels\\.desktop\\.console$",
"^org\\.virtualbox\\.app\\.VirtualBoxVM$",
"^com\\.citrix\\.XenAppViewer$",
"^com\\.vmware\\.proxyApp\\.",
"^com\\.parallels\\.winapp\\.",
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$",
"^org\\.mozilla\\.firefox$",
"^org\\.mozilla\\.nightly$",
"^com\\.microsoft\\.Edge",
"^com\\.google\\.Chrome$",
"^com\\.apple\\.Safari$",
"^cz\\.or\\.repo\\.git-gui$",
"^com\\.jetbrains\\.",
"^com\\.tinyspeck\\.slackmacgap$"
]
}

「”type”: “frontmost_application_unless”」なので、「列挙しているアプリではないときは」という条件になります。

逆に「”type”: “frontmost_application_if”」とすると「列挙しているアプリでは」という条件になります。


以上、Karabiner-ElementsでCapslockを使ってWindows風に快適なプログラミング環境を作る方法のご紹介でした。

Karabiner-Elementsもきちんと独自の設定を追加し始めたのは最近でまだまだ機能を使いこなせてはいませんが、自分のようにMacOSとWindowsを行ったり来たりする人にはけっこう作業効率を高めるツールとして有効活用できるのではないかと思います。

一応1年ほどMacOS標準のショートカットをベースに作業を行っていましたが、やっぱり環境がコロコロ変わると頭の中の切り替えが必要になって効率が悪いので今回のような設定を両OSに行いました。

おかげさまで操作ミスが相当減ってかなり作業効率が改善できたのではないかと実感しています。

Windowsから移行してきてMacOSに慣れない方やKarabiner-Elementsを使って作業効率を高めようとしている方の参考になれば幸いです。

この記事もおすすめ