macOS: iPhoneとのUSBテザリングをオン/オフするショートカットの設定方法

こんにちは、hachi8833です。平日の通勤に電車で片道2時間かかっているので、車内での作業環境の快適化を長らく模索してきました。

結果、Macbook ProとiPhone(7)の間をUSBケーブルでつないでテザリングするのが今の所最も快適です。パケ死さえ除けば…

必要なもの

  • BetterTouchTool — ショートカット設定以外にもウィンドウサイズ修正やスクリーンショット撮影など非常に細やかな機能が満載です。
  • dark-mode — メニューバーを白黒反転してテザリング中であることを示すのに使っています。つなぎっぱなしを防ぐためです。
  • USBケーブル: iPhoneとMacbook Proの接続用。

設定&コード

今後のOSアップデートの影響を受けにくそうなシェルスクリプトにしました。

macOSのネットワークプロファイルを追加する

当初はmacOSのネットワーク設定をスクリプトでコントロールしようと躍起になってましたが、それよりもネットワークプロファイル複数作って切り替える方が断然楽でした。

  • USB-iPhone接続がオンのプロファイル(以下では「自動」と表示されていますが、スクリプトでは「Automatic」という名前でアクセスします) — デフォルト
  • USB-iPhone接続がオフのプロファイル(以下ではUSB_Tethering_offという名前) — これを追加しました

「自動」プロファイルは通常用の設定にし、それを複製してUSB_Tethering_offのプロファイルを作成してから「iPhone USB」という設定を削除しておきます。

dark-modeのインストール

Homebrewで以下を実行してインストールしました。npmでもインストールできるようです。

$ brew install dark-mode

テザリングをトグルするシェルスクリプト

BetterTouchToolからシェルスクリプトを呼び出す場合は、スクリプト内のパスを絶対パスにしておく必要があります。これに気づくのにちょっとかかりました。

#!/usr/bin/env bash
# -*- coding: utf-8 -*-

## iPhone USBへの接続をトグルする。BetterTouchToolの ⌘ + F10 から起動

# set -eux

LOCATION=`networksetup -getcurrentlocation`

if [ $LOCATION = "USB_tethering_off" ]
  then
  scselect Automatic
  echo "Connected to iPhone USB"
  /usr/local/bin/dark-mode on
else
  scselect USB_tethering_off
  echo "Disconnected from iPhone USB"
  /usr/local/bin/dark-mode off
fi

BetterTouchToolの設定

BetterTouchToolで「execute terminal command」を追加して適当なキーを割り当てます。

以下の設定を追加します。これも絶対パスにする必要がありました。

以上で快適な車内テザリングができるようになりました。

おまけ

おまけ1: Wi-Fiをトグルするシェルスクリプト

#!/usr/bin/env bash
# -*- coding: utf-8 -*-

## Wi-Fiをトグルする。BetterTouchToolの ⌘ + F9 から起動

set -eux

networkList="$(networksetup -listallhardwareports)"
wifiDEV="$(echo "$networkList" |grep -E '(Wi-Fi|AirPort)' -A 1 | grep -o "en[0-9]")"

# switch wi-fi
if [ -n $wifiDEV ]
  then
  wifiST="$(networksetup -getairportpower $wifiDEV)"
  [[ $wifiST == *On ]] && val=Off || val=On
  networksetup -setairportpower $wifiDEV $val && exit 0
fi

おまけ2: Bluetoothをトグルするシェルスクリプト

これを使うにはblueutilのインストールが必要です。


#!/usr/bin/env bash # -*- coding: utf-8 -*- ## Bluetoothの接続をトグルする。BetterTouchToolの ⌘ + F8 から起動 # set -eux BLUEUTIL='/Users/hachi8833/bin/blueutil' STATUS=`$BLUEUTIL status` if [[ $STATUS = 'Status: off' ]] then $BLUEUTIL on echo "Bluetooth: on" else $BLUEUTIL off echo "Bluetooth: off" fi

関連記事

macOSのアップデート失敗後にダウンロード前の状態に戻す

Mac: homebrew caskを一括アップデートできるhomebrew-cask-upgrade

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