Significant Location Change – それは何か、トリガーと動作メカニズム

著者: IT Sectr 公開日: 2026-03-28 読了時間: 10 分

Significant Location Change(SLC)は、デバイスの大まかな移動を監視するiOSサービスで、地理座標の大幅な変更があった場合のみアプリケーションに通知します。リアルタイムのGPSトラッキングとは異なり、SLCは位置特定に携帯電話基地局を使用するため、最小限のエネルギー消費で済みます。ドキュメントによるとApple Developer, 2025Significant Location Changeは、GPSを常時動作させることなくアプリケーションが位置情報の更新を取得できるようにし、継続的なトラッキングと比較して最大90%のバッテリー節約を実現します。

重要なポイント

  • SLC — 携帯電話基地局に基づく位置の重要な変化の監視
  • エネルギー消費 — 継続的なGPSトラッキングと比較して最大90%のバッテリー節約
  • トリガー — 基地局の変更、クラスター境界の越境、GPSの起動
  • 制限事項 — 最小更新距離約500メートル、精度は最大1キロメートル
  • iOS 13+ — Always許可とバックグラウンド起動の制限が追加

Significant Location Changeとは

Significant Location Change(SLC)は、Core Locationフレームワークに組み込まれたiOSのエネルギー効率の高い位置情報サービスです。GPSモジュールを常時使用せずにユーザーの大まかな移動を追跡する必要があるアプリケーション向けに設計されています。SLCは携帯電話基地局間の切り替え時に自動的にアクティブになり、CLLocationManagerDelegateデリゲートを介してdidUpdateLocationsメソッドでアプリケーションに通知します。

GPSレベルのトラッキング(標準のstartUpdatingLocation)とは異なり、SLCはプロセッサとGPSチップの継続的な動作を必要としません。iOSはおおよその位置を特定するために携帯電話基地局からの信号を使用し、座標に大きな差がある場合のみアプリケーションを起動します。これにより、アプリケーションは更新の間に「スリープ」状態になり、最小限のエネルギーしか消費しません。

SLCはiOS 5以降、携帯電話モジュールを搭載したすべてのデバイスで利用可能です。iPod TouchおよびiPad Wi-Fiモデルでは、位置座標の特定に携帯電話基地局を使用するため、このサービスは利用できません。Core Locationは、どのイベントを重要とみなすかを自動的に決定します。開発者はSLCの感度を調整したり、トリガーの最小距離を指定したりすることはできません。

SLCが適しているアプリケーション

SLCは、高い位置精度を必要としないアプリケーションに最適です:天気トラッカー、配信サービス、近くのオブジェクトを検索するアプリケーション、訪れた場所の分析など。SLCはiOSシステムによってジオフェンシング(Geofencing)を省電力モードでアクティブにするためにも使用されます。ナビゲーションアプリケーションには、より正確なGPSトラッキングが必要です。

Significant Location Changeの仕組み

Significant Location Changeは、デバイスがネットワークに接続する際に取得する携帯電話基地局識別子(Cell ID)の分析に基づいて動作します。iOSはGPSを起動しなくても基地局座標のデータベースを維持し、おおよその位置を特定できます。デバイスが新しい基地局に切り替わると、システムは新しい位置と以前の位置を比較し、差が重要であれば、イベントを処理するためにアプリケーションを起動します。

システムはクラスターアプローチを使用します:地理的空間は特定の半径のクラスターに分割されます。SLCはクラスターの境界を越えた場合にのみイベントを生成し、その内部での微細な移動ごとには生成しません。これにより、同じカバレッジゾーン内(建物や地域内など)を移動する際のアプリケーションコールの急増を防ぎます。精度は、携帯電話基地局の密度に応じて500メートルから数キロメートルまで異なります。

iOSが重要な変化を検出すると、アプリケーションをバックグラウンド状態から起動し(実行中の場合)、イベントをCore Locationデリゲートに送信します。アプリケーションは処理のための短い時間(バックグラウンド時間の約10〜30秒)を与えられます。この間に座標を処理し、必要に応じてGPSによるより正確な更新をスケジュールする必要があります。

バックグラウンドからのアプリケーション起動

