iPhoneとMacBookとのWiFiテザリング(Instant Hotspot)をキーボードから開始終了する方法
価値ある情報をユーザー視点で発信するブログ
最近ブログ更新を再開してMacBookを持ち歩くことが多くなり、iPhoneとのテザリングを頻用するようになりました。
テザリングつなぎっぱなしではパケットの浪費があるため、iCloud同期の暴走を抑止する設定を施した上でマメに接続切断をしています。
しかし接続切断のメニュー操作がとても面倒なので、キーボードショートカット一発でiPhoneとのテザリングを接続切断できるようにしてみました。
もくじ
ちなみに、ただのWiFi接続ならコマンドラインから接続切断できます。
networksetup -setairportnetwork en0 WIFI_SSID WIFI_PASSWORD networksetup -setairportpower Wi-Fi off
自動化ソフトウェアHammerspoonでは、以下のようにすることで接続切断が可能です。
hs.wifi.associate(network, passphrase[, interface]) hs.wifi.disassociate([interface])
ですから、BetterTouchToolやAlfred、Hammerspoonを使ってキーボードショートカットに割り当てるのは難しくありません。
今回のケースで特別なのが、Instant Hotspotという特別なテザリング方法を前提にしていること。
Instant Hotspotとは、同じApple IDでログインしているMac、iPhone、iPadの間でできる手間なしテザリングのことです。
普通、iPhoneをホストにしてWiFiテザリングをする場合「設定>インターネット共有」の画面を表示するか、コントロールセンターからインターネット共有をオンにする手順が必要です。
こうして初めてiPhoneで立てたWiFiアクセスポイントのSSIDが、他のマシンから90秒間だけ見えるようになります。
Instant Hotspotの場合、iPhone側での事前の準備なしに、いきなりMacBook、iPadからiPhoneのWiFiアクセスポイントに接続可能な点が違います。
これは、先行してBluetoothで火種となる接続開始処理を行ない、しかる後にWiFiで本接続するという、Bluetoothとの連携技で実現されています。
macOSに省データモードを搭載しないAppleにしては気の利いた機能で大変便利なのですが(イヤミ)、接続を開始したい時点ではiPhoneのWiFiアクセスポイントは存在しないため、前述のnetworksetupを使ったようなプログラマブルな接続方法が使えないという欠点があります。
ちなみに、Instant Hotspotは不調で使えないことが少なくありませんが、以下のような対策で復活させることが可能です。
ただし、iPhoneではiCloudからいったんログアウトするとWalletの中が空になり、iCloudに再ログインしても元通りにはなりません。
しかし追加したことのあるカードの情報自体は残っていて、セキュリティコードの入力をすれば、カメラを使った登録手順を再度踏まずともクレジットカードが復活できます。
Suicaはセキュリティコードの入力の必要はありませんが(そもそもそんなもの元からないですね)、1日経過しないと再登録できない点に注意が必要です。
結論から言うと、Mac自身にInstant Hotspotのためのメニュー操作を肩代わりさせるという手法で接続切断操作の簡易化を実現しました。
AppleScriptによるUI Scriptingです。
中に四つのファイルが入っています。
ファイル名 | |
---|---|
Alfred_ToggleInstantHotspot.alfredworkflow | Alfred登録用 |
BTT_ToggleInstantHotspot.textClipping | BetterTouchTool登録用 |
ToggleInstantHotspot.app | そのまま実行用(実行形式のAppleScript) |
source/ToggleInstantHotspot.scpt | 生のAppleScript(参考用) |
いずれか都合のいいものを使ってください。
初回は右クリックから「開く」で実行してください。
権限が足りず実行できないので、「セキュリティとプライバシー>プライバシー>アクセシビリティ」とたどった上で、ウインドウ左下の鍵アイコンをクリック。
パスワードを入力して「下のアプリケーションにコンピュータの制御を許可。」の中にリストアップされている「ToggleInstantHotspot」のチェックボックスをオンにしてください。
BetterTouchToolの「設定」を開き、「すべてのアプリ」の「キーボードショートカット」を選択。
下掲の画像が示す列に「BTT_ToggleInstantHotspot.textClipping」をドラッグ&ドロップします。
以降、F1キーでInstant Hotspotの接続切断ができるようになるはずです。
Alfredの「Preferences…」を開き、「Workflows」を選択。
左のペインに「Alfred_ToggleInstantHotspot.alfredworkflow」をドラッグ&ドロップして登録。
このままではHotkeyが割り当てられていないので、何らか割り当てます。
Hammerspoon用の設定も作ったので置いておきます。
メニューバーのアイコンから「Open Config」、開いた設定ファイルの末尾に追記。Reload Configで有効になります。
このまま使うとCommand+F1で機能が起動します。
F1キー単体で起動したい場合は、「hs.hotkey.bind({“cmd”}, “F1”, function()」の部分を「hs.hotkey.bind({}, “F1”, function()」という風に書き換えて「Reload Config」。
Instant Hotspot未接続時に実行すると接続を開始。
Instant Hotspot接続中に実行すると切断を開始します。
Instant Hotspot本来の便利さに加え、キーボードからワンアクションで接続切断できるようになると、その便利さはひとしおです。
筆者は以下の記事の設定と組み合わせて使っており、外出時の通信のストレスが減って喜んでいます。