あなたは、どちらの状況にいるかもしれません。あるいは、ビジネスにとってまだ重要なコルダバアプリを引き継ぎ、またはチームが徐々に新しいツールに移行する中で、安定したハイブリッドアプリを維持しています。次に、製品リクエストが来ます: スマホカメラで棚札、チケット、パッケージ、棚札をスキャンする必要があります。
その時は バーコード スキャナ Cordova 仕事が面白くなります。基本的なデモは簡単です。生産的な統合は難しいです。難しい部分は、バーコード形式に合ったプラグインを選択すること、ネイティブのパーミッションをきれいに設定すること、実機でしか表示されないプラットフォームの特性を扱うことです。アプリがフィールドオペレーションやインベントリフローも扱う場合、スキャニング機能は通常、より広範な運用上の懸念と接続されます。 ITの重要なコンポーネントの管理, ここではモバイルアプリはより大きな資産とサービスフローの一部になります。
Cordovaはまだ企業のメンテナンス作業で実際のスタックです。2010年代中盤までに、Cordovaのバーコードスキャンは既にAndroid向けのハイブリッドエンタープライズアプリに進化し、バックエンドサービスと接続されました。包括的なドキュメントの流れを使用し、 cordova create, cordova platform add android、および生成された barcodeScanner-debug.apk を使用した実用的なアプリビルド例は SitePointのCordovaスキャニングウォークスルーから提供されました。チームが長期的なアーキテクチャの選択肢を比較検討している場合、この ネイティブアプリケーションとウェブアプリケーションの比較 は、ハイブリッドアプリがまだ本格的なモバイル配信パイプラインに現れる理由を明確にします。
目次
- Cordova アプリにバーコード スキャナーを追加する理由
- Cordova バーコード スキャナー プラグインを選択する
- インストールとプラットフォームの設定
- アプリケーションにスキャナーを実装する Code
- テストとトラブルシューティングの一般的なエラー
- パフォーマンスのヒントとCapacitorへの移行
Cordovaアプリにバーコードスキャナーを追加する理由
カメラを入力デバイスとして使用することで、ユーザーがシリアル番号、注文ID、製品コードなどの入力を手動で行う必要がなくなります。これにより、ユーザーが間違った値を入力する方法が減り、ユーザー体験が改善されます。
In practice, barcode scanning shows up where mobile apps meet real operations. Warehouse receiving, retail lookup, field service parts validation, visitor check-in, and internal asset tracking all benefit from it. A scanner also changes user expectations. Once the camera is available, users stop tolerating manual code entry unless there’s a clear fallback.
メンテナンスモードのCordovaはまだ意味があります
A lot of teams speak about Cordova like it disappeared. It didn’t. It aged into maintenance-heavy enterprise portfolios, where replacing a working app is harder than extending it. If the app already handles authentication, sync, forms, and offline storage, adding a scanner is often lower risk than rebuilding the whole product.
実用的なルール: Don’t treat a scanning request as a rewrite trigger unless the rest of the app is already failing your team operationally.
Cordova also earned its place because plugins exposed native device capabilities in a way web code could use. That’s why barcode scanning became so common in hybrid mobile apps. It fit the exact pattern Cordova was built for: put a native capability behind a JavaScript API and let the app flow stay mostly web-based.
価値はデモではなくワークフローにある
スキャナーボタンがテキストを返すのは簡単な部分です。主な仕事はそれを取り巻くものです:
- サポートされている符号体系を選択する: アプリはQRコードのみを必要とするかもしれないが、レターやロジスティクス用のコードも必要かもしれない。
- 許可をクリーンに扱う: カメラアクセスが一度失敗すると、ユーザーは機能が壊れていると考えがちだ。
- スキャン後のアクションを設計する: 検索、検証、ナビゲーション、重複処理はカメラUIよりも重要だ。
- 現代化計画: チームがCapacitorに移行する場合、Cordovaのみの仮定に特性を閉じ込めるアプローチは必要ありません。
最後の点は重要です。チームは初期のCordova統合で成功することが多いのですが、移行中に問題に直面します。プラグインの下でネイティブレンダリングモデルが変更されているからです。スキャナーはまだ動作しています。ただし、プレビューは予想どおり表示されません。
Cordova バーコード スキャナー プラグインの選択
アプリをcodeする前に、どの点を最適化するかを決定する必要があります。チームは広範なバーコードサポートが必要な場合もありますが、他のチームはQRフロー用にカメラオーバーレイのみが必要な場合もあります。最初に間違ったプラグインを選択すると、後でリワークが必要になります。特に、製品がリリース後に1つ以上のバーコード形式を要求した場合です。
開発者が最も認識するプラグインは cordova-plugin-barcodescanner. npmパッケージドキュメントには scan(success, fail) APIと、一般的な符号化方式を含む QR_CODE、DATA_MATRIX、UPC_A、EAN_13、CODE_128、PDF_417、AZTEC、これは、retailとlogisticsのシナリオに適合するのではなく、QRベースの使用ケースのみに適合するのではなく、 プラグインパッケージドキュメントのnpm.
プラグイン戦略をより広く評価するチームにとって、この__CAPGO_KEEP_0__の概要は役立ちます。 what to know about Capacitor plugins __CAPGO_KEEP_0__プラグインは、古いCordovaスタイルのプラグインの仮定と新しいネイティブブリッジモデルとの違いを強調するため、有用です。

