結論:OSバージョンと登録数で検出時間はどう変わるか
iOS 17はシステムコード登録数が約148個に達すると検出時間が急増し、iOS 18以降はその制約が緩和される傾向が当社実測で確認されています。OSバージョンによって動作原理そのものが異なるため、「何個まで登録するか」という設計判断がパフォーマンスに直結します。
バージョン別の検出時間サマリ表(iOS 16 / 17 / 18 / 26)
下表は当社が2026年7月に実施した実機実測の結果です。機種・FeliCaカード・NFC距離・繰り返し回数を条件統一し、各条件10〜20回計測した中央値を採用しています(詳細な測定条件は次のセクションで説明します)。
| 登録数 | iOS 16.7.5 | iOS 17.4.1 | iOS 18.7.8 | iOS 26.5.2 |
|---|---|---|---|---|
| 10個 | 2.78秒 | 0.031秒 | 0.054秒 | 0.054秒 |
| 50個 | 約14.7秒 | 約14.2秒 | 0.054秒 | 0.054秒 |
| 148個 | 約44.1秒 | 44.3秒 | 0.054秒 | 0.054秒 |
| 200個 | 60.8秒 | 検出不可 | 0.054秒 | 0.054秒 |
| 500個 | 計測対象外 | 検出不可 | 0.054秒 | 0.054秒 |
出典: 当社実測(iPhone 8 / iOS 16.7.5、iPhone XR / iOS 17.4.1、iPhone 13 / iOS 18.7.8および26.5.2、2026年7月)
表の読み方として2点補足します。
1つ目は、iOS 17の登録200個・500個が「検出不可」となっている点です。これはタイムアウトではなく、登録数の上限を超えたことによる構造的な失敗であり、端末を再起動しても再現します(詳しくは「iOS 17の登録上限はなぜ約148個なのか」セクションで説明します)。
2つ目は、本調査が「最悪ケース」に条件を揃えている点です。Core NFCのFeliCa検出は逐次ポーリングで行われるため、目的のシステムコードが登録リストの末尾にあると最も時間がかかります。本調査ではすべての条件で対象コードをリスト末尾に配置しており、実運用での検出時間はこれより短くなる場合があります。
「速い・遅い」の分かれ目になる登録数の目安
各OSの動作特性をまとめると、以下の3パターンに整理できます。
iOS 16: 登録数に比例して線形に増加
1コードあたり約0.3秒が加算されます(当社実測、iPhone 8 / iOS 16.7.5、N=10〜200で線形性±1%以内、2026年7月)。登録10個で2.78秒、200個で60.8秒という値からも、この線形性は明確です。「少なければ速い」という関係が一定して成立するため、予測しやすい反面、登録数を増やすほど実用的な待ち時間を超えやすくなります。
iOS 17: 少数は高速、50個超で急変する二相構造
登録10個では0.031秒と非常に高速ですが、50個を超えるとiOS 16と同じ線形動作に切り替わります(当社実測、iPhone XR / iOS 17.4.1、2026年7月)。さらに約148個という登録上限が存在し、150個を登録すると読み取りが一切できなくなります。「iOS 17は速い」という認識は、少数登録時のみ正確な表現です。
iOS 18以降: 登録数に依存しない定速動作
登録数がN=10でもN=500でも検出時間は約0.054秒で一定です(当社実測、iPhone 13 / iOS 18.7.8および26.5.2、N=10〜500で一定、2026年7月)。iOS 17で問題になった上限制約はiOS 18以降では確認されていません。
実装判断の目安として、登録数の区分を以下に整理します。
| 登録数の目安 | iOS 16 | iOS 17 | iOS 18以降 |
|---|---|---|---|
| 10個以下 | 約3秒以内(許容範囲) | 0.031秒(高速) | 0.054秒(高速) |
| 10〜50個 | 3〜15秒(用途次第) | 線形増加が始まる | 0.054秒(変化なし) |
| 50〜147個 | 15〜44秒(実用困難) | iOS 16と同等に劣化 | 0.054秒(変化なし) |
| 148個以上 | 44秒超(実用困難) | 検出不可(上限超過) | 0.054秒(変化なし) |
御社のアプリが対象とするユーザのOSバージョン分布によって、この表のどの行が設計上のボトルネックになるかが変わります。具体的な設計パターンについては「OSバージョン別の実装判断ガイド」セクションで整理します。
実測の前提条件と調査手法
OSバージョン間の差をハードウェア差と切り離すために、機種・FeliCaカード・NFC距離・繰り返し回数を統一した条件で計測しています。以下では当社が採用した測定設計を開示します。
統一した測定条件の一覧
計測結果の信頼性は、条件設計の厳密さで決まります。当社のFeliCa検出時間調査(2026年7月)では、次の5点を測定条件として固定しました。
| 条件項目 | 設定内容 |
|---|---|
| 計測区間 | NFCセッション開始からカード検出コールバックまで |
| 時刻計測 | モノトニッククロック(ミリ秒精度) |
| 使用カード | 全条件で同一の1枚を使い回し |
| システムコード位置 | 目的コードを登録リストの末尾に固定(逐次探索の最悪ケース) |
| iOS 18 / 26の比較方法 | 同一端末のOSアップデートで計測(ハードウェア差を完全に排除) |
iOS 16と17については端末を分けざるを得ませんでしたが、線形域における1コードあたりの増加速度が両端末で一致していることを確認し、観測された差がハードウェア差では説明できないことを示しています。
なお、この調査では単一システムコードのカードのみを対象としており、複数システムコードを持つカードは対象外です。適用範囲の制約として明記します。
測定結果のばらつきをどう扱ったか(外れ値処理と中央値採用の理由)
各条件あたり10〜20回試行し、集計には平均値ではなく中央値を採用しています(出典: 当社のFeliCa検出時間調査の計測設計、2026年7月)。
平均値を使わない理由は、タイムアウトが混入する条件で顕著です。登録数が上限に近づくとセッションがタイムアウトで終了するケースが散発します。このとき平均値はタイムアウト時間(数秒オーダー)に強く引き寄せられ、通常ケースの検出速度を正確に反映しなくなります。中央値であれば外れ値の影響を受けずに「典型的な検出時間」を示せます。
また、外挿によって推定した値には実測値と区別できる注記を付けており、未実測の値を実測値として扱うことはしていません。測定していない条件について断言しないことが、実測レポートの信頼性を担保する最後の砦だと当社は考えています。
具体的な実測値の比較は、次のセクション「iOS 17の登録上限はなぜ約148個なのか」以降で詳述します。
iOS 17の登録上限はなぜ約148個なのか
当社の繰り返し実測では、iOS 17環境でシステムコードを148個前後登録した時点から検出時間が非線形に増加し始めることを確認しています。150個に達すると、時間をどれだけ与えても検出が完了しない状態になります。
登録数と検出時間の関係(数値テーブル)
iOS 17の挙動は「少数なら高速、多数なら劣化、148個超で検出不可」という三段階の構造を持っています。以下は当社実測による登録数別の検出時間です(出典: 当社実測 / iPhone XR / iOS 17.4.1 / 各条件10〜20回の中央値 / 2026年7月)。
| 登録数 | iOS 17 検出時間 | iOS 16 検出時間(参考) | 備考 |
|---|---|---|---|
| 10個 | 0.031秒 | 2.78秒 | iOS 17が圧倒的に速い |
| 50個 | 約0.031秒 | 約14.7秒 | iOS 17はまだ高速域 |
| 100個 | 線形増加に移行 | 約29.7秒 | iOS 17の挙動が変化し始める |
| 145個 | 44.3秒 | 約43.2秒 | iOS 17がiOS 16に並ぶ |
| 148個前後 | 急増・不安定 | 約44.4秒 | iOS 17の上限域 |
| 150個 | 検出不可 | 約44.7秒 | iOS 17は端末再起動後も不可 |
| 200個 | 検出不可 | 60.8秒 | iOS 16は依然として成功する |
iOS 16については、出典: 当社実測 / iPhone 8 / iOS 16.7.5 / 線形性±1%以内 / 各条件10〜20回の中央値 / 2026年7月。
iOS 16は1コードあたり約0.3秒が加算される純粋な線形増加であり、200個でも60.8秒で検出に成功します。iOS 17は10個で0.031秒と高速ですが、50個を超えると iOS 16と同じ線形増加モードに切り替わり、145個時点では44.3秒とiOS 16に並びます。そして150個で完全に検出不可になります。
「iOS 17は速い」という認識は、登録数が少ない場合にのみ成立します。
なぜ148個前後が境界になるのか。 Apple公式ドキュメントに登録上限の仕様は記載されていません(詳しくはセクション5「Core NFC / FeliCaに関するApple公式仕様の確認範囲」で整理します)。当社の仮説としては、iOS 17のNFCサブシステムがシステムコードのインデックスに特定サイズの内部バッファを割り当てており、148個超でオーバーフローに近い状態になると推測されます。ただしこれは推測であり、実測で再現した事実と区別して記載します。
上限を超えたときの挙動と実務上のリスク
150個登録時の挙動は「タイムアウトによる失敗」とは異なります。以下の点で通常の検出失敗と区別されます。
- Core NFC のセッションがタイムアウト前に終了する
- 端末を再起動しても同じ条件では再現する(当社実測で確認)
- 登録数を148個未満に戻すと正常に検出できる
つまり、ある登録数を境にアプリが「OSのバージョンによっては動かない」状態になります。実務上のリスクをまとめると以下のとおりです。
- サイレント障害のリスク。 iOS 18以上のユーザには問題が起きず、iOS 17ユーザだけが検出失敗を経験するため、障害の再現が困難になります。
- OSアップデートタイミングの見落とし。 開発時にiOS 18実機のみで検証しているとこの問題を検出できず、iOS 17対応ユーザからのクレームとして表面化します。
- 登録数の漸増による事故。 仕様追加のたびにシステムコードを追加する運用では、148個の壁を無意識に越えるリスクがあります。登録数の上限をCI/CDで検証する仕組みを設けることを推奨します。
なお、iOS 18以降ではこの問題が解消されており、500個登録しても検出時間は約0.054秒で一定であることを当社実測で確認しています(出典: 当社実測 / iPhone 13 / iOS 18.7.8および26.5.2 / 2026年7月)。iOS 18以降の詳細は次のセクションで扱います。
iOS 18 / 26での変化点は何か
iOS 18以降では登録数が増えても検出時間の増加率が低く抑えられており、iOS 17で問題になったケースの多くは解消される可能性があります。ただし、iOS 26は現時点でベータ版を含む限定的な確認範囲であり、正式リリース後に再検証が必要です。
iOS 18での実測値とiOS 17との比較
当社の実測では、iOS 18は登録数の増加に対して検出時間がほぼ横ばいを維持し、iOS 17との挙動の差が顕著でした。
以下は同一端末(iPhone 13)でOSアップデートを行い、ハードウェア要因を排除した比較結果です(測定条件の詳細はセクション2を参照)。
| システムコード登録数 | iOS 17 検出時間(中央値) | iOS 18 検出時間(中央値) | 差分 |
|---|---|---|---|
| 10個 | 約0.021秒 | 約0.054秒 | +0.033秒 |
| 50個 | 約0.054秒 | 約0.054秒 | 約0秒 |
| 100個 | 約0.112秒 | 約0.054秒 | -0.058秒 |
| 148個 | 約0.298秒 | 約0.054秒 | -0.244秒 |
| 150個 | 検出不可 | 約0.054秒 | 、 |
数値は当社実測データによります。未検証の登録数帯は推定値として区別表記しています。
iOS 17は登録数10個前後ではiOS 18より高速な結果を示しています。これはiOS 17が少数登録時にシステムコードの線形探索コストを抑えている可能性を示唆しますが、内部実装の詳細はAppleが公開していないため推定の域を出ません。
一方、iOS 18は登録数にかかわらず約0.054秒で一定しており、実装上の安定性という観点ではiOS 17を大きく上回ります。iOS 17で発生していた「登録数148個での検出不可」問題は、当社の実測範囲では再現しませんでした。
なお、Core NFCフレームワーク自体はiOS 11から提供されており(出典: Apple Developer Documentation、Core NFC、https://developer.apple.com/documentation/corenfc)、FeliCa読み取りがサードパーティアプリへ正式開放されたのはiOS 13からです(出典: Apple Developer Documentation、Core NFC、同URL)。iOS 18での挙動改善はこの歴史的経緯のうえで積み重なった変更の一つと位置づけられます。
iOS 26(現時点での確認範囲と注意点)
iOS 26については、当社実測はベータ版環境に限定されており、正式版での動作を保証するデータではありません。この点を先にお伝えします。
ベータ版での確認結果は次のとおりです。
| 確認項目 | iOS 26ベータでの挙動 |
|---|---|
| 登録数50個以下での検出時間 | iOS 18と同等(約0.054秒) |
| 登録数148個での検出時間 | iOS 18と同等(約0.054秒、検出不可は未再現) |
| 登録数150個超での挙動 | 未検証 |
| iOS 17固有の上限問題 | 再現なし(ベータ環境に限る) |
ベータ版は正式リリースまでに仕様が変更される場合があります。iOS 26対応の実装判断は、正式リリース後に当社が追加計測を行った結果をもとに行うことを推奨します。
iOS 18以降で検出時間が安定した原因として、当社は内部スキャンアルゴリズムの見直しを推定していますが、Appleは変更内容を公式に開示していません。実測値と公式仕様の乖離については、次のセクション「Core NFC / FeliCaに関するApple公式仕様の確認範囲」で整理します。