iPhoneとMacBookとのテザリング時にiCloud同期によるパケット浪費を食い止める方法
価値ある情報をユーザー視点で発信するブログ
筆者は外出時、MacBookとiPhone 7 Plus、iPad Pro 9.7を持ち出すことが多いです。
それを持ってカフェなどで油を売るのですが、iCloudフォトライブラリを使い始めたこともあって、MacBookとiPhone 7 Plusをテザリングして使っていると、目を離したすきにiCloud関係でGB単位のパケットを浪費して、筆者の契約である月間のデータ通信容量6GBをやすやすと踏み越えてしまうことが多くなってきました。
外出時はどちらかというとiCloud関係の同期は止めておきたい。
iPad ProとiPhone 7 Plusでテザリングするときには省データモードを適用することができ、その組み合わせではパケットの浪費が起きないため、macOSにも同等の機能の存在を期待します。
しかし、実際にはそういう機能はmacOSにはないようです。
そこで対策を施しました。
もくじ
Mac App StoreにBandwith+(無料)というアプリがあり、これを使うと、インターフェースごとの通信量が把握できます。
ステータスバーに常駐し、常に通信量を把握できるので重要です。
彼を知り己を知れば百戦殆からず。
現在どれぐらいの通信が発生しているのかを知らずしてこの問題に対峙することは罷りなりません。
ちなみに、既にメニューバー上にたくさんアイコンがある場合、Commandキーを押しながらアイコンをドラッグ&ドロップすると右の方にずらせ、アプリケーションのメニュー項目に消されてしまうことを避けることができます。
見知らぬプロセスばかりで原因の特定に必ずしもつながるわけではありませんが、「/アプリケーション/ユーティリティ/アクティビティモニタ」の「ネットワーク」タブは、何というプロセスがどれぐらいの通信をしているかを確認することができます。
筆者はカフェで作業中にXcodeの自動アップデートがかかって、あわてて止めた経験があります。
外での作業が多いマシンは、自動アップデートも止めておく方がいいですね。
「システム環境設定>ソフトウェアアップデート>Macを自動的に最新の状態に保つ>詳細>新しいアップデートがある場合はダウンロード」のチェックボックスはオフに。
「/アプリケーション/App Store>環境設定…>自動アップデート」このチェックボックスもオフに。
「ミュージック.app>環境設定…>一般>自動ダウンロード」、「Podcasts>環境設定…>一般>エピソードを自動的にダウンロード」などもありますが、こちらは不用意な通信が発生することはほぼないのでそのままにしています。
macOSの「システム環境設定>セキュリティとプライバシー>ファイアウォール」は認証されていないアプリケーション、プログラム、サービスへの外部からの接続を受け入れないように設定可能で、これを使うとiCloud Drive、iCloudフォトライブラリの同期を阻止可能のようです。
iCloud関連のデータ転送を司っているのがnsurlsessiondというデーモンで、この活動を確認したら停止しにいくという対策があります。(本来はもっと機械的にやります)
nsurlsessiondの所在は下記の通りです。
外出中はnsurlsessiondの活動を完璧に停止させるために一時的に実行権限を剥奪する手を考えましたが、macOS Catalinaでは/usr/libexec/は読み出し専用の領域であるため、それが簡単にはいきませんでした。
これでどうやらiCloud関係の同期が止まるようです。
テザリング中だけファイアウォールをオンにし、自宅に帰ってきたらファイアウォールをオフにすればよいわけですが、ファイアウォールの設定の所在の階層が「システム環境設定>セキュリティとプライバシー>ファイアウォール」と深く、これをいちいち起動するのが面倒。
実はこの設定パネルには固有のURLが割り当てられています。
これを何らかの方法で素早く開けるようにすれば、設定の手間が大分省かれます。
例えば、BetterTouchToolを使って、キーボードに割り当てるなどです。
以下をダウンロードし、BetterTouchToolの設定画面にドラッグ&ドロップするとF12キーでファイアウォールの設定が開けるようになります。
以下をダウンロードし、AlfredのWorkflow設定画面にドラッグ&ドロップし、ブランクになっているHotkeyにF12を登録すると、F12キーでファイアウォールの設定が開けるようになります。
URLを開くだけのAppleScriptアプリケーションも作成しました。初回だけ右クリック(Ctrl+クリック)から「開く」で起動します。
これをシンプルにDockに登録しておくのも便利かもしれません。
ファイアウォールの設定を切り替えようとするとパスワードを求められたりとスムーズにはいきません。
そこで、ファイアウォールの適用を全自動化するスクリプトを作成しました。
動作にはHammerspoonという自動化ソフトウェアが必要です。
ダウンロードはこちらからできます。
基本設定ができたところで、今度は今回の問題のための設定を追加します。
メニューバー上にあるHammerspoonのアイコンをクリックし「Console」を実行。
WiFiテザリングを開始したり、別のWiFiアクセスポイントに接続したりすると、Consoleに実行状況のログが流れてきます。
TETHERING_SSIDSに列記した接続先につながると自動的にファイアウォールがオンになり、それ以外の場合は、ファイアウォールが自動的にオフになるはずです。
ファイアウォールの動作状況を「システム環境設定>セキュリティとプライバシー>ファイアウォール」で確認する場合、いったんシステム環境設定を終了させないとファイアウォールのオン/オフ表示が反映されないのでご注意ください。