Umi Uyuraのブログ

プログラミング関連の作業ログ

MacのWi-Fi切→入するだけのツールを作った

MacWi-Fiは不安定という話をよく聞きますが、自分が会社で使っているMacBook Proも、1日に数回くらい、突然Wi-Fi接続が切れたり、Wi-Fi自体はつながっているみたいだけど通信ができなくなったりすることがあります。

ネットワークの問題なのか、Mac側の問題なのか…インフラ担当の人も色々と手をつくしてくれているものの、なかなか改善されない状況です。

先日アップデートしたOS X Yosemite 10.10.4ではWi−Fi周りが改善されているという話でしたが、自分のところでは改善は見られず、相変わらず数時間おきくらいに、メニューバーのWi-Fiアイコンで切ったり入れたりしています。

f:id:umi-uyura:20150728234457p:plain

しかし、いい加減その動作も面倒くさくなってきたので、手軽にWi-Fiの切→入をするツールを作ってみることにしました。

シェルスクリプト

以下の記事で、Macのネットワーク設定をいじれる networksetup というコマンドを使うことで、Wi-FiのON/OFFもできることがわかりました。

コマンドラインからMac OS XのWi-Fiを無効化する - Qiita

というわけで、以下のようなシェルスクリプトを用意しておけば、コマンド一発でON/OFFできるようになりました。

wifireboot.sh

#!/bin/sh
networksetup -setairportpower Wi-Fi off && networksetup -setairportpower Wi-Fi on

デスクトップツール

同じフロアでMacBook系を使っている、エンジニアではない人たちも、同様の問題で困っていました。

自分の場合は普段からターミナルなりEmacsなりが起動しているので、上記のようなシェルスクリプトを実行すること自体はたいした手間ではないのですが、そういった人たちに黒い画面を立ち上げてコマンド打たせるというのは、正直難しいところです。

そこで、以前試したシェルスクリプトMacアプリ化した手法で、デスクトップツールを用意することにしました。

umi-uyura.hatenablog.com

このような感じのアプリ化スクリプトを用意して実行すれば、.appが生成されます。

make_wifirebooter.sh

#!/bin/sh

APPFILENAME="WiFiRebooter"
SHELLSCRIPT="wifireboot.sh"
ICONFILE="app.icns"

mkdir -p ${APPFILENAME}.app/Contents/{MacOS,Resources}
cat > ${APPFILENAME}.app/Contents/Info.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CFBundleDisplayName</key>
    <string>Wi-Fi Rebooter</string>
    <key>CFBundleExecutable</key>
    <string>${SHELLSCRIPT}</string>
    <key>CFBundleIconFile</key>
    <string>app.icns</string>
    <key>CFBundleName</key>
    <string>Wi-Fi Rebooter</string>
    <key>CFBundleShortVersionString</key>
    <string>Version 0.0.1</string>
    <key>CFBundleVersion</key>
    <string>0.0.1</string>
  </dict>
</plist>
EOF


cp ${SHELLSCRIPT} ${APPFILENAME}.app/Contents/MacOS/
cp ${ICONFILE} ${APPFILENAME}.app/Contents/Resources/

chmod +x ${APPFILENAME}.app/Contents/MacOS/${SHELLSCRIPT}

超適当ですが、判別しやすいようにアイコンも付けてみました。

f:id:umi-uyura:20150728234512p:plain

実行すると、シェルスクリプト版のコマンドを実行して終了するだけなので、このようにDockへ入れておけば、エンジニアではない人でも簡単に実行できるでしょう。

いちおうGitHubで保管。

umi-uyura/WiFiRebooter

MacWiFiが安定してくれれば、こんな手間もいらないんですが…。

MF885J/A iMac Retina 5Kディスプレイモデル(3300)

MF885J/A iMac Retina 5Kディスプレイモデル(3300)