「Wi-Fiが繋がりにくい」という申告が上がってくる。現場を歩いて確認すると確かに電波が弱いエリアがある。ではAPをどこに追加すれば解決するのか——感覚と経験だけで決めるのは心もとないし、Ekahauのような本格的なサイトサーベイツールはライセンス料だけで数十万円かかる。1〜3人で情シスを回している中小企業では、そこまでの予算が下りることはまずない。
本記事では、追加インストール不要でWindows 10/11上で動作するオープンソースのWi-Fiサイトサーベイツール「SiteSurveyTool」を使って、フロアマップ上に電波計測結果をヒートマップ表示するまでの手順を解説する。Ping・スループット・VoIP品質の3モードを備えており、AP配置の検討や電波弱点の特定に実用的に使える。
なぜ専用ツールが買えないのか
Wi-Fiサイトサーベイの専用ツール市場は大きく二極化している。
| ツール | 価格帯 | 主な問題 |
|---|---|---|
| Ekahau Site Survey | 数十万円/年(ライセンス) | 中小企業には予算が通らない |
| NetSpot(無料版) | 無料 | フロアマップへのピン設置・ヒートマップが有料版のみ |
| WiFi Analyzer(Android) | 無料 | スマートフォン限定・フロアマップ機能なし |
| SiteSurveyTool | 無料(OSS) | Windows専用・単一ユーザー利用 |
「フロアマップ上に計測ポイントを設置してヒートマップ化する」という基本機能を無償で使えるツールは選択肢が限られる。SiteSurveyToolはその空白を埋めるために作られた実用ツールだ。
SiteSurveyToolとは
SiteSurveyToolは、Windows PCでZIPを解凍してStart.batをダブルクリックするだけで起動するWi-Fiサイトサーベイツールだ。バックエンドはPowerShell 5.1のSystem.Net.HttpListenerによる自前HTTPサーバー、フロントエンドはVanilla JS + Chart.jsで構成されており、Node.jsもPythonも不要。標準ブラウザ(Edge / Chrome等)がUIとなる。
主な機能は以下のとおりだ。
- PNG/JPGのフロアマップ画像またはグリッドエディタで作成した間取りへのピン設置
- Ping計測(デフォルトゲートウェイ+外部IP宛RTT・パケットロス)
- スループット計測(HTTPダウンロードによる下り速度)
- VoIP/ビデオ会議品質計測(連続Pingによるジッター算出・簡易E-modelによるMOS値推定)
- 信号強度・Ping・ジッターの3種類のIDWヒートマップ表示
- PNG・CSV・PDF形式でのエクスポート
- Wi-Fi情報のリアルタイム自動取得(SSID・BSSID・信号強度・チャネル・無線規格・リンク速度)
🐝 IroHive メモ
データはJSONファイルとしてdata/projects/以下にローカル保存される。データベース不要。複数プロジェクトを切り替えて管理でき、計測履歴はピンごとに蓄積される。
動作要件と入手方法
動作要件
- OS: Windows 10 / 11(macOS・Linuxは非対応。
netsh・System.Net.NetworkInformation.Ping等のWindows API依存のため) - PowerShell: 5.1以上(Windows標準搭載)
- ブラウザ: Edge / Chrome / Firefox 等の標準ブラウザ
- Wi-Fiアダプタ: 内蔵または外付けの無線LANアダプタ(有線LANのみの環境ではWi-Fi情報取得不可)
入手方法
- IroHive ToolsページからZIPをダウンロード(直接ダウンロード)
- 任意のフォルダに解凍する(例:
C:\Tools\SiteSurveyTool) - 解凍したフォルダ内の
Start.batをダブルクリックして起動
✅ インストール作業ゼロ ZIPを解凍してStart.batを実行するだけ。管理者権限も不要(ただし、PowerShell実行ポリシーによっては後述の対処が必要)。
Wi-Fiサイトサーベイツール
本記事で解説しているツールの配布版。ZIPを解凍してStart.batをダブルクリックするだけで動作します。
起動から計測までの手順
① 起動
Start.batをダブルクリックすると、PowerShellサーバーが別ウィンドウ(最小化)で起動し、標準ブラウザでhttp://localhost:8080/が自動的に開く。サーバーの準備完了を確認してからブラウザを起動するため、最大20秒のポーリングが走る。
終了時はStop.batを実行する。Start.batウィンドウを閉じてもサーバープロセスは残り続けるため、必ずStop.batで停止すること。
② プロジェクト作成
- ヘッダーの「+ 新規プロジェクト」をクリック
- プロジェクト名を入力(例:
本社2Fオフィス_2026-07) - プロジェクト設定でPingターゲットIP(デフォルト:
8.8.8.8)とスループット計測URL(デフォルト:http://speed.cloudflare.com/__down?bytes=10000000)を確認・変更する
🐝 Pingターゲットの選び方
社内環境のみ計測したい場合はデフォルトゲートウェイのIPを指定する。インターネット経路も含めて確認したい場合は8.8.8.8(Google DNS)のままでよい。
③ フロアマップの準備
- 「+ フロア追加」でフロアを作成
- マップ方式を選択:画像読み込み(PNG/JPGのフロアマップ画像。CAD出力PDFをPNG変換したものが最も使いやすい)またはグリッドエディタ(ブラウザ上で間取りを手描き)
④ ピン設置と計測
- サイドバーの「📍 ピン設置モード」を有効にする
- 計測したい場所(APの真下・電波が弱い疑いのある場所・各部屋の中央など)をマップ上でクリック
- ラベル(例:
会議室A中央)と計測モードを指定して「計測開始」 - 計測が自動実行され、結果がピンに蓄積される(同じピンで複数回計測を繰り返して平均を取ることも可能)
3つの計測モード詳解
Pingモード
デフォルトゲートウェイと指定IPへのRTT(ラウンドトリップタイム)・パケットロス率を計測する。System.Net.NetworkInformation.Pingを使用するため、icmp.exeは不要だ。
確認できる値:
- RTT最小値・平均値・最大値 (ms)
- パケットロス率 (%)
判断基準の目安: 平均RTTが20ms以下かつロス率0%なら問題なし。RTTが50msを超え始めたらAPとの距離が遠いか干渉が疑われる。
スループットモード
System.Net.Http.HttpClientを使ってHTTPダウンロード計測を行い、下り速度(Mbps)を算出する。デフォルトの計測URLは10MBのファイルを返すCloudflareのエンドポイントだ。
🐝 社内環境で計測する場合
インターネット回線の速度ではなく「Wi-Fiリンクの実効スループット」を計測したい場合は、社内サーバーに大きめのダミーファイルを置いてそのURLを指定する。http://<社内サーバーIP>/test100mb.bin のような形でよい。
VoIP/ビデオ会議品質モード
連続Ping(デフォルト20回、20ms間隔)でRTTのばらつきからジッターを算出し、ITU-T G.107 E-modelを簡易実装したMOS値(Mean Opinion Score)を推定する。テレワーク環境でTeamsやZoomの通話品質が問題になっているエリアを特定するのに有効だ。
MOS値の読み方
| MOS値 | 品質 | 判断 |
|---|---|---|
| 4.3〜4.5 | 優良(Excellent) | 通話品質に不満なし |
| 3.6〜4.2 | 良好(Good) | ほとんどのユーザーが満足できる最低ライン |
| 2.6〜3.5 | 普通(Fair) | 聞き取れるが改善の余地あり |
| 1.0〜2.5 | 不良(Poor) | VoIPには不適。APの追加・再配置を検討 |
※ MOS値は連続Pingによる簡易推定値であり、実際のVoIPコーデック品質とは異なる場合がある。傾向把握・エリア比較を目的として使用すること。
推定アルゴリズムの概要
ツールが内部で行っている計算は以下の通りだ(server/Server.ps1 のInvoke-VoipTest関数)。
- 片道遅延を概算:
latency = avgRTT / 2 - 有効遅延を算出:
effectiveLatency = latency + jitter × 2 + 10 - 遅延劣化係数 Id を計算:
effectiveLatency < 160ms→Id = effectiveLatency / 40/effectiveLatency ≥ 160ms→Id = (effectiveLatency - 120) / 10 - パケットロス劣化係数:
Ie = lossPercent × 2.5(G.711相当) - R値を算出:
R = 93.2 - Id - Ie - MOSへ変換:
MOS = 1 + 0.035R + R(R-60)(100-R) × 7×10⁻⁶
概念は本物のE-modelに基づいており、大まかな傾向を掴むには十分な精度だ。「この会議室だけMOSが2台」という発見ができれば、APの追加・再配置の根拠として使える。
ヒートマップの読み方
ピンを3点以上設置すると、ヒートマップ表示セレクタで以下の3種類の分布を切り替えられる。
- 信号強度(dBm): APの電波到達範囲と強度分布
- Ping遅延(ms): RTTの地理的分布
- ジッター(ms): VoIP品質劣化エリアの可視化
IDW補間とは
ヒートマップはピン設置点の間をIDW(Inverse Distance Weighting:逆距離加重補間)で補間して滑らかなグラデーションを生成する。計測点から遠い場所ほど、近傍の複数ピンの値を距離に反比例した重みで平均した値が使われる仕組みだ。
🐝 ピン数と精度の関係 IDW補間は計測点が少ないと「それっぽく見えるだけ」になる。目安は10m四方に1ピン以上。廊下の折れ曲がりや壁の向こう側は電波の遮蔽を補間が考慮しないため、仕切りのある空間では壁の前後に必ずピンを設置すること。
結果のエクスポート
計測が完了したらサイドバーのエクスポートボタンから出力できる。
| 形式 | 内容 | 用途 |
|---|---|---|
| PNG | ヒートマップ画像(Canvasのスクリーンショット合成) | 報告書への貼り付け |
| CSV | 全ピンの計測データ(BOM付きUTF-8) | Excelで詳細分析 |
| PDF/印刷 | ブラウザの印刷機能(window.print())を使った帳票レイアウト | 紙での報告 |
CSVはBOM付きUTF-8のため、Excelで直接開いても文字化けしない。ダウンロード後にピボットテーブルでフロアごと・モードごとに集計するのが効率的だ。
設計判断:なぜPowerShellにしたのか
「なぜNode.jsやPythonではなくPowerShellなのか」は、このツールを評価する上で重要な判断基準だ。
| 観点 | PowerShell 5.1 | Node.js / Python |
|---|---|---|
| インストール | Windows標準搭載。追加不要 | 別途インストールが必要。企業PCでは管理者権限が必要なケースが多い |
| Wi-Fi情報取得 | netsh wlan show interfacesの出力をパースするだけ | 外部モジュールか管理者権限付きの呼び出しが必要 |
| Ping計測 | System.Net.NetworkInformation.Pingが.NETに標準搭載 | OSコマンド呼び出し or ライブラリが必要 |
| 配布のしやすさ | ZIPを解凍して実行するだけ | 依存パッケージ(node_modules / pip)の同梱が煩雑 |
「情シスが使うツール」として最も重要なのは導入の摩擦をゼロにすることだ。PowerShellを選んだことでランタイムインストール不要・依存パッケージなし・セキュリティ部門への申請なしで使えるツールが実現している。
トラブルシュート
① PowerShell実行ポリシーでブロックされる
企業PCではExecutionPolicyがRestrictedまたはAllSignedに設定されており、Start.batを実行しても何も起きない(またはエラーで終了する)ことがある。
Start.batは内部で以下のオプションを付けてPowerShellを呼び出しているため、通常はポリシーに関わらず起動する。
powershell -NoProfile -ExecutionPolicy Bypass -File “%SCRIPT_DIR%server\Server.ps1”
それでもブロックされる場合は、セキュリティ部門に-ExecutionPolicy Bypassでの実行許可を確認するか、スクリプトに署名を付ける対応が必要になる。
② Wi-Fi情報が文字化けする・取得できない
netsh wlan show interfacesの出力はWindowsのロケール設定に従って文字コードが決まる。日本語Windowsでは出力がShift_JISになるため、PowerShell側でUTF-8として読み取ろうとすると文字化けが発生する。
SiteSurveyToolは日本語版・英語版Windowsの両方に対応した正規表現パースを実装済みだが、UI上でWi-Fi情報が空欄または文字化けして表示される場合は以下を確認する。
- PCがWi-Fiに接続されているか(有線のみだと
netsh出力に情報が出ない) - その他の言語OSを使用している場合は
server/Server.ps1内のGet-WifiInfo関数のパターンを調整する必要がある
🐝 診断コマンド
PowerShellを開いて以下を実行し、出力が正常に読めるか確認する。
netsh wlan show interfaces
文字化けしている場合はコンソールの文字コードを合わせる: [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(932)
③ ポート8080が競合して起動しない
他のアプリがポート8080を使用していると、サーバーが起動してもすぐに終了する。使用プロセスを確認するには以下を実行する。
netstat -ano | findstr :8080
出力されたPIDのプロセスを終了させるか、Start.batのPORT変数を変更して別のポートを使用する。
rem Start.bat の先頭付近
set “PORT=8081”
④ ブラウザが自動で開かない
Start.batはサーバーの起動確認後にstart "" “http://localhost:8080/“でブラウザを起動する。起動確認がタイムアウト(最大20秒)した場合でもブラウザ起動は試みるが、サーバーがまだ起動中の場合は「接続できない」エラーになる。数秒後に手動でURL(http://localhost:8080/)にアクセスすれば表示される。
⑤ スループット計測が失敗する
社内のプロキシサーバー経由でないとインターネットにアクセスできない環境では、デフォルトのhttp://speed.cloudflare.com/__down?bytes=10000000への直接接続が失敗する。この場合は社内サーバーにテスト用ファイルを置いてURLを変更するか、プロキシを経由するようServer.ps1のInvoke-ThroughputTest関数内でHttpClientHandlerにプロキシ設定を追加する必要がある。
🐝 開発者向け: System.Net.Http のアセンブリ問題
PowerShell 5.1上でSystem.Net.Http.HttpClientを使う際、環境によっては「型が見つからない」エラーが出ることがある。これはSystem.Net.Httpアセンブリが自動ロードされないケースがあるためだ。その場合はServer.ps1の冒頭に以下の行を追加する。
Add-Type -AssemblyName System.Net.Http
.NET Framework 4.5以降を搭載した通常のWindows 10/11では不要だが、GPOで.NETの一部機能を制限している環境では必要になることがある。
まとめ
SiteSurveyToolを使うことで、専用ソフトウェアなしに「フロアマップ上のどこで電波が弱いか・Pingが遅いか・VoIPが厳しいか」を可視化できる。意思決定に必要なのは感覚ではなく数値と地図だ。
- APの追加配置を提案するとき: 信号強度ヒートマップのPNGを報告書に貼る
- 「Teams会議の声が途切れる」という申告を受けたとき: VoIPモードでMOS値が低いエリアを特定する
- 新オフィスのAP配置設計をするとき: フロアプランを読み込んでピンを格子状に置き、計測結果を根拠にベンダーに仕様を伝える
インストール作業がゼロなのは「とりあえず試してみる」ハードルを下げる。申請を出す前に自分のPCで動かして、使えると判断してから展開を考えればよい。
✅ 今すぐ試す
ZIPをダウンロード → 解凍 → Start.batをダブルクリック。これだけで動く。
site-survey-tool-v1.zip をダウンロード