SLCには、SuspendedまたはBackground状態からアプリケーションを起動する特権があります。メモリ不足によりアプリケーションがシステムによって強制終了された場合、SLCはそれをバックグラウンドで再起動します(relaunch)。そのためには、アプリケーションがdidFinishLaunchingWithOptionsメソッドでUIApplication.LaunchOptionsKey.locationにサインアップする必要があります。イベント処理後、システムはアプリケーションを再びSuspended状態に戻すことができます。

Significant Location Changeのトリガー

トリガーはiOSシステムによってのみ決定されます。開発者はプログラムでどの座標変更を「重要」とみなすかを制御できません。ただし、SLCが確実にイベントを生成する文書化されたシナリオがいくつか存在します。これらのトリガーを理解することは、開発者が適切なアプリケーション動作を設計するのに役立ちます。

携帯電話基地局の変更

Cell tower changeはSLCの主要なトリガーです。デバイスが携帯電話基地局間を切り替えるとき(都市部や高速道路での移動時)、システムは古い基地局と新しい基地局の間で座標が十分に変化したかどうかを確認します。変化していれば、イベントが生成されます。基地局ネットワークが密集した都市部では、SLCは1〜3キロメートルごとにトリガーされる可能性があります。

他のアプリケーションによるGPSの起動

他のアプリケーションやシステムサービス(「iPhoneを探す」、ナビゲーションなど)がGPSモジュールを起動した場合、SLCも正確な座標の更新を受け取ることができます。これは副次的な効果です:GPSが正確な位置を特定し、iOSがそれをSLCに登録されているすべてのアプリケーションに送信します。ただし、このトリガーに依存することはできません。保証されていません。

Wi-Fiネットワーク間の移行

SLCは直接Wi-Fiを使用しませんが、デバイスがApple Location Service(Wi-Fiデータベースによる位置情報)を介して新しい座標を取得した場合、Wi-Fiネットワークの変更が間接的にイベントを引き起こす可能性があります。iOSはWi-Fiアクセスポイントの座標をハッシュ化し、基地局変更の間に位置を補完するために使用します。

トリガー保証遅延精度
基地局の変更高い1〜30秒500m〜3km
他アプリのGPS低い即時最大10m
Wi-Fi変更中程度最大5分100〜500m

SLCと他のiOS位置情報サービスの比較

iOSは位置情報を取得するための複数のメカニズムを提供しており、それぞれに独自の精度、エネルギー消費、使用シナリオがあります。Significant Location Changeは、基地局による大まかな近似と正確なGPSトラッキングの中間に位置し、リアルタイムで高い精度を必要としないアプリケーションにバランスの取れたオプションを提供します。

Standard Location Service

Standard Location ServicestartUpdatingLocation())は、GPS、Wi-Fi、携帯電話基地局を使用して座標を最大限正確に特定します。精度は最大10メートルですが、エネルギー消費は高く、GPSモジュールが常時アクティブになります。ナビゲーション、フィットネストラッカー、ARアプリケーションに適しています。対照的に、SLCは常時GPSを使用せず、精度は500メートル以下です。

Region Monitoring(ジオフェンシング)

Region Monitoringは、指定された地理的領域への出入りを追跡します。SLCとは異なり、開発者自身が領域の境界を定義します(半径100メートルから)。ジオフェンシングはSLCを補助メカニズムとして使用します。システムはまずSLCでおおよその位置を特定し、次にGPSを起動して領域への出入りを正確に検出します。最大数は20の領域まで追跡できます。

Visit Monitoring

Visit MonitoringはiOS 8+の専門的なサービスで、場所への訪問(到着と出発)を追跡します。SLCと他のシグナルを組み合わせて、ユーザーがどこかに滞在したことと、いつ離れたかを判断します。Visit MonitoringはSLCよりエネルギー効率が高く、イベント生成が少なく、デバイス上の機械学習を利用します。

サービス精度エネルギー消費バックグラウンド
SLC500m〜3km非常に低いはい
Standard GPS最大10m高い許可が必要
Geofencing100m〜低いはい
Visit Monitoring最大100m非常に低いはい

エネルギー消費とバッテリー

