mac Sierra + Karabiner-Elements + ATOK で 半角/全角 ボタンを使って入力を切り替える

(以下、2017年12月20日 追記)
@s-show さんの [Karabiner-Elementsだけで"全角/半角"でのIME切り替えを実現する方法など](https://qiita.com/s-show/items/08a7c1b558e4d7e6f1b0) を基に設定していて、select_input_sourceを使った方法だとQiitaの編集画面で日本語入力のままだったりすることがあったので、少し別の方法で設定してみた。(もしかすると入力ソースの切り替えイベントの発生が何か違うのかも？)

やりたい事としては **「半角/全角キー」を押したら日本語入力の状態によって「英数」または「かな」キーの動作をしたい。** であるため、Complex Modificationsとして

- grave_accent_and_tilde(`)が入力されたら  
  - 入力ソースの言語が en の場合、かなキー(japanese_kana)に変換する
  - 入力ソースの言語が ja の場合、英数キー(japanese_eisuu)に変換する

ということをするようにしてみた。

```json:jis_half_full_key.json
{
    "title": "半角/全角キーで日本語入力のON/OFFを切り替える",
    "rules": [
        {
            "description": "半角/全角キーで日本語入力のON/OFFを切り替える",
            "manipulators": [
                {
                    "type": "basic",
                    "from": {
                        "key_code": "grave_accent_and_tilde"
                    },
                    "to": [
                        {
                            "key_code": "japanese_kana"
                        }
                    ],
                    "conditions": [
                        {
                            "type": "input_source_if",
                            "input_sources": [
                                {
                                    "language": "en"
                                }
                            ]
                        }
                    ]
                },
                {
                    "type": "basic",
                    "from": {
                        "key_code": "grave_accent_and_tilde"
                    },
                    "to": [
                        {
                            "key_code": "japanese_eisuu"
                        }
                    ],
                    "conditions": [
                        {
                            "type": "input_source_if",
                            "input_sources": [
                                {
                                    "language": "ja"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}
```

と・・・ここまでやってみて、
[Karabiner-Elements complex_modifications rules の Other examples](https://pqrs.org/osx/karabiner/complex_modifications/example.html) に
input_source_if,input_source_unless exampleとあり「Toggle input sources (English or Japanese) by grave_accent_and_tilde」がまさにそれだったので、色々設定を書かずとも

1. Karabinar-Elementsを起動
2. Complex Mdificationsタブに移動
3. Add ruleボタンをクリック
4. ダイアログの「Import more rules from the Internet (open a web browser)」ボタンをクリック
5. 表示されたページの最下部に「Other examples」というリンクがあるのでクリック
6. 「input_source_if,input_source_unless example」にある「import」をクリックしてKarabiner-Elementsにインポート(インポートの確認が表示されるので「Import」をクリック)
7. 「input_source_if,input_source_unless example」が増えているので、その中にある「Toggle input sources (English or Japanese) by grave_accent_and_tilde」を「Enable」で追加
8. 「半角/全角キー」で日本語入力が切り替わるようになる

で、やりたい事ができるようになった。
色々スッキリ。

---
(以下、2016年10月3日の内容）
2016年9月21日に勢い余って[Karabiner](https://pqrs.org/osx/karabiner/index.html.ja)が[mac Sierra](http://www.apple.com/jp/macos/sierra/)に対応していないにも関わらずアップデートしてしまって早2週間が経とうとしている。

自分の環境は1つの108日本語キーボードをWindowsとMacの両方でBluetoothで切替ながら使っている状況で、Karabinerで「半角/全角」が切り替えられなくても、「Commandキー + スペース」で入力ソースを切り替えられるから、どうにかなるかなと思っていたけれど、長時間Macを使った後にWindows環境に戻ると「Windowsキー + スペース」を押してしまいダメだった :sob: 

というわけで、mac Sierraに対応しているという[Karabiner-Elements](https://github.com/tekezo/Karabiner-Elements)を使いつつATOKで入力切替を「半角/全角」ボタンで出来ないか？試行錯誤した結果をメモ程度に公開。

# Karabiner-Elements のインストール

https://github.com/tekezo/Karabiner-Elements
ここで公開されている karabiner-elements-latest.dmg をダウンロードしてインストール。
今回ダウンロードしたのは version 0.90.46 でした。

インストール後、アプリケーションから「Karabiner-Elements.app」を実行すると設定画面が表示されますが、設定画面からはまだ設定できないので、手動で設定します。

# Karabiner-Elements の設定ファイル

Karabiner-Elements は開発中で設定画面がまだないので設定ファイルを自分で作ってね。ということのようなので、
~/.karabiner.d/configuration/karabiner.json
に以下のように記述

```json
{
  "profiles": [
    {
      "name":"Default profile",
      "selected": true,
      "simple_modifications": {
        "grave_accent_and_tilde": "f13",
        "international4": "japanese_kana",
        "international5": "japanese_eisuu"
      }
    }
  ]
}
```

**grave_accent_and_tilde** が「半角/全角」キーになっている(よく表示される「`」これ)ので、このキーに「F13」を割り当てます。
F13にこだわりはないので、別のキーでもＯＫです。(最初はF15キーにしたら、ディスプレイの明るさを明るくするキーになりました :fearful: )

Karabiner-Elementsを起動した状態であればファイルを保存すれば自動で再読込されます。
起動していなければ、起動します。

grave_accent_and_tilde 以外の international4 と international5 はそれぞれ「変換」と「無変換」キーでしたのでMacと同じ配列になるように「かな」と「英数」キーを割り当ててます。
これだけでも、日英の切替はボタン1つで可能。
でも、今回は使い慣れた「半角/全角」を使える様にするのが目的なので、もう少し掘り下げてATOKの方も設定変更します。


# ATOKの設定

自分の環境がATOK 2016なので、その前提で。

キーボード環境設定が、以下のように「ひらがな」と「英字」が選択された状態とします。
![keyborad.png](https://qiita-image-store.s3.amazonaws.com/0/85034/c48025eb-fb3e-f265-c300-62b320183f02.png)

次に、ＡＴＯＫの「ＡＴＯＫキー・ローマ字カスタマイザ」を表示し、「MS-IME風スタイル」をコピーして「MS-IME風+F13」を作りました。
(他の入力スタイルでも問題ないと思う)
![ATOK-key.png](https://qiita-image-store.s3.amazonaws.com/0/85034/fb29162f-f765-b827-8e6a-79a412570119.png)

「MS-IME風+F13」を選択した状態で「キー設定...」ボタンをクリックしてキー設定を開きます。
そして「英字入力(A)ON/OFF」の全ての状態に「F13」キーを割り当てます。
![ATOK-key2.png](https://qiita-image-store.s3.amazonaws.com/0/85034/552e07b6-1876-1512-a14f-7f5e613cb9d3.png)

沢山の機能がずらっと並んでいて探すのが大変なのですが、「英字入力(A)ON/OFF」は、「機能を検索...」ボタンから機能操作の中から見つけることができます。
![ATOK-key3.png](https://qiita-image-store.s3.amazonaws.com/0/85034/b8aab124-d637-97b5-2166-02a21dce689b.png)

設定出来たら、「半角/全角」ボタンの入力がKarabiner-Elementsを通じて「F13」ボタンの入力に変わり、「F13」の入力にATOKが反応して「英数入力(A)ON/OFF」が実行され入力が切り替わるようになります。

# まとめ

Commandキー + スペースでもやっていける気がしていたけど、ダメだったのでATOKの機能を色々割り当ててみたら何とか出来ました。
他にも「漢字/半角モード切替」という機能があって近いことはできるのですが、そちらは文字未入力or半角入力の時のみ受け付けるようで、入力中の切替ができませんでした。

自分で再度設定することになった時のためにもメモとしてまとめてみました。

# 余談

Karabiner-Elementsを起動すると…Bluetoothで接続しているLogicoolのMX Anyware2マウスが反応しなくなります。。。
一旦 MX Aniware2 の接続先を別の所に切り替えて、再度戻ってくるとカーソル移動・左右のクリック・ホイールスクロールは復活します。
ただ、拡張ボタンは復活しませんでした。
こちらは、Karabiner-Elementsを終了すると元に戻るので、入力イベントをKarabiner-Elementsに吸収されているみたいでした。
バージョンが上がって解消されるといいな。