【要約】RC-S300をnfcpyで動かした話 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が最新のICカードリーダーRC-S300を利用しようとした際、既存のnfcpyライブラリが動作しない問題に直面した。従来のnfcpyは、独自ベンダコマンドを直接送る旧機種を前提としていたためである。
- ・RC-S300は一般的なスマートカード規格であるCCIDに準拠している。
- ・nfcpyはCCID方式の制御に対応していない。
- ・そのため、デバイスを接続しても「デバイスが見つかりません」と表示される。
// Approach
筆者はRC-S300の通信仕様を解析し、nfcpyのドライバモジュールを独自に実装することで解決を図った。低レイヤの通信内容を特定するために、複数の解析手法を組み合わせている。
- ・JavaScript Web APIs USBDeviceの知見を実装に応用した。
- ・pyscardを用いてAPDUコマンドの送受信結果を調査した。
- ・USBパケットキャプチャを行い、通信パケットを詳細に解析した。
- ・CCIDとRC-S300固有コマンドを制御するドライバを構築した。
// Result
nfcpyのフォーク版が作成され、RC-S300を用いたFeliCaの操作が可能となった。これにより、最新ハードウェアを用いたPython開発の選択肢が広がった。
- ・
pip install git+https://github.com/ajinori-256/nfcpy.gitで利用可能。 - ・FeliCaの検知(sense_ttf)と通信(send_cmd_recv_rsp)を実現した。
- ・今後はマイナンバーカードやMIFAREへの対応を予定している。
Senior Engineer Insight
> ライブラリの仕様変更に伴う、ドライバ層の再実装の重要性を示す事例だ。USBパケットキャプチャを用いた低レイヤの解析は、ブラックボックス化したデバイス制御において極めて実践的である。ただし、Ubuntu 26.04 LTSへの依存やpcscdとの競合、対応カードの限定といった点は、プロダクション環境への導入において慎重な検証を要する。