react-native-vision-camera について
react-native-vision-camera v5 を扱う AI コーディングエージェント向けの案内スキルです。タスク別の資料へ誘導し、v4 からの大きな API 変更点を説明します。
主な機能
- 01タスクに応じた資料への誘導
- 02v5 のセットアップと移行
- 03出力と制約 API の説明
- 04撮影とカメラ制御の解説
- 05フレーム処理と高度な機能
活用シーン
- 01新しいカメラ画面のセットアップ
- 02v4 のカメラ実装の移行
- 03出力とカメラ制約の選択
- 04フレーム処理や撮影機能の追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ margelo/ react-native-skills --skill react-native-vision-cameraインストール後、Claude Code で/react-native-vision-cameraを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced-features.mdcapture-and-controls.mdframe-processors.mdmigration-templates.mdmigration-v4-to-v5.mdoutputs-and-constraints.mdquickstart-v5.md詳細
react-native-vision-camera (v5)
VisionCamera v5 は、メンテナンスが継続されている react-native-vision-camera の最新バージョンです。新しい Constraints API、Output ベースのアーキテクチャ、メモリ内 Photo を備えた、Nitro Modules による全面的な書き換え版であり、v4 のフォーマット/プロパティモデルとは互換性がありません。v4 の機能のほとんどは削除または名称変更されています。v5 は段階的なアップグレードではなく、新しい API として扱ってください。
このスキルはルーターです。まずこのファイルを読み、次にタスクに合ったリファレンスを読み込んでください。各リファレンスは単独で完結しています。必要以上に読み込まないでください。
どのリファレンスを読み込むか
- 本番環境での低レイテンシな GPU、ML、CV、またはフレーム連動オーバーレイの作業: 専用の
react-native-vision-camera-realtimeスキルを使用してください。セットアップや API の基本も必要な場合に限り、基本的なフレーム処理のリファレンスも読み込んでください。 - 新規インストール、画面への Camera の表示、権限、最小限のボイラープレート → references/quickstart-v5.md
- v4 のコードベースの移行、変更点の確認 → references/migration-v4-to-v5.md(ユーザーが v4、takePhoto、useCameraFormat、format プロパティ、photo/video のブール値プロパティ、または core の CodeScanner に言及した場合は、最初に読み込んでください)
- v4 の画面全体の移行 — 移植できる完全な変更前/変更後のファイルが必要な場合 → references/migration-templates.md(写真画面、動画画面、フレームプロセッサー+ML、バーコードスキャナー、プロ向けカメラのコピー&ペースト可能な完全なテンプレート)
- 出力の選択/アタッチ、制約による fps/HDR/解像度の設定、セッションのライフサイクル → references/outputs-and-constraints.md
- フレームプロセッサー、worklet、非同期フレーム処理、ピクセル形式、ネイティブプラグインの作成 → references/frame-processors.md(ユーザーが「frame processor」「worklet」「ML on frames」「Nitro plugin」「vision-camera-plugin-*」と言及した場合に読み込んでください)
- 写真の撮影(コールバック、RAW、HDR、プレビュー画像を含む)、動画の録画、Recorder のライフサイクル、手動 AE/AF/AWB、露出補正、ズーム、フォーカス → references/capture-and-controls.md
- 深度ストリーミング、マルチカメラ、Skia プレビュー、ML 用 GPU リサイズ、バーコードスキャナーパッケージ、GPS 位置情報メタデータ、カスタムネイティブ出力 → references/advanced-features.md
迷った場合は、references/migration-v4-to-v5.md を読み込んでください。v4 との対比を通じて新しい API の構成を説明しており、全体像を素早く把握できます。
v5 コードで譲れないルール
これらは、v4 を「知っている」人が見落としやすいルールです。確認を求めずに適用してください。
-
Nitro のピア依存関係をインストールしてください。
react-native-nitro-modulesとreact-native-nitro-imageは必須のピア依存関係です。フレームプロセッサには、さらにreact-native-vision-camera-workletsとreact-native-worklets(Software Mansion のもの。-coreではありません)が必要です。Worklets - https://docs.swmansion.com/react-native-worklets/docs/ -
outputs={[...]}はphoto/video/frameProcessor/codeScannerプロパティに置き換わります。usePhotoOutput、useVideoOutput、useFrameOutput、useDepthOutput、useObjectOutput(またはバーコードパッケージのuseBarcodeScannerOutput)で出力を作成し、配列で渡してください。キャプチャメソッド(capturePhoto、createRecorder)は Camera の ref ではなく、Output にあります。 -
formatプロパティもuseCameraFormatもありません。constraints={[...]}を使用してください。配列の順序が優先度を表し、先頭ほど優先されます。Camera は最も近い対応設定を自動でネゴシエートするため、{ fps: 99999 }のような実現不可能な制約を指定しても、エラーにはなりません。 -
takePhoto()はありません。 メモリー上のPhotoを取得するにはphotoOutput.capturePhoto(settings, callbacks)を、ファイルパスを取得するにはphotoOutput.capturePhotoToFile(...)を使用してください。デフォルトはメモリー上への保存です。明示的に求められない限り、一時ファイルを書き込まないでください。 -
フレームプロセッサのプラグインは Nitro Modules である必要があります。 v4 の
FrameProcessorPlugin基底クラス、VISION_EXPORT_SWIFT_FRAME_PROCESSORマクロ、VisionCameraProxy.addFrameProcessorPluginは廃止されています。v5 のプラグインは、型付きの Nitro 仕様を持つHybridObjectです。references/frame-processors.md を参照してください。 -
すべての
Frame(およびDepth)で必ず.dispose()を呼び出してください。 バッファプールには上限があるため、フレームを解放し忘れるとパイプラインが停止します。処理はtry { ... } finally { frame.dispose() }で囲んでください。asyncRunner.runAsync(...)で処理をオフロードする場合、戻り値がtrueなら非同期コールバック内で破棄し、falseならelse分岐で直ちに破棄してください。 -
CodeScanner はコアに含まれていません。
react-native-vision-camera-barcode-scannerは独立したパッケージで、両プラットフォームで MLKit を使用します。ML 依存なしで、ネイティブの AVFoundation メタデータを使った iOS 専用の物体検出(QR、顔、人体)には、コアのuseObjectOutputを使用してください。 -
Camera はマウントしたままにして、
isActiveを切り替えてください。 再マウントするとセッションが破棄されます。react-navigation のuseIsFocused()と連携し、画面に表示されていない間はセッションを Idle → Ready に移行させ、すぐに再開できるよう設定を維持してください。 -
フレーム出力の
pixelFormatのデフォルトは'native'(ゼロコピー)であり、'yuv'ではありません。'native'は、セッションでネゴシエートされたnativePixelFormatを変換なしでストリーミングします(YUV、RGB、RAW、または'private'形式になる場合があります。実際の形式はframe.pixelFormatで確認してください)。'yuv'はネイティブ形式に最も近い YUV 形式を選び、CPU で利用できる一般的な用途に最適です(MLKit/OpenCV/Skia)。'rgb'は YUV から RGB への変換を強制し、帯域幅が約 2.6 倍になるため、利用側で RGB が必須の場合にのみ使用してください。useDepthOutputにpixelFormatオプションはありません。CPU からアクセスできる RGB またはテンソル入力を必要とする ML 利用側には、Camera パイプラインでフレームごとの RGB 変換コストを負担するより、react-native-vision-camera-resizerを優先してください。 -
Math.min/Math.maxで FPS や解像度を手動で制限しないでください。 これは v4 の回避策でした。v5 では Constraints API が内部でネゴシエートするため、意図を指定して Camera に選択を任せてください。 -
v5 では Worklets が Reanimated SharedValues を直接変更します。 通常の非同期 UI やアニメーションの状態には適しています。フレームに同期したオーバーレイには、別途リアルタイム向けのスキルを使用し、同じフレームから Skia または WebGPU で描画してください。
このスキルの運用ルール
-
v4→v5 の API 形式を決して捏造しないでください。v4 API に対応する v5 の仕様がリファレンスに記載されていない場合は、その旨を伝えて v5 のドキュメントへのリンクを示し、推測しないでください。
-
ユーザーから依頼されない限り、ドキュメントファイル(README、CHANGELOG)を追加しないでください。
-
ユーザーが v4 のコードを提示していない限り、v5 を使用しているものとします。v4 のコードが提示された場合は、何かを書く前に references/migration-v4-to-v5.md を読み込んでください。
-
Camera の新しいサンプルを書く場合は、フックベースの宣言的な形式(
useCameraPermission+useCameraDevice+usePhotoOutput+<Camera />)をデフォルトにしてください。命令型のVisionCamera.createCameraSession(...)API を使用するのは、ユーザーがマルチカメラや完全なプログラム制御を求めた場合に限ります。 -
CPU から参照できる入力を必要とする基本的な ML パスには、v4 時代の
vision-camera-resize-pluginではなくreact-native-vision-camera-resizerを推奨してください。レイテンシーが重要な ML、GPU 推論、ライブオーバーレイには、Resizer を一律に指定せず、react-native-vision-camera-realtimeを案内してください。 -
ピア依存関係のインストールを確認してください。インストール後にネイティブクラッシュが発生したという報告の 95% は、
react-native-nitro-modules、react-native-nitro-image、または(フレームプロセッサーの場合)react-native-workletsとreact-native-vision-camera-workletsのインストール漏れが原因です。
信頼できるリンク
- ドキュメント:https://visioncamera.margelo.com
llms.txtインデックス:https://visioncamera.margelo.com/llms.txt- V5 リリースノート(移行スニペットを含む):
gh api repos/mrousavy/react-native-vision-camera/releases/tags/v5.0.0 - ブログでの発表:https://blog.margelo.com/whats-new-in-visioncamera-v5
- メインリポジトリ:https://github.com/mrousavy/react-native-vision-camera
- V4 スナップショット(アーカイブ済みドキュメント):https://visioncamera4.margelo.com