最近のmacOSでも使えるWifiネットワーク情報可視化ツールの作り方

こんにちは! カヤック技術部の川添です。今年春から技術担当の執行役員をしています。

この記事は、面白法人グループ Advent Calendar 2025の14日目の記事です。

今日は、最近のmacOSで利用可能なWifiネットワークの可視化ツールを作った話について紹介します。

Wifiネットワークの電波状況を調べたいこと、たまにありますよね?

カヤックでは、会社の文化共有のための制度として、全社員が集まり、一日「社長になった気分」で会社のことを考える「ぜんいん社長合宿」というイベントがあります。このイベントは2020年以前は宿泊ありの1泊2日イベントで行っていましたが、2025年現在は朝から夜までの日帰りイベントとして実施しています。

全社員が集まる、といってもカヤックの社屋には数百人が一度に集まれる場所がないため、基本的には鎌倉近郊か横浜付近のイベントに適した会場を借りて行う事が多いです。

これまでにいろいろな会場で実施してきましたが、会場提供のネットワークの品質が安定しないことがありイベントの運営に支障がでることがありました。そこで、近年では可能な場合は1ヶ月だけインターネット回線を契約して会社から無線のAPを持ち込み敷設するようにしています。

開催前には会場を下見して実際の広さや構造をチェックします。この時に、APを持ち込んでどこに設置するのが良いか、それぞれの周波数帯でどのチャンネルを使うかなどを調整しています。

この手の無線Wifi状況の確認をするときは、私はWindowsマシンを用意して電波状況を可視化するWifi Analyzerというアプリをインストールして持参してうろうろしながら確認していました。

ただ、普段会社で業務に利用しているのはMacBook AirとiPhoneなので、わざわざこのときだけWindowsマシンも持っていくという感じでちょっと手間だったり重かったりというのを感じていました。AndroidだとちゃんとWiFi analyzer (open-source)というアプリがありますが、あいにくiPhoneユーザなのでこれも使うことができません。

ちょうどいいのがないなら、作ってしまいましょう。

ということで、作ってみることにしました。古の記憶だと、macOSではAirportユーティリティに付属するコマンドを使えばWifiスキャンした結果をCLIで取得できたはずです。それをいい感じに加工してグラフ表示にし、Webブラウザで見れるようにしてあげればよさそうです。

最近のmacOSではWifiネットワーク情報の取得に制限がかかっている

ということでさっそく作ってみることにしましたが、airportコマンドを叩いてみるとなんか様子が変わっています。調べてみると、プライバシー対策やセキュリティ対策を理由にmacOS 14.4 Sonoma以降のバージョンではairportコマンドが非推奨となり、WifiのBSSIDリストを取得出来なくなってしまいました。

このコマンドは管理者権限なしで実行することができ、BSSID情報を取得できていました。これがプライバシー上懸念がある、ということのようです。たしかに周囲に飛んでいるWifiネットワーク情報を取得することで位置情報を大まかに特定できてしまいますからね。

  • macOS 14.3まで
$ airport -s
      SSID BSSID              RSSI CHANNEL HT CC SECURITY 
ExampleAP1 XX:XX:XX:XX:XX:XX  -40  36      Y  JP WPA3(SAE/AES/AES)
ExampleAP2 XX:XX:XX:XX:XX:XX  -33  6       Y  JP WPA3(SAE/AES/AES)
ExampleAP3 XX:XX:XX:XX:XX:XX  -55  1       Y  JP WPA(PSK/AES,TKIP/TKIP)
ExampleAP4 XX:XX:XX:XX:XX:XX  -62  11      Y  JP Open
ExampleAP5 XX:XX:XX:XX:XX:XX  -50  6       Y  JP WPA2(802.1X/AES/AES)
ExampleAP6 XX:XX:XX:XX:XX:XX  -70  1       N  JP Open
  • macOS 14.4以降
$ airport -s
WARNING: The airport command line tool is deprecated and will be removed in a future release.
For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.