インストールする前に考慮すべきこと
人気だけでは始めないでください。スキャニングジョブに始めましょう。
アプリが複数のバーコードファミリーを異なるオペレーショナルコンテキストで読み取る必要がある場合、幅広い符号学的サポートが最小限のAPIよりも重要です。アプリがQRチェックインのみ必要な場合、よりシンプルなカメラ体験を提供する限られたツールを受け入れることができます。ジュニア開発者がよく見落とすのは、スキャナー作業は「読み取ることができるか」ということではなく、「オペレーションが使用する正確なラベルを読み取ることができるか」ということです。
良い選択肢のチェックリストは次のようになります。
- バーコードカバレッジ: 生産で使用されている正確な形式を確認してください。
- プラットフォームの期待: 現在チームがサポートしているもの、歴史的にサポートしていたものと区別してください。
- UIモデル: いくつかのプラグインはネイティブのスキャナー フローを開きます。 他のプラグインは埋め込まれたプレビュー アプローチを想定しています。
- 移行耐性: Capacitor にアプリが移行する場合、このプラグインがどれだけ苦痛になるかを尋ねます。
デモで動作するプラグインがアプリのレイアウト、ライフサイクル、または移行パスと戦う場合、通常は間違ったプラグインです。
プラグイン比較表
| 機能 | phonegap-plugin-barcodescanner | cordova-plugin-qrscanner |
|---|---|---|
| 主な用途 | 多数のフォーマットをカバーするバーコード スキャニング | QR フォーカス スキャニング フロー |
| API スタイル | 多くの古いCordovaプロジェクトで見られる慣れ親しんだコールバックパターン | ライブカメラプレビュースタイルの使用ケースでよく選択される |
| バーコード形式の範囲 | 製品がQR以外のバーコードを必要とする場合に適合する | 製品がQRのみを必要とする場合に適合する |
| 移行リスク | 動作は可能ですが、古い仮定が現代のブリッジ移行中に表面化する可能性があります | プレビュー重視のアプローチはレンダリング問題を早期に暴露する可能性があります |
| 最適な選択 | 小売、物流、資産、混合バーコードワークフロー | チェックイン、URL、認証、QRのみのフロー |
その表は実用的な適合度を反映しており、製品が小売と物流シンボロジーを必要とする場合、より広いプラグインカテゴリが通常は安全な選択肢です。製品がQRのみをスキャンし、より制御されたプレビュー体験を必要とする場合、QR指向のパスはより軽量になります。
最もよく見る間違いは、最初のリリースに必要なのはQRコードだけなので、QRコードに特化したツールを選択し、その後UPCやCode 128の機能を強制的に追加することです。ビジネスユーザーがラベルから印刷機、棚、ボックス、または発送書類をスキャンする可能性がある場合、その将来のために今から選択してください。
インストールとプラットフォームの設定
統合は最初のスキャン前に破綻することが多く、JavaScriptの期待とネイティブプラットフォームの設定の間の設定のずれが原因です。チェックリストとしてではなく、迅速なインストールとして扱わないでください。
堅牢な実装フローは、プラグインまたはSDKの追加、キャプチャコンテキストの作成、使用するコードのシンボロジを絞り込む、UIの設定、そして最後にスキャンリスナーの登録と、という順序で行う必要があります。この順序は、ScanditのCordovaガイドのSparkScanの部分で説明されており、ハイブリッドアプリケーションでプロフェッショナルなスキャナーの統合を維持する方法と一致しています。 ScanditのCordovaバーコードスキャニングの開発者ガイド. If your app is still heavily hybrid at the architecture level, this guide to ハイブリッドアプリケーション開発のためのCordovaガイド is a helpful companion.

