👋

[Flutter]QRコードリーダーパッケージ8選📗 それぞれのメリデメを知らべてみた

2023/05/16に公開

背景

現在Flutterを使用しモバイルアプリ開発を行なっています。ある機能を開発するのにQRコードを読み取る機能が必要になり、Flutterで使用できるQR コードリーダーを提供しているパッケージ(Dartコードのみで構成されているわけではないので分類的にはプラグインと呼んだ方が正解なのかもしれませんがこの記事ではわかりやすくパッケージで統一します)を調べました。この記事では調査したパッケージの特徴についてまとめた結果を紹介します。

以下の8つのパッケージを比較検討します。

  1. qr_code_scanner
  2. mobile_scanner
  3. qrscan
  4. barcode_scan2
  5. flutter_barcode_sdk
  6. fast_qr_reader_view
  7. zxing2
  8. 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

https://pub.dev/packages/qr_code_scanner
https://github.com/juliuscanute/qr_code_scanner

特徴:

qr_code_scannerは、QRコードを簡単にスキャンできるステートフルウィジェットを提供し、カメラからの直接入力をデコードし、QRコードの内容を取得することが可能。

メリット:

  • カメラビューとQRコードのデコーディングを一緒に提供するため、実装が簡単。
  • QRコードのデコーディング速度が速い。
  • iOSとAndroidの両方で動作。
    • iOS,AndroidともFlutterQrPluginを使用している。
      • FlutterQrPluginは、ネイティブのカメラAPIを直接扱い、カメラからの入力をQRコードのデコードにつなげる機能を提供。このプラグインはAndroidとiOSの両方をサポートし、それぞれのプラットフォームのネイティブコードを利用してカメラの制御やQRコードのデコードを行う。開発者はqr_code_scannerパッケージが提供するインターフェースを通じてQRコードのスキャン機能を利用するためFlutterQrPluginを意識する必要はない。
  • QRコードスキャナーウィジェットを提供し、そのウィジェットはカメラのビューとスキャン結果を管理が可能。また、フラッシュライトのオン/オフとカメラの前後切替機能も提供している。

デメリット:

  • バーコードのスキャンはサポートしていなく、QRコードのみに対応している。
  • 現在メンテナンスのみ。
  • 一部のデバイスでの互換性に問題がある可能性があり。

2.mobile_scanner 947Likes

https://pub.dev/packages/mobile_scanner
https://github.com/juliansteenbakker/mobile_scanner

特徴:

  • mobile_scanner は、QRコードだけでなく、バーコードもスキャンできるパッケージ。
  • また、バーコードとQRコードの生成もサポートしている。
  • このパッケージはネイティブのバーコードスキャン機能を使用しており、AndroidとiOSの両方で動作。

メリット:

  • QRコードとバーコードの両方をスキャン可能。
  • QRコードとバーコードの生成もサポートしている。
  • AndroidとiOSサポート
  • ダークモードに対応している。
  • Barcode objectにはphone、sms、url、wifiなどの便利なプロパティが揃っているためスキャン後の処理が実装しやすい。

デメリット:

  • 強いていうならqr_code_scannerパッケージなどと比べると若干新しいため、あまり多くのサポートやコミュニティのバックアップがない。

3.qrscan 375Likes

https://pub.dev/packages/qrscan

https://github.com/wu9007/qrcode_scanner

特徴:

qrscanは、QRコードとバーコードをスキャンするためのフルウィジェットを提供している。また、QRコードの生成も可能。

メリット:

  • スキャンと生成の両方をサポートしている
  • カメラビューとデコーディングを一緒に提供するため、実装が簡単。
  • スキャンしたQRコードから直接URLを開いたり、電話番号をダイヤルしたり、SMSを送信したりする機能を提供。

デメリット:

  • Androidのみサポート。
  • 一部のデバイスでの互換性に問題がある可能性あり。
  • QRコードの生成のカスタマイズオプションが限られる。
  • バーコード形式のサポートはない。

4.barcode_scan2 207Likes

https://pub.dev/packages/barcode_scan2
https://github.com/mono0926/barcode_scan2

特徴:

  • barcode_scan2 は、QRコードとバーコードの両方をスキャンするためのパッケージで、AndroidとiOSの両方をサポートしている。また、カメラビューを提供し、コードのスキャン結果を簡単に取得することが可能。加えてカメラのフラッシュの制御やスキャンのビープ音の制御など、様々な設定をカスタマイズすることができます。

メリット:

  • QRコードとバーコードの両方をスキャン可能。
  • AndroidとiOSの両方をサポート。
  • カメラのフラッシュやスキャンのビープ音など、様々な設定のカスタマイズが可能。

