ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

iPhoneとMacBookとのWiFiテザリング(Instant Hotspot)をキーボードから開始終了する方法

   

How to start and stop wifi tethering between iphone and macbook from the keyboard 00000

最近ブログ更新を再開してMacBookを持ち歩くことが多くなり、iPhoneとのテザリングを頻用するようになりました。

テザリングつなぎっぱなしではパケットの浪費があるため、iCloud同期の暴走を抑止する設定を施した上でマメに接続切断をしています。

しかし接続切断のメニュー操作がとても面倒なので、キーボードショートカット一発でiPhoneとのテザリングを接続切断できるようにしてみました。

便利だが普通と事情の違うInstant Hotspot

ちなみに、ただのWiFi接続ならコマンドラインから接続切断できます。

networksetup -setairportnetwork en0 WIFI_SSID WIFI_PASSWORD
networksetup -setairportpower Wi-Fi off

自動化ソフトウェアHammerspoonでは、以下のようにすることで接続切断が可能です。

hs.wifi.associate(network, passphrase[, interface])
hs.wifi.disassociate([interface])

ですから、BetterTouchToolAlfredHammerspoonを使ってキーボードショートカットに割り当てるのは難しくありません。

今回のケースで特別なのが、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が不調な場合は

ちなみに、Instant Hotspotは不調で使えないことが少なくありませんが、以下のような対策で復活させることが可能です。

ただし、iPhoneではiCloudからいったんログアウトするとWalletの中が空になり、iCloudに再ログインしても元通りにはなりません。

しかし追加したことのあるカードの情報自体は残っていて、セキュリティコードの入力をすれば、カメラを使った登録手順を再度踏まずともクレジットカードが復活できます。

Suicaはセキュリティコードの入力の必要はありませんが(そもそもそんなもの元からないですね)、1日経過しないと再登録できない点に注意が必要です。

ワンタッチInstant Hotspot設定方法

結論から言うと、Mac自身にInstant Hotspotのためのメニュー操作を肩代わりさせるという手法で接続切断操作の簡易化を実現しました。

AppleScriptによるUI Scriptingです。

ダウンロード: ToggleInstantHotspot_0.1.zip

中に四つのファイルが入っています。

ファイル名
Alfred_ToggleInstantHotspot.alfredworkflow Alfred登録用
BTT_ToggleInstantHotspot.textClipping BetterTouchTool登録用
ToggleInstantHotspot.app そのまま実行用(実行形式のAppleScript)
source/ToggleInstantHotspot.scpt 生のAppleScript(参考用)

いずれか都合のいいものを使ってください。

そのまま実行用(実行形式のAppleScript)の設定方法

初回は右クリックから「開く」で実行してください。

権限が足りず実行できないので、「セキュリティとプライバシー>プライバシー>アクセシビリティ」とたどった上で、ウインドウ左下の鍵アイコンをクリック。

How to start and stop wifi tethering between iphone and macbook from the keyboard 00001

パスワードを入力して「下のアプリケーションにコンピュータの制御を許可。」の中にリストアップされている「ToggleInstantHotspot」のチェックボックスをオンにしてください。

BetterTouchTool登録用の設定方法

BetterTouchToolの「設定」を開き、「すべてのアプリ」の「キーボードショートカット」を選択。

下掲の画像が示す列に「BTT_ToggleInstantHotspot.textClipping」をドラッグ&ドロップします。

How to start and stop wifi tethering between iphone and macbook from the keyboard 00002

以降、F1キーでInstant Hotspotの接続切断ができるようになるはずです。

Alfred登録用の設定方法

Alfredの「Preferences…」を開き、「Workflows」を選択。

左のペインに「Alfred_ToggleInstantHotspot.alfredworkflow」をドラッグ&ドロップして登録。

このままではHotkeyが割り当てられていないので、何らか割り当てます。

How to start and stop wifi tethering between iphone and macbook from the keyboard 00003

Hammerspoon用の設定

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本来の便利さに加え、キーボードからワンアクションで接続切断できるようになると、その便利さはひとしおです。

筆者は以下の記事の設定と組み合わせて使っており、外出時の通信のストレスが減って喜んでいます。

 - iOS, iPhone, Mac