SLCは、Visit Monitoringを除けば、iOSで位置情報を取得する最もエネルギー効率の高い方法です。Appleによると、SLCは標準的な使用シナリオで1時間あたり約0.1〜0.5%のバッテリー充電を消費するのに対し、継続的なGPSトラッキングは1時間あたり5〜10%を消費する可能性があります。節約できるのは、GPSモジュールが各イベントで座標を確認するためだけに短時間だけ起動するためです。

iOSはバッテリー最適化を通じてSLCのエネルギー消費を管理します。システムがアプリケーションがSLCイベントをあまりにも頻繁に処理していることに気づいた場合(例えば、電車での移動中に頻繁な基地局変更が多くのイベントを生成する場合)、iOSは一時的に通知頻度を減らすことができます。これは自動的なメカニズムであり、開発者は無効にできません。

主要なiOSリリースごとに、Appleは位置情報へのバックグラウンドアクセスを厳しくしています。iOS 13以降、バックグラウンドでの位置情報使用の許可要求ダイアログが変更されました:ユーザーは「アプリの使用中」(While Using)だけでなく、明示的に「常に」(Always)を選択する必要があります。Always許可がないと、アプリケーションがバックグラウンドにあるか、システムによって強制終了された場合にSLCは機能しません。

  • SLC — 1時間あたり0.1〜0.5%のバッテリー;GPS — 継続使用で1時間あたり5〜10%
  • iOS 13+ — バックグラウンドSLCにはAlways許可が必要
  • 最適化 — iOSはアクティブな移動中にSLCの頻度を自動的に減らす
  • バッチ処理 — 複数のSLCイベントが1つの通知に統合される可能性がある

Swiftでの実装

SwiftでのSignificant Location Changeの完全な実装例を見てみましょう。この例には、CLLocationManagerのセットアップ、Always許可の要求、監視の開始、イベント処理、システムによる強制終了後のアプリケーション再起動のサポートが含まれます。コードは、座標処理とBGTaskSchedulerによるバックグラウンドタスクのためにasync/awaitを使用したモダンなSwiftを使用しています。

swift
import CoreLocation
import UIKit

class LocationManager: NSObject, CLLocationManagerDelegate {

    private let manager = CLLocationManager()

    override init() {
        super.init()
        manager.delegate = self
        manager.pausesLocationUpdatesAutomatically = true
        manager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
    }

    func requestAlwaysAuthorization() {
        manager.requestAlwaysAuthorization()
    }

    func startSignificantLocationUpdates() {
        manager.startMonitoringSignificantLocationChanges()
    }

    func locationManager(_ manager: CLLocationManager,
                           didUpdateLocations locations: [CLLocation]) {
        guard let location = locations.last else { return }
        Task.detached {
            await LocationProcessor.handleLocationUpdate(location)
        }
    }

    func locationManager(_ manager: CLLocationManager,
                           didFailWithError error: Error) {
        Logger.log("SLC error: \(error.localizedDescription)")
    }
}

アプリケーション再起動の処理

アプリケーションがシステムによって強制終了された場合、SLCは新しいイベントが発生すると自動的に再起動します。AppDelegateで、UIApplication.LaunchOptionsKey.locationを介した位置イベントによる起動のチェックを追加する必要があります。再起動後、アプリケーションはCLLocationManagerを初期化し、監視を継続するためにstartMonitoringSignificantLocationChanges()を呼び出す必要があります。

swift
class AppDelegate: NSObject, UIApplicationDelegate {

    private let manager = LocationManager()

