NFC(Near Field Communication)は、最大10センチメートルの距離でデバイス間のデータ交換を可能にする近距離無線通信技術です。NFCは、モバイル電話での非接触決済、ファイル転送、タグの読み取りに使用されています。Grand View Research、2025年によると、世界中のスマートフォンと決済インフラへのNFCの大量導入により、NFCチップ市場は345億ドルに達しました。
重要なポイント
NFC(Near Field Communication)は、13.56MHzで動作する近距離無線データ伝送規格です。この技術はRFID(無線周波数識別)に基づいており、ISO 14444 — 非接触スマートカードの規格 — と後方互換性があります。データ転送速度は、選択したモードに応じて106、212、または424 kbpsです。
Bluetoothとは異なり、NFCはペアリング手順を必要としません — デバイスを互いに近づけると即座にデータを交換します。最大通信距離は10cmで、傍受に対する自然な保護を提供します。NFC Forumによると、この技術は世界中で30億台以上のデバイスにサポートされており、この数は年間15–20%増加しています。
NFC規格は、Sony、Philips、Nokiaが2004年に設立したコンソーシアムであるNFC Forumによって開発されています。NFC搭載の最初の電話(Nokia 6131)は2006年に発売されましたが、大量普及は2011年のAndroid 4.0(Ice Cream Sandwich)のリリースと2014年のApple Payの開始後に始まりました。今日では、150ドル以上のほぼすべてのスマートフォンがNFCをサポートしています。
スマートフォンのNFCコントローラーは3つの動作モードをサポートしており、それぞれが独自のタスククラス向けに設計されています。モードの切り替えは、相互作用するデバイスの種類に応じて自動的に行われます。
このモードでは、電話がNFCタグのアクティブリーダーとして機能します。NFCタグ(ステッカー、ブレスレット、ポスター)に近づけると、電話はタグのメモリからデータを読み取ります。タグには48バイトから32KBのメモリが含まれており、URL、テキスト、またはコマンドを保存します。Android Beam(Nearby Shareに置き換えられました)は、リンクや連絡先を転送するためにこのモードを使用していました。
2つのNFCデバイスが直接データを交換します。一方のデバイスがイニシエーターとして機能し、もう一方がターゲットとして機能します。LLCP(論理リンク制御プロトコル)規格が接続を管理し、SNEP(簡易NDEF交換プロトコル)がデータ形式を管理します。P2Pモードは、連絡先、リンクの迅速な転送、またはBluetoothペアリングの開始に使用されます。P2Pモードでの速度は424 kbpsに達します。
電話が非接触スマートカード — 決済カード、交通パス、アクセスバッジ — をエミュレートします。外部NFCデバイス(POS端末、改札機)は、通常のプラスチックカードと同じように電話と相互作用します。このモードはApple Pay、Google Pay、Samsung Payで使用されています。決済のセキュリティは、Secure Element — 決済カードデータを保存する隔離されたチップ — によって確保されています。
| モード | 使用例 | Secure Elementが必要 |
|---|---|---|
| Reader/Writer | URLを含むNFCタグの読み取り | いいえ |
| Peer-to-Peer | 電話間での連絡先転送 | いいえ |
| Card Emulation | Google Payによる決済 | はい |
NFCとBluetooth LE(低エネルギー)は、よく比較される2つの近距離通信技術です。NFCは接続確立速度(0.1秒)で優れており、ペアリング不要ですが、データ転送速度と範囲で劣ります。Bluetooth LEはペアリングが必要(2–5秒)ですが、最大2 Mbpsの速度と最大100メートルの範囲を提供します。
実際には、NFCとBluetoothは競合するのではなく、互いに補完し合います。NFCは接続開始(ハンドオーバー)に使用されます:NFCがBluetooth接続パラメータ(NFC Bluetooth Handover)を送信するために、デバイスに電話を近づけるだけです。その後、デバイスは高速ファイルまたはオーディオストリーミング転送のためにBluetoothに切り替えます。
スマートフォンのNFCモジュールは、NFCコントローラー、NFCアンテナ、Secure Element(安全な操作のため)の3つのコンポーネントで構成されています。NFCコントローラーは、個別のチップまたは複合通信モジュール(NFC + Bluetooth + Wi-Fi、例:QualcommのWCN3990)の一部です。無線インターフェースと交換プロトコルを管理します。
NFCアンテナは、フレキシブル基板(FPC)またはバッテリーケース上に印刷されたコイルです。アンテナサイズは20×30mm、巻き数は3–5です。アンテナは、13.56 MHzに調整された整合回路を介してコントローラーに接続されます。NXP Semiconductorsによると、効率的なアンテナ動作にはインダクタンスと品質係数の正確な計算が必要です。
Secure Element(eSE)は、個別の暗号化チップ(NXP P71、Samsung S3K)またはSoC内の隔離された領域(iSE — 統合Secure Element)です。決済カードデータを保存し、HCE(ホストカードエミュレーション)のための暗号化操作を実行します。Secure ElementはAndroid/iOSから隔離されています:SWP(シングルワイヤプロトコル)バスを介したAPDUコマンドによってのみ、NFCコントローラーがアクセスできます。
// Secure Elementと対話するためのAPDUコマンドの例
const uint8_t SELECT_APDU[] = {
0x00, 0xA4, 0x04, 0x00, // CLA, INS, P1, P2
0x07, // データ長(7バイト)
0xA0, 0x00, 0x00, 0x00, // RID — 登録済み
0x03, 0x10, 0x10, // PIX — アプリケーション識別子
0x00 // Le — 期待される応答長
};
// NFCコントローラーを介してSecure Elementにコマンドを送信
NfcStatus nfcStatus = sendApdu(SELECT_APDU, sizeof(SELECT_APDU));
電話でのNFCは、非接触決済、交通、オブジェクトへのアクセス、タスク自動化の4つの主要シナリオで使用されています。最も普及している用途は決済システムです:Apple Pay、Google Pay、Samsung Pay。これらは、HCE(ホストカードエミュレーション)またはSecure Elementを使用したカードエミュレーションモードで銀行カードをエミュレートします。
世界中の交通システム(モスクワメトロ、London Tube、New York MTA)は、モバイルウォレットを通じてNFC決済を受け付けています。日本では、NFCベースのFeliCa技術(Sony)が2004年から交通、買い物、オフィスアクセスに使用されています。FeliCaチップを搭載したスマートフォン(日本の市場向けiPhoneなど)は、SuicaやPASMOをサポートしています。
NFCタグを使用すると、“スマートホーム”シナリオを自動化できます:ベッドのそばのタグに電話をかざすと、アラームがオンになり通知がオフになります。AndroidではAndroid Beam / NFC Toolsを介して、iOSではShortcutsとNFCトリガーを介して実装されます。一部のスマートフォンは急速充電にもNFCを使用しています — Qi規格は充電器識別にNFCを使用します。
Androidは、Intent Systemを通じてNFCタグを処理するためのAPIを提供しています。タグが電話に近づけられると、システムはタグを含むインテントを作成し、アプリケーションはNDEF(NFCデータ交換フォーマット)形式でデータを受信します。以下は、NFCタグからURLまたはテキストを読み取るActivityの例です。
class NfcReaderActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_nfc)
handleNfcIntent(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleNfcIntent(intent)
}
private fun handleNfcIntent(intent: Intent) {
if (intent.action == NfcAdapter.ACTION_NDEF_DISCOVERED) {
val rawMessages = intent
.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)
rawMessages?.forEach { rawMsg ->
val msg = rawMsg as NdefMessage
msg.records.forEach { record ->
val payload = String(record.payload)
println("NFC data: $payload")
}
}
}
}
}
NFCで動作するには、マニフェストでandroid.permission.NFC権限を宣言し、ACTION_NDEF_DISCOVERED、ACTION_TECH_DISCOVERED、またはACTION_TAG_DISCOVEREDのインテントフィルターを構成する必要があります。AndroidはNDEFレコードタイプに従ってNFCタグを自動的にフィルタリングします — これにより、アプリケーションは特定のMIMEタイプまたはURLプレフィックスを持つタグにのみ応答できます。NFCアンテナは通常、電話の背面パネルの上部にあります — タグを読み取るには、電話の上部をタグに近づけてください。
よくある質問
はい、非接触決済のためには電話の設定でNFCがオンになっている必要があります。Google Payは、端末に近づくと自動的にNFCを有効にします(画面がオフの状態でも、Android 10+とGoogle Walletがインストールされたデバイスでは)。Apple Payの場合、NFCは自動的にオンになり、手動での有効化は不要です。
標準のNFC範囲は最大10センチメートルです。実際には、信頼性の高い接続のために、電話をリーダーから2–4 cmの距離に近づけることをお勧めします。範囲が短いため、NFCはBluetoothよりも安全です — 攻撃者は遠隔からデータを読み取ることができません。
理論的には、NFCタグに悪意のあるサイトへのリンクが含まれている可能性がありますが、これにはユーザーの操作 — リンクをクリックすること — が必要です。自動感染は、この技術が確認なしでのコード実行やファイルインストールをサポートしていないため、NFCを介しては不可能です。AndroidおよびiOSのオペレーティングシステムは、潜在的に危険なNFCアクションをブロックします。
Androidの場合:設定 → 接続 → NFCを開きます(または設定で“NFC”を検索します)。iPhoneの場合:iPhone 6以降のすべてのモデルがNFCをサポートしています。一部のメーカーはケースや箱にNFC記号を表示しています。Play MarketのNFC Checkアプリを診断に使用することもできます。
NFCはアクティブモード — データ送信中 — にのみ電力を消費します。スタンバイモードでは、NFCコントローラーは実質的に電力を消費しません(0.01 mA)。NFCをオンにしても電話のバッテリー駆動時間には影響しません。これは、スタンバイモードでも電力を消費するBluetoothとは異なります。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。