統合フローから始めましょう
スキャナーフィーチャーは、次の項目を決定することから始める方が良いでしょう。
- アプリが受け入れるバーコードのタイプを決定する
- フルスクリーンアクションか、埋め込まれたワークフローの一部か。
- スキャンが成功した後、どのようなアクションを実行するか。
- カメラが使用できない場合のフォールバック
プラグインのインストールが実際のワークフローとデバイスの一般的な機能に結びついていることを保証するもの。
コルダバのインストール手順
一般的なバーコードスキャナープラグインを使用する伝統的なコルダバ設定の場合、パッケージによってドキュメントされた標準的なインストールコマンドから始めます。
cordova plugin add cordova-plugin-barcodescanner
プロジェクトの設定シーケンスは、以下のようになります。
cordova create barcodeScannerApp
cd barcodeScannerApp
cordova platform add android
cordova platform add ios
cordova plugin add cordova-plugin-barcodescanner
cordova build android
cordova build ios
シーケンスは簡単ですが、そこで止まってはいけません。プラグインのインストール後すぐにビルドして、ネイティブ依存性の問題をUIの構築前に解決してください。code。ビルドが失敗した場合、まずそれを解決してください。
ネイティブの設定で通常最初に破壊されるもの
iOS カメラへのアクセスは、ネイティブプロジェクトの設定で正しく宣言する必要があります。許可の使用説明が欠落している場合、または曖昧である場合、スキャナーはユーザーに機能する特性のように振る舞わないため、明確なカメラプライバシーの説明を追加してください。iOS Info.plist カメラの使用を許可する必要がある理由について説明するもの
On Androidインストール後、Androidの場合、manifestエントリとプラグイン関連のパーミッションを確認する必要があります。プラグインは必要なものを追加しますが、古いプロジェクトでは、累積的な設定変更、カスタムのGradle設定、またはプラグインのオーバーラップがビルド警告または実行時混乱を引き起こすことがあります。プラグインが正常にインストールされた場合でも、manifestが綺麗であると仮定してはなりません。
このチェックリストを使用してください:
- プラットフォームバージョンを確認してください: 古いCordovaプロジェクトでは、古いプラットフォームパッケージが残っていることがあります。
- パーミッションのプロンプトを確認してください: ユーザーの信頼を高めるには、文言とタイミングが重要です。
- 実機でテストしてください: エミュレータではカメラの動作について十分な情報を提供しません。
- スキャナーのスコープを狭くしてください: codeを使用するワークフローが受け入れるタイプのみを有効にします。
必要なフォーマットが1つまたは2つだけの場合、まずそれらを設定してください。幅広いスキャニングは柔軟性があるように見えますが、実際には未読み取れるラベルが多くなるとデバッグが遅くなることがあります。
ジュニア開発者にとっての重要な教訓は、インストールは単にターミナルコマンドだけではないことです。AndroidとiOSが意図的に設定されていないと、JavaScript層でも救いはありません。
アプリケーションにスキャナを実装する際のCode
プラグインがインストールされ、ビルドが完了したら、最初の実装は単純に保ちましょう。スキャンアクションをボタンに置き、フル結果をログし、コールバックフローが機能することを証明する前に、UIを美しくデザインしましょう。
コルダバの一般的なスキャナーパターンでは、プラグインの__CAPGO_KEEP_0__メソッドを使用します。そのコールバックスタイルは古いですが、レガシーコードベースで信頼でき、プロミスやTypeScriptアブストラクションに移行した場合にラップすることも簡単です。Webからネイティブ__CAPGO_KEEP_1__を呼び出す方法について、より明確なメンタルモデルを持つには、この__CAPGO_KEEP_0__がWebとネイティブ__CAPGO_KEEP_1__を繋ぐ方法の説明が役立ちます。 scan(success, fail) codeがWebとネイティブcodeを繋ぐ方法の説明 how Capacitor bridges web and native code Plain JavaScriptの例

__CAPGO_KEEP_0__
__CAPGO_KEEP_1__
<button id="scan-button">Scan barcode</button>
<div id="scan-result"></div>
document.addEventListener('deviceready', function () {
var button = document.getElementById('scan-button');
var resultEl = document.getElementById('scan-result');
button.addEventListener('click', function () {
cordova.plugins.barcodeScanner.scan(
function (result) {
if (result.cancelled) {
resultEl.textContent = 'Scan cancelled';
return;
}
resultEl.textContent =
'Text: ' + result.text +
' | Format: ' + result.format;
},
function (error) {
resultEl.textContent = 'Scan failed: ' + error;
}
);
});
});
これは3つの便利なことを行います。待っています deviceready,スキャンを意図的なユーザーアクションにバインドし、成功と失敗の両方を明示的に処理します。キャンセルされたケースを省略しないでください。ユーザーはカメラフローから常に戻ります。
TypeScriptの例
TypeScriptを使用するプロジェクトの場合、結果の形状を定義して、残りのアプリがきれいに消費できるようにします:
interface BarcodeScanResult {
text: string;
format: string;
cancelled: boolean;
}
function scanBarcode(): void {
cordova.plugins.barcodeScanner.scan(
(result: BarcodeScanResult) => {
if (result.cancelled) {
renderStatus('Scan cancelled');
return;
}
handleScannedCode(result);
},
(error: unknown) => {
renderStatus(`Scan failed: ${String(error)}`);
}
);
}
function handleScannedCode(result: BarcodeScanResult): void {
renderStatus(`Scanned ${result.format}: ${result.text}`);
if (!result.text) {
renderStatus('Empty scan result');
return;
}
lookupItemByCode(result.text);
}
function renderStatus(message: string): void {
const el = document.getElementById('scan-result');
if (el) el.textContent = message;
}
function lookupItemByCode(code: string): void {
console.log('Lookup code:', code);
}
スキャンとビジネスロジックを分離するバージョンです。それが重要です。スキャナープラグインは入力をキャプチャするだけで、検証、検索、ナビゲーションは他の場所に属するものです。
スキャン結果の処理
スキャン後の良好なフローは、通常、次のいずれかです:
- 検索フロー: スキャナーテキストを使用して、製品、注文、または資産レコードを取得します。
- 検証フロー: Compare the scanned value against an expected code already on screen.
- ナビゲーションフロー: スキャナーのアイテムに紐づいたタスクにユーザーをルーティングする。
- キャプチャーフロー: ローカルに値を保存して、後で同期する。
スキャナーのコールバックが API の呼び出し、DOM の更新、分析、ナビゲーションに使われるのを避ける。値を速やかに転送する。
また、早期のテストでは、raw の結果をログする。生産用 UI が __CAPGO_KEEP_0__ の値のみを必要としている場合でも、 text返された format はデバッグに役立つ。オペレーションが「スキャナーがこの code を読めない」と言う場合、フォーマットデータは、バーコードのタイプが問題であるか、バーコードの品質が問題であるかを判断するのに役立つ。
テストとトラブルシューティングの一般的なエラー
ほとんどのバーコードスキャナー Cordova の問題は、スキャン API 自身ではなく、ウェブ UI、ネイティブ ビュー、デバイスのパーミッションの境界から来る。ここでは、清潔なデモが混乱したバグレポートに変わり、
Android のレンダリングのバグが Capacitor のマイグレーションまたは混合 Cordova-Capacitor のセットアップで発生する。これは、開発者が Capacitor の issue #1213 で明確に説明したものである。 「私はこの capacitor アプリでこのプラグインを試したが、スキャナーはアプリの後ろに隠れているように見えます」という。、そして、ネイティブのウェブビューの背景を透明にするだけでなく、DOM の透明性の変更を合わせる必要があり、標準の Cordova のチュートリアルが通常カバーしていない、ドキュメント化されている。 Capacitor Android rendering issue discussion. __CAPGO_KEEP_0__ ハイブリッド移行のデバッグ中は、この debugging Capacitor アプリのためのガイド は、参考にしておく価値があります。
The Android preview behind the app bug
症状
スキャナーを開始します。パーミッションは正常です。明らかなクラッシュはありません。ただし、カメラのプレビューは、UIの後ろに隠れ、またはブロックされます。
原因
ネイティブのスキャナー ビューと、ウェブビューは、元の Cordova プラグインが想定していたレイヤー構造と異なります。Android の Capacitor スタイルのセットアップでは、ウェブビューの背景は不透明のままになり、ネイティブのプレビューは存在しますが、ウェブビューの下に隠れます。
解決策
両方の側面に透明なビュー設定を適用してください:
- ネイティブ側: ウェブビューの背景を透明に設定してください。
- Web側: スキャナー プレビュー上に座っているコンテナ要素から不透明な背景を削除してください。
- レイアウト側: フルスクリーンラッパー、モーダルシェル、フレームワークページコンテナのデフォルトの背景色を確認してください。
- テスト側: 物理的なAndroidデバイスでテストしてください。開発シェル内でのレイアウトの動作は誤解を招く可能性があります。
このバグは、実際にはビューの組み合わせ問題であるのに、プラグインが壊れていると開発者が思うことがあります。
許可の失敗と誤った否定
許可が失敗すると、スキャナーに問題があるように見えることがあります。
カメラへのアクセスを拒否した場合、コールバックは一般的なエラーを表面化したり、スキャナーが期待どおりに表示されない場合があります。許可の拒否をUIの通常のbranchとして扱い、ユーザーに何が起こったかと再試行する方法を伝えてください。特にiOSでは、不明瞭な許可のテキストはユーザーがスキャナーを表示する前に不信感を生み出します。
いくつかの習慣が役立ちます:
- ユーザーが明確なアクションを実行してスキャンをトリガーする: 許可の求め方は疑わしいように思われない。
- フォールバック入力を表示: 手動入力はワークフローを維持する。
- テストで拒否してリトライするパス: 多くのチームは、ハッピーパスを一度だけテストする。
ビルドとデバイスのテストの問題
特定の環境ではみることができる失敗がある。
| 問題 | 起こりそうな原因 | 実用的な修正 |
|---|---|---|
| スキャナーが開くが、有用な結果が返ってこない | 非対応または予期せぬバーコード形式 | 知っているラベルでテストしてください。使用するシナリオに合わせて設定されている |
| プラグインをインストールした後、ビルドが破綻する | 古いプロジェクトでプラットフォームまたは依存関係のずれ | アプリケーションcodeの変更前にプラットフォームパッケージを整理する |
| 一つのアプリシェルで動作するが、別のアプリシェルでは動作しない | ビューのレイヤーングラフィックまたはCSSの干渉 | 画面を最小限のレイアウトに戻し、スタイルを徐々に追加する |
| エミュレータの動作は誤解を招く | デバイスの現実とは異なるカメラのシミュレーション | 物理的なAndroidとiPhoneハードウェアでテストする |
デバッグ中にスキャナーが動作する場合、問題は通常レイアウトまたはアプリシェルcodeであり、プラグインではありません。
パフォーマンスのヒントとCapacitorへの移行
実際には、バーコードスキャナーは正しくデコードできても、ユーザーにとって失敗することがあります。問題は通常、遅延、フリッカー、カメラプレビューの不具合、またはAndroidの画面が同じテストプールのデバイス間で異なる挙動を示すことです。
古いCordovaアプリでは、デコード器が弱点であることがよくありません。ウェブビュー、ビューのレイヤーング、codeがスキャン結果に反応するものが、バーコード認識自体よりも多くのトラブルを引き起こします。
最初に、スキャン画面を狭い範囲で維持してください。スキャンするのは棚のラベルだけなら、棚のラベルだけをスキャンしてください。余分なフィルタ、アニメーションパネル、広範な状態の更新は、Androidウェブビューのレンダリングがすでに脆弱なところで再描画作業を増やします。
いくつかの変更が速く効果を発揮します:
- 受け入れることができるバーコード形式を制限します。 プラグインがサポートしている場合、間違った読み取りを減らし、テストカバレージを簡単に推測できるようにします。
- 後処理のロジックを短くします。 UIの最小限の部分を解析、検証、更新します。
- 一時的に重複読み取りをブロックします。 一部のデバイスでは、ユーザーがカメラを動かすまで同じ結果を複数回発生させることがあります。
- 手動入力をフローに組み込んでください。 実際の環境では、損傷したラベル、悪い照明、反射的なパッケージングがまだ発生する。
- Androidの再描画コストを注意深く観察すること。 重いオーバーレイ、CSSトランジション、レイヤードコンポーネントは、CordovaのWebビュー内でカメラプレビューを不安定にすることがある。

実用的なCapacitorへの移行のための実践的なパス。
最も綺麗なCordovaからCapacitorへの移行は、段階的に行う必要がある。チームがアプリケーションコンテナ、スキャナープラグイン、パーミッションフロー、UIオーバーレイを一度に置き換えると、原因を特定できなくなる。
代わりにこの順序を使用:
-
現在のプラグインを検査する
すべてのCordovaプラグインをリストし、それぞれを有効、置き換え可能、またはリスクがあると判断し、古いプラットフォームの動作に依存しているプラグインをマークする。 -
アプリケーションシェルを移動する
Run the existing web app inside Capacitor before replacing scanner code. That separates container issues from plugin issues. -
必要に応じてCordovaプラグインを短期間使用する
互換性のあるバージョンは、同時にスキャナー、ファイルアクセス、パーミッションのハンドリングを書き直すよりも安全です。 -
脆弱なスキャナー部分を早期に置き換えます。
カスタムオーバーレイ、未文書化のAndroidの動作、または古いカメラハンドリングを依存する古いプラグインは、優先順位の高いリストの先頭に移動する必要があります。
Androidカメラプレビューのバグには特別な注意が必要です。デバッグ時間を浪費することが多く、スキャナー画面が失敗することもあります。nativeプレビューがwebviewの後ろに隠れ、エッジでクリップされる、または特定のAndroidデバイスで黒く表示されることがあります。その時点で、バーコードプラグインが最初に非難されることがあります。ただし、ビューの組み合わせが根本的な問題であることが多いです。
その場合、レンダリングの調査としてではなく、スキャナーの調査として扱うのではなく、装飾的なオーバーレイを削除し、プレビュー、1つのトリガー、1つの結果フィールドにページを簡素化します。プレビューが安定したら、問題は通常、画面構造またはCSSではなく、デコードではありません。
This is also where a migration to Capacitor starts to justify itself. Capacitor does not remove every camera bug, but it usually gives you a cleaner boundary between native view handling and web UI code. For barcode scanning, @capgo/camera-preview カメラプレビューを表示し、カスタマイズ可能なコントロールとともにnativeオーバーレイとして表示します。JavaScriptでフレームをデコードすることができます。プレビューがwebviewの後ろに隠れません。Zebraデバイスでのエンタープライズスキャン用に @capgo/capacitor-zebra-datawedge DataWedgeプロファイルとスキャントリガーを管理します。NFCタグワークフロー用に @capgo/capacitor-nfc iOSとAndroidでネイティブのタグの発見、読み取り、書き込みをサポートします。
Cordovaプロジェクトはプラグインの古さ、プラットフォームのズレ、古い統合内の隠れた仮定によって破壊されます。 Capacitor プロジェクトは、ライフサイクルハンドリングとネイティブレイヤーの問題に関連していますが、ネイティブ側が明示的であるため、エラーのトレースが容易です。
現在のCordovaスキャナがデバイス固有の修正のスタックでしか動作しない場合、修正を追加するのをやめましょう。スキャン画面を安定させ、Androidのプレビューのバグが実際にウェブビューのレイヤー問題であるかどうかを確認し、制御されたステップで移行しましょう。そのパスは1週間で遅くなりますが、プロジェクトの残りの部分では速くなります。