    func application(_ application: UIApplication,
                           didFinishLaunchingWithOptions launchOptions:
                               [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        if launchOptions?.keys.contains(.location) == true {
            Logger.log("App relaunched by SLC event")
        }
        manager.requestAlwaysAuthorization()
        manager.startSignificantLocationUpdates()
        return true
    }
}

ベストプラクティス

Significant Location Changeの適切な使用には、機能性とエネルギー効率のバランスが必要です。Appleは位置情報へのバックグラウンドアクセスを厳格に制御しており、SLCを乱用したり、明確な必要性なく使用したりするアプリケーションは、App Storeでの公開時に拒否されるリスクがあります。

SLCの必要性を常に説明する

Info.plistに説明文を追加する必要があります:NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription。説明では、アプリケーションが位置情報へのバックグラウンドアクセスを必要とする理由を明確に説明する必要があります。App Reviewはこれらの行を読み、理由が不十分であったり表現が曖昧だったりすると、アプリケーションを拒否する可能性があります。:「このアプリは、お客様の位置の変化に基づいて天気予報を更新するためにSLCを使用します。」

必要なイベントのみを処理する

すべてのSLCイベントで高コストな操作(GPS測位、ネットワークリクエスト)を実行しないでください。交通機関での移動中、SLCは1時間に数十のイベントを生成する可能性があります。デバウンスを使用してください:最後の完全な更新の時間を保存し、前回の更新から5〜10分未満しか経過していない場合は処理をスキップします。これにより、バッテリーとネットワークトラフィックが節約されます。

BGTaskSchedulerと組み合わせる

SLCイベント後の長時間の処理にはBGTaskSchedulerを使用します。アプリケーションがSLCイベントを受け取ったとき、BGProcessingTaskRequestまたはBGAppRefreshTaskRequestを介してバックグラウンドタスクをスケジュールできます。これにより、リソースを集中的に使用する操作(サーバーとの同期、ルート分析)を、次のバックグラウンド実行ウィンドウまで延期でき、SLC応答のメインスレッドをブロックしません。

  • Info.plist — 位置情報のバックグラウンドアクセスに必須の説明文
  • デバウンス — イベントを5〜10分に1回以上処理しない
  • BGTaskScheduler — SLCイベント後にバックグラウンドタスクをスケジュール
  • Always許可 — 実際に必要な場合のみ要求する
  • pausesLocationUpdatesAutomatically — GPSの自動一時停止を有効にする

よくある質問

iOSのSignificant Location Changeとは何ですか?

Significant Location Change(SLC)は、携帯電話基地局に基づいてデバイスの大まかな移動を監視するiOSのエネルギー効率の高いサービスです。継続的なGPSトラッキングと比較して最大90%少ないエネルギーを消費し、高い位置精度を必要としないアプリケーションに適しています。

Significant Location Changeの精度はどのくらいですか?

SLCの精度は、携帯電話基地局の密度に応じて500メートルから3キロメートルまで異なります。都市部では精度が高く(500mに近い)、田舎では低くなります(数キロメートルまで)。SLCは正確な座標の特定を目的としておらず、移動のおおまかな監視のためのリソースです。

SLCのAlways許可を取得するには?

Info.plistNSLocationAlwaysAndWhenInUseUsageDescription文字列を追加した後、CLLocationManager.requestAlwaysAuthorization()を呼び出します。iOS 13以降、ユーザーはシステムダイアログで明示的に「常に」(Always)を選択する必要があります。この許可がないと、SLCはバックグラウンドで機能しません。

SLCは強制終了されたアプリを再起動できますか?

はい、SLCはメモリ不足でシステムによって強制終了されたアプリケーションを再起動できます。起動時にdidFinishLaunchingWithOptionsメソッドでUIApplication.LaunchOptionsKey.locationを確認し、監視を継続するためにstartMonitoringSignificantLocationChanges()を呼び出してください。

SLCとStandard Location Serviceの違いは?

SLCは携帯電話基地局のみを使用し、常時GPSを起動しないため、最大90%のバッテリー節約が可能です。精度は500m〜3kmです。Standard Location ServiceはGPS、Wi-Fi、基地局を使用し、精度は最大10mですが、かなり多くのエネルギーを消費します。SLCはバックグラウンド監視に適しており、GPSはナビゲーションに適しています。

まとめ

  • Significant Location Change — iOSでの大まかな移動のエネルギー効率の高い監視
  • 仕組み — 常時GPSなしで携帯電話基地局による位置特定
  • 精度 — 携帯電話インフラの密度に応じて500m〜3km
  • トリガー — 基地局変更、他アプリによるGPS起動、Wi-Fi変更
  • 許可 — iOS 13+ではバックグラウンドSLCにAlwaysが必要
  • エネルギー消費 — 0.1〜0.5%/時間 vs 継続GPSの5〜10%/時間
  • ベストプラクティス — イベントのデバウンス、長時間処理にBGTaskScheduler

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください