barcode-capture-rn について
React NativeでScandit BarcodeCaptureを統合、更新、置き換えるためのコーディングスキルです。バージョン別の資料でAPIを確認し、ライフサイクル、カメラ、スキャン処理のよくある問題を避ける方法を示します。
主な機能
- 01資料に基づくAPI確認
- 02統合と移行のガイド
- 03カメラとライフサイクルの注意点
- 04スキャンコールバック処理
- 05Scanditライセンス設定の案内
活用シーン
- 01React Nativeアプリへのバーコードスキャン追加
- 02既存のScandit統合の更新
- 03別のスキャンライブラリからの置き換え
MCP 対応
リモートのScandit MCPサーバーを使ったスキャナーライセンスの設定と、トライアルキーの取得方法を説明します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scandit/ skills --skill barcode-capture-rnインストール後、Claude Code で/barcode-capture-rnを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/integration.mdmigration.mdthird-party-migration.md詳細
BarcodeCapture React Native スキル
重要:内部知識を鵜呑みにしないでください
トレーニングデータに、古くなった、または誤った Scandit SDK API が含まれている可能性があります。BarcodeCapture API は SDK のメジャーバージョン間で変更され、プロパティの名前変更、削除、構成変更が行われることがあります。また、React Native プラグインの仕様(インポート、ネイティブリンク、pod install、パッケージ名)も進化しています。
コードを記述または提案する前に、必ずこのスキルで提供されているリファレンスで API を確認してください。 記憶しているメソッドシグネチャ、パラメーター、プラグイン名、プロパティ名に頼らないでください。提供されているリファレンスに API が見つからない場合は、回答する前に該当するドキュメントページを取得してください。
注意すべき React Native 固有の点:
DataCaptureContext.initialize(licenseKey)は、他の Scandit API を使う前に必ず一度だけ呼び出す必要があります。これにより、他のすべてが参照するシングルトンであるDataCaptureContext.sharedInstanceがセットアップされます。複数のコンテキストを作成しないでください。dataCaptureContext.dispose()は絶対に呼び出さないでください。 コンテキストはプロセス全体で共有されるシングルトンです。これを破棄すると、アンマウント対象の画面だけでなく、アプリ内のすべての Scandit 画面が動作しなくなります。画面のアンマウント時には、dataCaptureContext.removeMode(barcodeCapture)を呼び出し、オーバーレイを削除し、リスナーを削除して、カメラをFrameSourceState.Offに切り替えてください。これでクリーンアップは完了です。dispose()を追加で呼び出さないでください。- iOS では、Scandit パッケージをインストールまたはアップグレードするたびに、
npx [email protected](またはcd ios && pod install)を実行する必要があります。Android では Gradle によって自動リンクされるため、手動での作業は不要です。 - Metro のバンドラーキャッシュによって、Scandit パッケージのアップグレードが反映されないことがよくあります。プラグインのバージョンを上げた後、再ビルドしても古い動作が見られる場合は、Metro を
--reset-cacheを付けて起動してください。 - BarcodeCapture は、単独で動作するビューコンポーネントではありません。コンテキストを渡した
<DataCaptureView>をレンダリングし、DataCaptureView.addOverlay(...)を使ってBarcodeCaptureOverlayをそのビューに追加し、さらにCamera.default、dataCaptureContext.setFrameSource(camera)、camera.switchToDesiredState(FrameSourceState.On)を使ってカメラを自分で制御する必要があります。アンマウント時にこれらすべてを終了する責任は、インテグレーターにあります。SDK 8.7 以降では、ルートのScanditProvider内に配置したBarcodeCaptureAioViewが、単独で動作する代替手段です。references/third-party-migration.mdの SDK 8.7+: BarcodeCaptureAioView セクションを参照してください。 didScan内では、スキャンごとの処理(画面遷移、ネットワーク処理、UI 更新など)を行う前に、barcodeCapture.isEnabled = falseを設定し、次のコードを読み取る準備ができたら再び有効にしてください。リスナーのコールバック中はフレーム処理がブロックされます。モードを無効にしないと、ハンドラーが戻る前にdidScanが重複して呼び出されます。- iOS(
ios/<App>/Info.plistのNSCameraUsageDescription)と Android(PermissionsAndroidによる実行時のリクエスト)の両方で、カメラ権限が必要です。プラグインによってマニフェスト権限は自動的に宣言されます。
インテントに応じた参照先
ユーザーのリクエストに基づき、回答する前に適切なリファレンスファイルを読み込んでください。
- BarcodeCapture を新規に統合する(例:「アプリに BarcodeCapture を追加する」「バーコードスキャンをセットアップする」「React Native で BarcodeCapture を使うには」「ビューファインダーを追加するには」)→ references/integration.md を読み、そこに記載された手順に従ってください。
- 既存の BarcodeCapture 統合を移行またはアップグレードする(例:「v6 から v7 にアップグレードする」「BarcodeCapture を移行する」「Scandit パッケージを v8 に上げる」「SDK バージョン間で何が変わったか」)→ references/migration.md を読み、そこに記載された手順に従ってください。
- サードパーティ製スキャナーを BarcodeCapture に置き換える(例:「react-native-vision-camera の useCodeScanner を Scandit に置き換える」「vision-camera v5/expo-camera の CameraView から Scandit に移行する」「バーコードスキャナーライブラリから BarcodeCapture に切り替える」)→ references/third-party-migration.md を読み、そこに記載された手順に従ってください。
API 使用ポリシー
以下の Scandit リファレンスに明示的に記載されている API のみを使用してください。メソッドシグネチャ、パラメーター、プロパティ名、インポートを推測したり、作り出したりしないでください。API が存在するか、どのように呼び出すかが不明な場合、または TypeScript/ランタイムエラーが発生した場合は、回答する前に該当するリファレンスページを取得してください。ユーザーに自分でドキュメントを確認するよう伝えてはいけません。回答後は、ユーザーがさらに調べられるよう、必ず関連リンクを含めてください。
ドキュメントの URL を決して組み立てたり、推測したりしないでください。 特定のクラスやプロパティの API ページが必要な場合は、次の手順に従ってください。
- まず、取得済みのページ(例:Advanced Configurations ページ)に、そのページへの直接リンクが含まれているか確認します。トピックページには関連する API シンボルへの直接リンクがあります。取得時のプロンプトでは、コンテンツと併せてリンクも必ず要求してください。
- 直接リンクが見つからない場合は、API インデックス(下表の完全な API リファレンスを参照)を取得し、そこから実際のリンクを抽出して、そのリンク先を開いてください。
URL 構造は SDK のバージョンやパッケージパス(例:api/ui/ サブディレクトリ)によって異なります。推測すると 404 エラーになります。
フレームワークのバリエーションに関するポリシー
React Native アプリは、クラスコンポーネントまたは関数コンポーネントで記述できます。このスキルの例では、公式の React Native サンプルと現在の React Native の慣例に沿った、フックを使う関数コンポーネントを使用します。対象プロジェクトのほかの場所にレガシーなクラスコンポーネントが残っていても、新しい BarcodeCapture コードは関数コンポーネントで記述してください。アプリのほかの部分のコンポーネントスタイルを書き換える必要はありませんが、BarcodeCapture の統合部分では現在のイディオム(useRef、useEffect、useFocusEffect、useMemo)を使用してください。
例は TypeScript(.tsx)です。対象プロジェクトがプレーンな JavaScript(.js/.jsx)の場合は、型注釈を削除し、インポートと構造はそのままにしてください。
ライセンスキー
スキャンには Scandit ライセンスキーが必要です。このスキルでは、ライセンス製品は native、ライセンスプラットフォームは ios と android です。
次の手順を順番に進めてください。MCP のためにユーザーを待たせてはいけません。
-
Scandit MCP サーバーが接続されている場合 — 製品に
native、プラットフォームにiosとandroid、app_identifierにアプリのバンドル ID またはアプリケーション ID(Web の場合は本番ドメイン。localhostは不可)、env_varにSCANDIT_LICENSE_KEYを指定して、ensure_scanner_setupを呼び出してください。返されたコマンドは実行しないでください。その後、この結果またはlist_license_keysからキーの ID を取得し、get_license_keyを呼び出してください。list_license_keysでキーがトライアルではないと示された場合は、取得する前にユーザーに確認してください。チャットでは、マスクされたプレビューのみを表示してください。キー全体を決して表示してはいけません。 -
接続されていない場合 — ユーザーに、MCP クライアントでリモート Scandit MCP サーバー
https://ssl.scandit.com/mcpに接続できることを一度だけ伝え、その後は手順 1 から続けてください。MCP クライアントの設定を自分で編集してはいけません。認証はブラウザー経由のため、ヘッドレス環境または CI ではサポートされていません。サーバーが発行するのはトライアルキーのみです。本番ライセンスの作成、取り消し、変更は行いません。
-
ユーザーが希望しない場合、または MCP クライアントを持っていない場合 — ユーザー自身で https://ssl.scandit.com からキーを生成し、貼り付けてもらってください(アカウントをまだ持っていない場合:https://ssl.scandit.com/dashboard/sign-up?p=test)。
その後、キーをコードに設定します。プレースホルダーの代わりに、ライセンスキーを指定する呼び出しへキーを記述してください。使用するのは get_license_key が返したキー、またはユーザーが貼り付けるか提供したキーです。チャットでは引き続き、マスクされたプレビューのみを表示してください。キーを探すために、プロジェクト、そのファイル、または環境を検索してはいけません。
参考資料
質問に応じて、ユーザーを適切なリソースに案内します。
| トピック | リソース |
|---|---|
| React Native の統合 | はじめに · サンプル |
| 高度なトピック(カスタムビューファインダー、位置の選択、スキャン意図、複合コード、フィードバック) | 高度な設定 |
| メジャー SDK バージョン間の移行 | 6 → 7 · 7 → 8 |
| API リファレンス全文 | BarcodeCapture API |