FareBot:Android、iOS、Web向けオープンソース NFC 交通カードリーダー
FareBotとは?
FareBot (github.com/codebutler/farebot) は、オープンソースの Kotlin Multiplatform アプリで、非接触型公共交通機関のスマートカードに保存されたデータを読み取り・検査できます。純粋な Kotlin と Compose Multiplatform で書かれ、以下のプラットフォームで動作します。
- Android – ネイティブ NFC API
- iOS – CoreNFC
- macOS – PC/SC または PN533 USB リーダー(実験的)
- Web – WebAssembly + WebUSB(実験的)
アプリは ISO 7816、CEPAS、FeliCa、DESFire、MIFARE Classic、MIFARE Ultralight、NFC‑V といった幅広いカード規格をサポートし、80以上の交通システム(アジア・ヨーロッパ・北米・その他)からカードを読み取ります。
開発者にとって重要な理由
- 最新ツール – Gradle KTS、Kotlin 2.3.0、Compose、KoinによるDI、Kotlin x serialization などを使用
- フルスタックドキュメント – README、コードコメント、Claude Code による dev‑container を備える
- 貢献やすさ – コードは MIT/GPL フリー、PR プロセスはシンプル
主な機能
| 機能 | 説明 |
|---|---|
| カード検出 | NFC タグをスキャンし、利用可能なカード種別をリストアップ |
| 全カードダンプ | すべての EF ファイルを読み取り、原データ、タイムスタンプ、残高を表示 |
| マルチプラットフォーム UI | モバイル・macOS・Web間で共有される Compose UI |
| 拡張可能なシステムレジストリ | 「registry」ファイルに新しい交通システムを追加 |
| WebAssembly デモ | Chrome/Edge で PN533 USB リーダー経由でカードを読み取る実験的 Web ビルド |
| dev‑container | Java 21、Gradle、Claude Code がプリロードされた Docker ベース環境 |
サポートカード(注目例)
- 日本 – Suica、Pasmo、Octopus、Edy
- シンガポール – EZ‑Link、NETS FlashPay、Octopus
- ドイツ – VDV‑Bus、VVS
- 英国 – Oyster、TfL カード(MIFARE サポート限定)
- 米国 – Clipper、Ventra、ORCA(DESFire)
完全リストは README に記載されており、MIFARE Classic の暗号キー等のカード固有の quirks も処理しています。
速習
- リポジトリをクローン
git clone https://github.com/codebutler/farebot.git cd farebot - ビルド&実行(Android)
make android-install # ADB 経由で接続デバイスにインストール - ビルド&実行(iOS)
make ios-install # 実機 iPhone にインストール - Web をビルド&サーブ
make web-run - テスト実行
make test
Tip:
dev‑container(.devcontainer/)は、Claude Code を実行したり、リポジトリをリスクなく実験できるサンドボックスエディタを提供します。
貢献フロー
- リポジトリをフォーク
- フィーチャーブランチを作成
- コードを追加/修正し、
make testを実行 - プルリクエストを送信
すべての貢献者は Contributors セクションで表彰され、リポジトリは 30 を超える貢献者と 1k+ スターを持ち、活発なコミュニティを示しています。
ライセンスとコミュニティ
FareBot は GPL‑3.0 ライセンスの下で公開され、使用・変更・再配布は自由ですが、派生作品は同じライセンスでなければなりません。GitHub PR、Issue、または新しい交通システムアダプタの追加での貢献を歓迎します。
結論: NFC 対応の交通アプリを構築している、または実用レベルの Kotlin Multiplatform コードベースがどのように構造化されているか学びたい場合、FareBot は必読です。実際のカードサポート、実験的 Web 機能、完全にドキュメント化されたリポジトリの組み合わせが、オープンソースの優れた参考例となっています。