iBeaconは、AppleのBluetooth Low Energyビーコン向けプロプライエタリプロトコルであり、iOSデバイスが屋内でセンチメートル単位の精度で位置を特定できるようにします。このプロトコルは、UUID、Major、Minor値を含む一意の識別子を持つBLEパケットのブロードキャストに基づいています。Apple iBeacon Design Guidelines(2025)によると、この技術はショッピングモール、博物館、空港、スタジアムでのナビゲーションに使用され、デバイスのアクティブペアリングなしでパッシブ検出をサポートします。
重要ポイント
iBeaconは、Appleが開発しWWDC 2013で発表された屋内測位技術です。建物内で動作しないGPSとは異なり、iBeaconはBluetooth Low Energyビーコンを使用します。これは、固定識別パケットを送信する小型バッテリ駆動デバイスです。iOSおよびAndroidデバイスはこれらのパケットを受信し、信号レベル(RSSI)に基づいてビーコンまでのおおよその距離を計算します。
iBeaconプロトコルは、Appleが2013年にiOS 7でリリースした最初の大規模BLEビーコン標準となりました。当初、この技術は小売業で使用されました。Apple Storeは、特定ゾーンに入った顧客に割引情報を提供するためにiBeaconを導入しました。2025年までに、iBeaconインフラストラクチャは世界中に数百万の設置ビーコンを数えていますが、GoogleのEddystoneやオープンソースのAltBeaconなどの代替プロトコルも登場しています。
iBeaconは5つの主要シナリオで使用されます:屋内ナビゲーション(ショッピングモール、空港、博物館)、コンテキスト通知(店舗入店時の割引)、ワークフロー自動化(プレゼンスマーキング)、物流と倉庫管理、およびオブジェクトに近づくと自動的にコンテンツを再生する観光ガイド。ABI Research(2025)によると、BLEビーコン市場は32億台の稼働デバイスと推定されています。
iBeaconパケットは、2402、2426、2480 MHzのBLEアドバタイジングチャネルで送信されるAdvertising PDU(プロトコルデータユニット)です。パケットフォーマットは固定されており、Apple iBeaconプレフィックス(0x4C000215)、16バイトのUUID、2バイトのMajor、2バイトのMinor、および距離較正用の1バイトのTX Powerの4つのフィールドで構成されます。総データサイズは30バイトで、1つのBLE Advertising PDUに収まります。
| フィールド | サイズ | 説明 |
|---|---|---|
| Appleプレフィックス | 9バイト | Company ID(0x004C)+ iBeacon type(0x0215) |
| UUID | 16バイト | 組織またはアプリケーションの一意識別子 |
| Major | 2バイト | ゾーン識別子(0-65535)、例:店舗番号 |
| Minor | 2バイト | ポイント識別子(0-65535)、例:棚番号 |
| TX Power | 1バイト | 1メートル距離での較正信号強度(dBm) |
iBeacon識別子は3レベルの階層を形成します。UUIDは組織(例:店舗チェーン)に割り当てられ、Majorは特定の店舗またはフロアに、Minorはゾーン内の特定ポイント(レジエリア、商品部門)に割り当てられます。この階層により、アプリは異なるコンテキストレベルに柔軟に反応できます。店舗に入ると(UUID + Major)アプリはフロアマップを読み込み、特定の部門に近づくと(Minor)商品情報を表示できます。
TX Powerフィールドは、ビーコンから1メートル距離での信号レベル(RSSI)の基準値です。パケットを受信すると、デバイスは実際のRSSIを記録し、次の式で距離を計算します:distance = 10^((TX_Power - RSSI) / (10 * n))。ここでnは媒体の減衰係数(通常2-4)です。測位精度にはTX Powerの正しい較正が重要で、1 dBmの誤差は5メートル距離で最大30%の誤差を生じます。
iOSはビーコンまでの計算距離に基づいて3つの近接ゾーンを定義します:Immediate(0.5メートル未満)、Near(0.5〜3メートル)、Far(条件に応じて3〜30〜50メートル)。正確な距離は通知されず、カテゴリのみが提供されます。これは意図的なもので、RSSIは干渉、信号反射、人体の影響を受けやすいため、カテゴリはより安定した位置特定を提供します。
Immediateは、デバイスがビーコンから数センチメートル以内にある直接接触ゾーンです。最大精度が必要なシナリオ(端末決済、デジタルロック解除、チェックポイント認証)で使用されます。Immediateゾーンでは、RSSIは通常-30〜-60 dBmです。
NearゾーンはiBeaconの主要な動作範囲で、0.5〜3メートルの距離をカバーします。屋内ナビゲーションに使用されます。たとえば、商品の陳列棚に近づくとアプリが詳細情報を表示します。Nearゾーンでは、TX Power = -59 dBmの較正でRSSIは-60〜-80 dBmの範囲で変動します。
Farはビーコン信号検出の最大ゾーンです。リージョンへの入場モニタリング(例:ショッピングモールへの入場)に使用されます。Far距離ではRSSIは通常-80 dBmより弱く、距離決定の精度は大幅に低下します。入場モニタリングには、正確なゾーン決定ではなく、システムAPIのregion monitoringが使用されます。
iBeaconリージョンは、UUID(およびオプションでMajor + Minor)によって定義される仮想エリアです。iOSはCLLocationManagerを使用して最大20のリージョンを同時にモニタリングできます。リージョンに入ると、システムはバックグラウンドまたは終了状態でもアプリを起動し、delegate locationManager:didEnterRegionを介して通知を送信します。リージョンを出ると、locationManager:didExitRegionが呼び出されます。
import CoreLocation
let locationManager = CLLocationManager()
let region = CLBeaconRegion(
uuid: UUID(uuidString: "E2C56DB5-DFFB-48D2-B060-D0F5A71096E0")!,
identifier: "myBeaconRegion"
)
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.startMonitoring(for: region)
ゾーン(Immediate、Near、Far)を決定するには、ranging — リアルタイムのビー呼び出しスキャンを使用します。モニタリングとは異なり、rangingはアプリのアクティブモードでのみ機能し、位置情報へのアクセス許可が必要です。locationManager:didRangeBeacons:inRegionメソッドは、proximity(CLProximity.immediate、.near、.far、.unknown)、accuracy(メートル単位の較正距離)、rssiのフィールドを持つCLBeaconの配列を返します。
func locationManager(
_ manager: CLLocationManager,
didRangeBeacons beacons: [CLBeacon],
in region: CLBeaconRegion
) {
for beacon in beacons {
switch beacon.proximity {
case .immediate:
print("すぐ近く")
case .near:
print("近く")
case .far:
print("遠く")
default:
print("不明な近接状態")
}
}
}
AndroidにはiBeaconのネイティブサポートはありません。これはプロトコルがAppleのプロプライエタリソリューションだからです。ただし、Radius Networks(現在はOpen Beacon組織の一部)のAltBeaconなどのサードパーティライブラリを使用することで、開発者はAndroidアプリにiBeaconを統合できます。AltBeaconライブラリは、BLEパケットスキャン、iBeaconフォーマットのパース、iOS APIと同様のrangingとリージョンモニタリングのエミュレーションを実装しています。
val beaconManager = BeaconManager.getInstanceForApplication(context)
beaconManager.beaconParsers.add(
BeaconParser().setBeaconLayout(
"m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"
)
)
beaconManager.backgroundBetweenScanPeriod = 5000
beaconManager.foregroundScanPeriod = 1100
beaconManager.bind(this)
AltBeaconライブラリでのiBeaconパースフォーマットは、layout文字列で定義されます:“m:2-3=0215” — iBeaconマーカーの2バイトチェック、“i:4-19” — 16バイトUUID、“i:20-21” — Major、“i:22-23” — Minor、“p:24-24” — TX Power。同じフォーマットがEddystoneや他のプロトコルでもサポートされており、AltBeaconはAndroidでBLEビーコンを扱うための汎用ライブラリとなっています。
AndroidでのiBeacon作業には3つの主要な制限があります:バックグラウンドスキャンはメーカーによって制限され(Xiaomi、Huawei、Samsungは頻繁にバックグラウンドプロセスを強制終了する)、BLEスタックの違いによりRSSI精度がiOSより低く、Android 6.0以降はACCESS_FINE_LOCATION、Android 12以降はBLUETOOTH_SCANの許可が必要です。
Eddystoneは、2015年に発表されたGoogleのオープンBLEビーコンプロトコルです。iBeaconとは異なり、Eddystoneは4種類のパケットをサポートします:Eddystone-UID(固定識別子)、Eddystone-URL(Physical Web用URL送信)、Eddystone-TLM(ビーコンテレメトリ — バッテリ残量、温度)、Eddystone-EID(クローン対策用暗号化識別子)。Googleは2022年にPhysical Webの開発を中止しましたが、Eddystoneプロトコルは企業ソリューションで引き続き使用されています。
| パラメータ | iBeacon | Eddystone |
|---|---|---|
| 所有者 | Apple | Google(オープン) |
| パケットタイプ | 1(UID) | 4(UID、URL、TLM、EID) |
| データ | UUID+Major+Minor | ID/URL + テレメトリ |
| ネイティブiOSサポート | はい(CoreLocation) | いいえ(CoreBluetooth経由) |
| Physical Web | いいえ | はい(Eddystone-URL) |
| セキュリティ | 暗号化なし | キーローテーション付きEID |
iBeaconとEddystoneの選択は、ターゲットプラットフォームと使用シナリオに依存します。iBeaconは、CoreLocationとのネイティブ統合とバックグラウンドでのリージョンモニタリングにより、iOSアプリに適しています。Eddystoneは、Android向けプロジェクトや、ビーコンがアプリインストールなしでURLを送信するPhysical Webシナリオに適しています。クロスプラットフォームプロジェクトでは、両方のプロトコルをサポートするAltBeaconがよく使用されます。
iBeaconを実装する際、開発者はアーキテクチャ設計段階で考慮すべきいくつかの制限に直面します。これらの要因を誤って評価すると、ナビゲーションの不安定な動作、誤トリガー、ビーコンのバッテリが予想より早く消耗することにつながります。
信号レベルRSSIは、壁での反射、金属構造物、人の存在、2.4GHz帯の他のワイヤレスデバイスにより、大きな変動を受けます。屋内では、同じビーコンのRSSI変動が1分間に10〜15 dBmに達することがあり、フィルタ(移動平均、カルマンフィルタ)を使用しないと距離計算が不正確になります。
iOSはアプリごとに最大20リージョンの同時モニタリングをサポートします。広いエリア(空港、スタジアム)のカバレッジが必要なプロジェクトでは、これでは不十分です。解決策は動的リージョンスイッチングを使用することです。あるリージョンに入ると、隣接リージョンがアクティブになり、遠隔リージョンは非アクティブになります。
リージョンに入ってから通知を受信するまでの遅延は、条件に応じて1〜30秒の範囲になります。iOSはバッテリ節約のため定期的にビーコンをスキャンするため、即時応答は期待できません。時間に敏感なシナリオ(ドアに近づくと開く)では、Immediate rangingの使用が推奨されますが、アプリのアクティブモードでのみ機能します。
よくある質問
iBeaconは、AppleのBluetooth Low Energyビーコン向けプロトコルであり、iOSおよびAndroidデバイスが送信されたBLEパケットの信号レベル(RSSI)分析に基づいて、屋内でセンチメートル単位の精度で位置を特定できるようにします。
Bluetoothは、デバイス間のデータ転送用の一般的なワイヤレス通信プロトコルであり、ペアリングが必要です。iBeaconは、BLE上の特殊なプロトコルで、接続を確立せずに識別子のブロードキャスト送信のみを目的としています。iBeaconビーコンはデータを送信せず、自身の存在のみを知らせます。
iBeaconはAdvertisingモードで動作します。ビーコンはID情報を含むブロードキャストBLEパケットを継続的に送信します。デバイスはパケットを受信しますが、ビーコンに接続しません。これにより、ビーコンのバッテリを節約し(CR2032で最大2〜3年)、アクティブスキャンなしでパッシブにビーコンを検出できます。
いいえ、iBeaconはデバイス検出用に設計されていません。iBeaconビーコンは固定送信機であり、iPhoneは受信機として機能します。iPhoneはiBeacon信号を送信しません(Find My機能を除く。これはBLEベースの別のプロトコルを使用します)。電話を見つけるには、他の技術(Find Myネットワーク、UWB)が使用されます。
iBeaconの範囲はビーコンの設定と環境条件に依存します。一般的な範囲:Immediate — 最大0.5m、Near — 最大3m、Far — 最大30〜50m。信号増幅器付きビーコンとオープンスペースでは、範囲は70mに達する可能性がありますが、その距離での距離決定精度は最小限です。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。