デメリット:

  • 一部の特殊なバーコードタイプ(例えば、一部の1Dバーコード)はスキャンできない可能性あり。
  • UIのカスタマイズ性が他の一部のパッケージに比べて限定的である。
    • 具体的には、パッケージが提供するデフォルトのスキャン画面(カメラビュー)は、特定のレイアウトとデザインを持ち、このデザインを大幅に変更することは、パッケージが提供するオプションによると制限されている。例えば、スキャン画面の色やボタンの配置、またはスキャンフレームの形状などのカスタムをサポートしていない。

5.flutter_barcode_sdk 111Likes

https://pub.dev/packages/flutter_barcode_sdk
https://github.com/yushulx/flutter_barcode_sdk

特徴:

  • flutter_barcode_sdk は、非常に強力で効率的な1D(バーコード)と2D(QRコードなど)のコードスキャンエンジンを提供。これは、高度な画像処理とデコード技術を使用して、様々な種類のコードを読み取ることが可能。しかし、このパッケージは商用利用が可能で、ライセンスが必要です。

メリット:

デメリット:

  • 商用利用が可能だが、ライセンスが必要。そのため、小規模なプロジェクトや個人的な使用にはコストがかかり不向き。

6.fast_qr_reader_view 51Likes

https://pub.dev/packages/fast_qr_reader_view
https://github.com/facundomedica/fast_qr_reader_view

特徴:

  • fast_qr_reader_viewは、QRコードをスキャンするためのフルウィジェットを提供。
  • その名前が示す通りスキャン速度に特化している高速なQRコードリーダー。
  • このパッケージは現在アクティブな開発が停止しており、iOS 13以降のバージョンでは問題が発生することが報告されている。

メリット:

  • スキャン速度が非常に高速で、パフォーマンスに優れている。
  • カメラビューとデコーディングを一緒に提供するため、実装が簡単。
  • AndroidとiOSの両方をサポート。

デメリット:

  • バーコードのスキャンはサポートしていなく、QRコードのみに対応。
  • 一部のデバイスでの互換性に問題がある可能性あり。
  • このパッケージは現在アクティブな開発が停止しており、iOS 13以降のバージョンでは問題が発生することが報告されている。
  • Dart3非対応

7.zxing 237Likes

zxing→Zebra Crossing(横断歩道?)

https://pub.dev/packages/zxing2/example
https://github.com/xvrh/zxing-dart/tree/master/lib/src

特徴:

  • zxing for androidqr_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 、スキャン結果の管理を自分で実装する必要がある。
    • 追加実装内容
      1. カメラビューの実装:Flutter標準でcameraパッケージを提供しており、これを使用してカメラビューを実装することが可能。このパッケージを使用すると、カメラへのアクセスを許可し、カメラの映像をアプリケーションに表示することができる。
      2. QRコードの読み取りzxing2パッケージは、画像を解析し、QRコードを識別して読み取る機能を提供している。cameraパッケージから取得した画像をzxing2に渡すことで、QRコードを読み取ることが可能。
      3. スキャン結果の管理:QRコードから読み取った情報を管理するために、providerやGetXのステート管理機能を使用することがで、アプリケーション全体で利用できるようになる。

8.flutter_qrcode_reader

https://github.com/bcko/flutter_qrcode_reader

特徴:

  • flutter_qrcode_readerは、QRコードをスキャンするためのフルウィジェットを提供している。
  • QRコードの読み取りに特化したシンプルなパッケージ。

メリット:

  • カメラビューとデコーディングを一緒に提供するため、実装が簡単。
  • スキャン結果の取得が簡単で、即時のフィードバックをユーザーに提供。
  • AndroidとiOSの両方をサポート。

デメリット:

  • バーコードのスキャンはサポートなし。
  • 一部のデバイスでの互換性に問題がある可能性あり。

結論

私個人としてはQRコードを読み取ることのみ必要であればqr_code_scanner、QRコードの生成も絡めて実装する場合はmobile_scannerという選択をするかと思います。
どのパッケージを選択するかは、アプリケーションの要件や、どのようにQRコードをスキャンし利用したいかによります。また、パッケージのサポート状況やメンテナンス状況、ドキュメンテーションの質、パッケージが依存している他のパッケージとの互換性なども考慮する必要があります。
以上の情報を参考に、皆様のプロジェクトに最適なパッケージを選択していただければ光栄です。

その他のQRリーダーパッケージ

https://pub.dev/packages/flutter_qr_reader
https://pub.dev/packages/qr_mobile_vision

バーコードの読み取り可能

https://pub.dev/packages/flutter_barcode_scanner
https://pub.dev/packages/simple_barcode_scanner

QR生成系パッケージ

https://pub.dev/packages/qr_flutter
https://pub.dev/packages/qr
https://pub.dev/packages/pretty_qr_code

バーコード生成系

https://pub.dev/packages/barcode

Discussion