ワイヤレス診断アプリかwdutilコマンドを使ってください、と出力されます。たしかにワイヤレス診断アプリを使って[ウィンドウ]メニューからスキャンを実行するとリスト形式のUIで表示することはできます。ただ、このデータを加工してグラフにするとかには向いていません。あと、wdutilコマンドも試してみましたがそのものズバリな出力を得ることはできませんでした。

airport -sが使えなくなってしまったので困ったな〜、直接Objective-C使ってAPI叩くしかないのかな〜と思い、macOSの開発者ドキュメントを読んでいくとCoreWLANフレームワークがあり、これを使うとWifiの情報を取得できそうです。

具体的にはCWInterfaceクラスscanForNetworksWithName:error:メソッドを使うと、周囲のWifiネットワークの情報を取得できます。

取得方法はわかりましたが、Objective-CやSwiftでサーバを書くのはちょっとな…と思い、ClaudeにmacOSの端末を使ってmacOS 14.4以降で電波情報を取得するのにCoreWLANフレームワーク使う必要ありそうだけど、どうやったら楽? と聞いてみたところところはmacOS標準のPython3にPyObjCを組み込んでCoreWLANフレームワークを呼び出しましょうということになりました。なにそれ便利そう!

Pythonまったく読み書きできない私ですが、今ならコーディングエージェントの助けも借りればどうにかなるはず、ということでさっそくClaude Codeにこんなの作りたいんだけど… とお願いしました。

  • Wifiの電波状況をリストとグラフで眺めたい
  • ローカルマシンのデバイスから取得した情報をWebブラウザで確認したい
  • macOSで、CoreWLANフレームワークをPyObjCを使って取得してほしい

というようなことを条件にして細かい所は適当にやらせてみると、Node.jsでサーバを作り、tailwindcssでフロントエンドを描き、APIが叩かれるとpython3コマンドを実行してmac上からみえる周囲のネットワークリストを取得してJSONで返す… というような構成で作ってくれました。

いきなりいい感じのが出来たので、かゆい所をいろいろ直していく

最初にできた状態でも最低減必要な要件が大体実装できていたので、欲がでて色々と気になるところを直しまくりました。

最初は台形みたいなグラフの形状になってましたが、(それが正確かどうかはさておき)世間でよく使われる無線のチャンネル表現だとサイクロイド曲線で出力されることが多いので、サイクロイドにしたり、40MHzとか80MHzなどの複数チャンネルを束ねて利用しているSSIDはそれに応じてグラフの幅と中心をオフセットしたりして、可視化のところを調整しました。

その他、リスト表示や電波表示に2.4GHz / 5GHz / 6GHz のタブを追加してみたり、一定間隔で画面を更新する自動更新モードをつけてみたり、現在接続中のやつがわかるようにしてみたり。

その後、先日のぜんいん社長合宿の会場下見に持っていって試してみると、とても使い勝手よく現地調査ができました。いやーこういうのもサクッと作れちゃう時代なんですね~

せっかく作ったので、リポジトリはpublicにしてあります。

今後の展望

今日の記事は、最新のmacOSでも使えるWifiネットワーク取得方法を調べて、可視化ツールをつくった話でした。

作ったあとに気付きましたが、この「ローカルサーバ立てる+REST API叩いたらコマンド実行してWifiネットワーク情報を取得して返す」という構成であれば、Pythonスクリプトの部分だけWindows版をつくって呼び出してやることでWindowsでも同じように使えるものができそうですね。プライベートではWindowsの民なので、今度やってみようと思います。

あと、localhost:3000をひらいてください! はエンジニアにはこれでいいでしょうけど、Electronとかでラッピングして単体の実行ファイルみたいにしたほうが使ってもらいやすそうですね。ただ、PyObjC入れる必要があるとか、1回管理者権限でスクリプトを実行する必要があるとかがあるので、インストール手順までは簡単にはできなさそうです。

ということで今日の記事はここまでです。明日は同僚デザイナーで、ともに人事マネージャーをやっている岩瀬が記事を書いてくれます。お楽しみに!

面白法人カヤックでは、「このくらいなら作れちゃうのでは?」というアイディアをすぐに実装して具体化しちゃうような人たちを募集しています!