[Flutter]QRコードリーダーパッケージ8選📗 それぞれのメリデメを知らべてみた
背景
現在Flutterを使用しモバイルアプリ開発を行なっています。ある機能を開発するのにQRコードを読み取る機能が必要になり、Flutterで使用できるQR コードリーダーを提供しているパッケージ(Dartコードのみで構成されているわけではないので分類的にはプラグインと呼んだ方が正解なのかもしれませんがこの記事ではわかりやすくパッケージで統一します)を調べました。この記事では調査したパッケージの特徴についてまとめた結果を紹介します。
以下の8つのパッケージを比較検討します。
- qr_code_scanner
- mobile_scanner
- qrscan
- barcode_scan2
- flutter_barcode_sdk
- fast_qr_reader_view
- zxing2
- flutter_qrcode_reader
QRコードリーダーを提供しているパッケージとは
ネイティブのカメラAPIとQRコードのデコードをつなげる機能を提供しているパッケージ
- カメラのアクセスと制御:QRコードを読み取るためには、まずデバイスのカメラにアクセスし、カメラからの入力を取得する必要があります。これにはカメラ制御機能(ズーム、焦点調節、露出調節など)も含まれることがあります。
- QRコードのデコード:カメラから取得した画像からQRコードを正確に読み取り、その情報をデコード(解析)する能力。QRコードは特定のパターンを使用して情報をエンコード(符号化)するため、そのパターンを理解し、適切に解析することが求められます。
早見表
パッケージ名 | likes | star | os | バーコード読み取り | QR生成 | 最終更新 |
---|---|---|---|---|---|---|
qr_code_scanner | 1665 | 899 | iOS/Android | ❌ | ❌ | 2022-08-15 |
mobile_scanner | 947 | 451 | iOS/Android | ⭕️ | ⭕️ | 2023-03-29 |
qrscan | 375 | 353 | Android | ❌ | ⭕️ | 2022-08-05 |
barcode_scan2 | 207 | 65 | iOS/Android | ⭕️ | ❌ | 2023-03-08 |
flutter_barcode_sdk | 111 | 40 | iOS/Android | ⭕️ | ❌ | 2023-03-14 |
fast_qr_reader_view | 51 | 290 | iOS/Android | ❌ | ❌ | 2021-07-17 |
zxing2 | 37 | 23 | iOS/Android | ⭕️ | ❌ | 2023-01-30 |
flutter_qrcode_reader | - | 93 | iOS/Android | ❌ | ❌ | 2021-10? |
1.qr_code_scanner 1665Likes
特徴:
qr_code_scannerは、QRコードを簡単にスキャンできるステートフルウィジェットを提供し、カメラからの直接入力をデコードし、QRコードの内容を取得することが可能。
メリット:
- カメラビューとQRコードのデコーディングを一緒に提供するため、実装が簡単。
- QRコードのデコーディング速度が速い。
- iOSとAndroidの両方で動作。
- iOS,AndroidともFlutterQrPluginを使用している。
- FlutterQrPluginは、ネイティブのカメラAPIを直接扱い、カメラからの入力をQRコードのデコードにつなげる機能を提供。このプラグインはAndroidとiOSの両方をサポートし、それぞれのプラットフォームのネイティブコードを利用してカメラの制御やQRコードのデコードを行う。開発者はqr_code_scannerパッケージが提供するインターフェースを通じてQRコードのスキャン機能を利用するためFlutterQrPluginを意識する必要はない。
- iOS,AndroidともFlutterQrPluginを使用している。
- QRコードスキャナーウィジェットを提供し、そのウィジェットはカメラのビューとスキャン結果を管理が可能。また、フラッシュライトのオン/オフとカメラの前後切替機能も提供している。
デメリット:
- バーコードのスキャンはサポートしていなく、QRコードのみに対応している。
- 現在メンテナンスのみ。
- 一部のデバイスでの互換性に問題がある可能性があり。
2.mobile_scanner 947Likes
特徴:
- mobile_scanner は、QRコードだけでなく、バーコードもスキャンできるパッケージ。
- また、バーコードとQRコードの生成もサポートしている。
- このパッケージはネイティブのバーコードスキャン機能を使用しており、AndroidとiOSの両方で動作。
メリット:
- QRコードとバーコードの両方をスキャン可能。
- QRコードとバーコードの生成もサポートしている。
- AndroidとiOSサポート
- ダークモードに対応している。
- Barcode objectにはphone、sms、url、wifiなどの便利なプロパティが揃っているためスキャン後の処理が実装しやすい。
デメリット:
- 強いていうならqr_code_scannerパッケージなどと比べると若干新しいため、あまり多くのサポートやコミュニティのバックアップがない。
3.qrscan 375Likes
特徴:
qrscanは、QRコードとバーコードをスキャンするためのフルウィジェットを提供している。また、QRコードの生成も可能。
メリット:
- スキャンと生成の両方をサポートしている
- カメラビューとデコーディングを一緒に提供するため、実装が簡単。
- スキャンしたQRコードから直接URLを開いたり、電話番号をダイヤルしたり、SMSを送信したりする機能を提供。
デメリット:
- Androidのみサポート。
- 一部のデバイスでの互換性に問題がある可能性あり。
- QRコードの生成のカスタマイズオプションが限られる。
- バーコード形式のサポートはない。
4.barcode_scan2 207Likes
特徴:
- barcode_scan2 は、QRコードとバーコードの両方をスキャンするためのパッケージで、AndroidとiOSの両方をサポートしている。また、カメラビューを提供し、コードのスキャン結果を簡単に取得することが可能。加えてカメラのフラッシュの制御やスキャンのビープ音の制御など、様々な設定をカスタマイズすることができます。
メリット:
- QRコードとバーコードの両方をスキャン可能。
- AndroidとiOSの両方をサポート。
- カメラのフラッシュやスキャンのビープ音など、様々な設定のカスタマイズが可能。
デメリット:
- 一部の特殊なバーコードタイプ(例えば、一部の1Dバーコード)はスキャンできない可能性あり。
- UIのカスタマイズ性が他の一部のパッケージに比べて限定的である。
- 具体的には、パッケージが提供するデフォルトのスキャン画面(カメラビュー)は、特定のレイアウトとデザインを持ち、このデザインを大幅に変更することは、パッケージが提供するオプションによると制限されている。例えば、スキャン画面の色やボタンの配置、またはスキャンフレームの形状などのカスタムをサポートしていない。
5.flutter_barcode_sdk 111Likes
特徴:
- flutter_barcode_sdk は、非常に強力で効率的な1D(バーコード)と2D(QRコードなど)のコードスキャンエンジンを提供。これは、高度な画像処理とデコード技術を使用して、様々な種類のコードを読み取ることが可能。しかし、このパッケージは商用利用が可能で、ライセンスが必要です。
メリット:
- 強力なスキャンエンジンを提供し、1Dと2Dの両方のコードを読み取ることが可能。
- 高度な画像処理とデコード技術を使用しています。
- サポートしているコードの量が非常に多い。
- AndroidとiOSの両方をサポート。
デメリット:
- 商用利用が可能だが、ライセンスが必要。そのため、小規模なプロジェクトや個人的な使用にはコストがかかり不向き。
6.fast_qr_reader_view 51Likes
特徴:
- fast_qr_reader_viewは、QRコードをスキャンするためのフルウィジェットを提供。
- その名前が示す通りスキャン速度に特化している高速なQRコードリーダー。
- このパッケージは現在アクティブな開発が停止しており、iOS 13以降のバージョンでは問題が発生することが報告されている。
メリット:
- スキャン速度が非常に高速で、パフォーマンスに優れている。
- カメラビューとデコーディングを一緒に提供するため、実装が簡単。
- AndroidとiOSの両方をサポート。
デメリット:
- バーコードのスキャンはサポートしていなく、QRコードのみに対応。
- 一部のデバイスでの互換性に問題がある可能性あり。
- このパッケージは現在アクティブな開発が停止しており、iOS 13以降のバージョンでは問題が発生することが報告されている。
- Dart3非対応
7.zxing 237Likes
zxing→Zebra Crossing(横断歩道?)
特徴:
- zxing for androidはqr_code_scannerのフレームワークとして使用される。
- 元になるZXing は、Java言語で書かれた1次元、2次元バーコードイメージングライブラリ。
- このパッケージはそのライブラリをDartに移植したもので、QRコードだけでなく、多くのバーコード形式を読み取ることが可能。
メリット:
- QRコードとバーコードの両方をサポート。
- デコーディングアルゴリズムが高度で、さまざまな形式と品質のコードを読み取ることが可能。
- AndroidとiOSの両方をサポート。
- Java言語で書かれているため、Androidのネイティブライブラリを直接利用できる。
- iOSについては、zxing2のコードベースがJavaで書かれているため、直接利用することはできないがzxing-cppという、C++で書かれたバージョンのzxingを利用しており、C++のコードはObjective-CやSwiftから直接呼び出すことができるため、iOSのネイティブコードとして利用可能。
デメリット:
- UI 、スキャン結果の管理を自分で実装する必要がある。
- 追加実装内容
- カメラビューの実装:Flutter標準でcameraパッケージを提供しており、これを使用してカメラビューを実装することが可能。このパッケージを使用すると、カメラへのアクセスを許可し、カメラの映像をアプリケーションに表示することができる。
- QRコードの読み取り:zxing2パッケージは、画像を解析し、QRコードを識別して読み取る機能を提供している。cameraパッケージから取得した画像をzxing2に渡すことで、QRコードを読み取ることが可能。
- スキャン結果の管理:QRコードから読み取った情報を管理するために、providerやGetXのステート管理機能を使用することがで、アプリケーション全体で利用できるようになる。
- 追加実装内容
8.flutter_qrcode_reader
特徴:
- flutter_qrcode_readerは、QRコードをスキャンするためのフルウィジェットを提供している。
- QRコードの読み取りに特化したシンプルなパッケージ。
メリット:
- カメラビューとデコーディングを一緒に提供するため、実装が簡単。
- スキャン結果の取得が簡単で、即時のフィードバックをユーザーに提供。
- AndroidとiOSの両方をサポート。
デメリット:
- バーコードのスキャンはサポートなし。
- 一部のデバイスでの互換性に問題がある可能性あり。
結論
私個人としてはQRコードを読み取ることのみ必要であればqr_code_scanner、QRコードの生成も絡めて実装する場合はmobile_scannerという選択をするかと思います。
どのパッケージを選択するかは、アプリケーションの要件や、どのようにQRコードをスキャンし利用したいかによります。また、パッケージのサポート状況やメンテナンス状況、ドキュメンテーションの質、パッケージが依存している他のパッケージとの互換性なども考慮する必要があります。
以上の情報を参考に、皆様のプロジェクトに最適なパッケージを選択していただければ光栄です。
その他のQRリーダーパッケージ
バーコードの読み取り可能
QR生成系パッケージ
バーコード生成系
Discussion