Mac wifiをキーボードショートカットでON/OFFしたい！

うちでMacを使っていると、ルータとの相性が悪いのか突然ネットの接続が切れている時があって、そういう時はいつもwifiを再接続していたのですが、これがまた面倒臭い。

...カーソルを右上まで持って行って

<img width="286" alt="スクリーンショット 2016-11-07 9.30.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/cf8ff0a4-95ed-7e37-d8da-f47170e5364a.png">

これを押(して、再度押)すだけなのですが。

というわけで、wifiの on / off をキーボードショートカット`control + w` / `control + shift + w`でできるようにしてみたのでその備忘録です。


# 初めに
今回利用するのは

```
$ /usr/sbin/networksetup -setairportpower en1 on
$ /usr/sbin/networksetup -setairportpower en1 off
```

この二つの管理コマンドです。

# コマンドを実行する wifi-on.app / wifi-off.app を作る
Automator を活用します。
(こんなアプリケーションが入っているなんて知らなかった...)

<img width="956" alt="スクリーンショット 2016-11-07 9.37.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/353768ce-d969-3fdd-a212-f4ff616140e3.png">

Automator を実行したら、 `ファイル > 新規` を選択します。ダイアログの中から、`アプリケーション`を選択します。
<img width="547" alt="スクリーンショット 2016-11-07 9.40.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/c9f0afa6-7404-3252-32f6-0dcb3dcfc417.png">

左上の検索から、「シェル」と検索します。
<img width="996" alt="スクリーンショット 2016-11-07 9.40.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/9153ee80-780b-1093-1e2a-e64209c9f401.png">

`シェルスクリプトを実行`という項目が出てくるので、これを選択します。
<img width="609" alt="スクリーンショット 2016-11-07 9.40.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/efb565e2-7609-9b8c-1420-5c2faabfc07a.png">

すると、右側に次のような編集画面が出ます。デフォルトだと`cat`になっています。
<img width="628" alt="スクリーンショット 2016-11-07 9.40.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/3b6a3267-d14a-5dbd-2a7d-c362acf0e788.png">

ここに先ほど紹介したコマンドを登録します。下の例では wifi を on にするコマンドです。
<img width="620" alt="スクリーンショット 2016-11-07 9.40.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/404e462a-caef-b634-66f6-4f1ee1b0a786.png">

編集したら、保存します。僕の環境では、デフォルトの保存場所は`i-Cloud`になっていましたが、`/Application`に入っていた方が忘れないので、そちらを選択しました。
<img width="426" alt="スクリーンショット 2016-11-07 9.41.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/407181d9-d69c-436a-7895-2913ead2fb9c.png">

onと同様の方法でoffのコマンドのappも作成して、`/Application`フォルダに`shell`というファイルにまとめてみました。
<img width="429" alt="スクリーンショット 2016-11-07 9.41.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/8b0e6285-b9c4-a899-75b1-f5d3daf8b634.png">

# アプリケーションを実行するサービスを作る
次は、.workflowなるファイルを作成します。
先ほど作成した、`wifi-on.app`と`wifi-off.app`を起動するためだけのワークフローです。

ここでも使うのは Automatorです。(Automator有能)
起動したら、先ほど選択した `アプリケーション` の隣の `サービス` を選択します。
<img width="550" alt="スクリーンショット 2016-11-07 9.49.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/e2fc116b-7ed4-d579-f66f-14433edcc1e4.png">

検索で、`起動`と入力して、`アプリケーションを起動`を選択します。
<img width="1000" alt="スクリーンショット 2016-11-07 9.50.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/bc0641a3-4cf6-f892-cbf5-3a8eec4719f0.png">

初めは、下のような状態なので、これを、
<img width="1000" alt="スクリーンショット 2016-11-07 9.50.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/9cdb3865-721e-ba7f-9f06-5c02cc947c0c.png">


入力は `入力なし`、対象は `全てのアプリケーション` 起動するのは`wifi-on.app(先ほど作ったアプリ)`となるように編集してください。
<img width="619" alt="スクリーンショット 2016-11-07 9.56.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/66501d5a-cfc5-87d0-7691-2638f8d84559.png">

起動するアプリケーションの対象は、おそらくクリックして出てくるメニューの下の方にある `その他` から探すことになると思います。
<img width="751" alt="スクリーンショット 2016-11-07 9.55.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/d051c8d4-b6e3-3dde-78a1-3c493f2807e5.png">

ここでは、先ほど作成したアプリを `/Application/shell/`のディレクトリに作成したので、そこを開いています。
<img width="780" alt="スクリーンショット 2016-11-07 9.56.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/b85dd76a-5bc2-bc0c-fd1f-98fd42c2e4d0.png">

編集が終わったら、保存します。
デフォルトの保存場所は`~/Library/Services`になっているので、このディレクトリに保存します。
<img width="770" alt="スクリーンショット 2016-11-07 9.50.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/ca23beca-4231-c9bc-c2b3-040b251c4762.png">

# キーボードショートカットを作る
先ほど作成したサービスにショートカットキーを割り当てます。
`システム環境設定 > キーボード > ショートカット > サービス`で作業します。
<img width="256" alt="スクリーンショット 2016-11-07 10.10.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/70f282a7-3808-7d91-ca3b-3f65bbfb6af4.png">

先ほど作成したサービスが、`一般`の枠に入っていると思うので、これにショートカットキーを割り当てます。
下の例では `control (+ shift) + w`で on / off ができるようにしてあります。
<img width="668" alt="スクリーンショット 2016-11-07 10.11.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/90254/e6296a91-16d2-11cc-fb95-24f98a656847.png">

以上で終了です。

# 最後に
ショートカットキーの反映には少し時間がかかるみたいで、自分の環境では割り当てた直後は使用できませんでした。

(２分くらい経って、使えるようになった...?)

「日本語入力がダメなのかな？」なんて思って、`command + space`でU.S.入力にしてみたり試行錯誤してる間にショートカットで on / off できるようになりました。(日本語入力でも普通にショートカット効いています)

この方法で、好きなコマンドにショートカットキーを割り当てられるので色々捗りそうです。

ありがとうございました。

# 参考
- [Macで任意のキーボードショートカットを設定する方法](https://digitalfan.jp/68641)
- [[Mac] 特定のアプリケーションをショートカット一発でアクティブにする方法](http://blog.odoruinu.net/2015/03/26/mac-how-to-launch-app-with-shortcut-key/)
- [MacのキーボードショートカットでWi-Fiオンオフする方法(Bettertouchtool編)](http://sawayakatrip.com/mac-keyboard-wifi-switch-bettertouchtool)

     こちらのサイトだと有料ソフトが必要となっていますが、必要ありませんでした