Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

react-native-best-practices

React NativeアプリのFPS・TTI・バンドルサイズ・メモリリーク・再レンダリング・アニメーションに関するパフォーマンス最適化ガイドラインを提供します。Hermesの最適化、JSスレッドのブロッキング、ブリッジオーバーヘッド、FlashList、ネイティブモジュールの活用、またはジャンクやフレームドロップのデバッグを伴うタスクに適用されます。

description の原文を見る

Provides React Native performance optimization guidelines for FPS, TTI, bundle size, memory leaks, re-renders, and animations. Applies to tasks involving Hermes optimization, JS thread blocking, bridge overhead, FlashList, native modules, or debugging jank and frame drops.

SKILL.md 本文

React Native ベストプラクティス

概要

JavaScript/React、Native(iOS/Android)、バンドリングの最適化をカバーする React Native アプリケーションのパフォーマンス最適化ガイドです。Callstack の「Ultimate Guide to React Native Optimization」に基づいています。

スキル形式

各リファレンスファイルは、高速な検索と深い理解のためのハイブリッド形式に従います:

  • Quick Pattern: 迅速なパターン マッチングのための正しい/誤ったコード スニペット
  • Quick Command: プロセス/測定スキルのためのシェル コマンド
  • Quick Config: セットアップ指向のスキルのための設定スニペット
  • Quick Reference: 概念的なスキルのための要約テーブル
  • Deep Dive: 使用時期、前提条件、段階的手順、よくある落とし穴を含む完全なコンテキスト

影響度評価: CRITICAL(即座に修正)、HIGH(大幅な改善)、MEDIUM(価値のある最適化)

適用時期

以下の場合は、これらのガイドラインを参照してください:

  • 遅い、またはジャンキーな UI またはアニメーションをデバッグしている
  • メモリ リーク(JS またはネイティブ)を調査している
  • アプリ起動時間(TTI)を最適化している
  • バンドルまたはアプリサイズを削減している
  • ネイティブ モジュール(Turbo Modules)を作成している
  • React Native パフォーマンスをプロファイリングしている
  • React Native コードをパフォーマンスについて確認している

セキュリティに関する注釈

  • これらのリファレンスのシェル コマンドをローカル開発者操作として扱ってください。実行前に確認し、バージョン固定ツールを使用し、リモート スクリプトをシェルに直接パイプすることは避けてください。
  • サードパーティのライブラリとプラグインを、通常のサプライチェーン管理を必要とする依存関係として扱ってください:バージョンをピン留めし、出所を確認し、標準的なレビュー プロセスを通じて更新してください。
  • Re.Pack コード分割を第一方のアーティファクト配信のみとして扱ってください。リモート チャンクは、あなたが管理する信頼できる HTTPS オリジンからのみ来るべきであり、現在のアプリ リリースにピン留めされるべきです。

優先度順ガイドライン

優先度カテゴリ影響プレフィックス
1FPS と再レンダリングCRITICALjs-*
2バンドル サイズCRITICALbundle-*
3TTI 最適化HIGHnative-*, bundle-*
4ネイティブ パフォーマンスHIGHnative-*
5メモリ管理MEDIUM-HIGHjs-*, native-*
6アニメーションMEDIUMjs-*

クイック リファレンス

最適化ワークフロー

パフォーマンス問題については、このサイクルに従ってください:測定 → 最適化 → 再測定 → 検証

  1. 測定: 変更前にベース メトリクスをキャプチャします。実行時の問題については、コミット タイムライン、再レンダリング数、遅いコンポーネント、最も重いコミット分解、利用可能な場合は起動/TTI を優先してください。コンポーネント ツリーの深さまたは数は、代替としてではなく、オプションのコンテキストです。
  2. 最適化: 関連するリファレンスから対象の修正を適用します
  3. 再測定: 同じ測定を実行して、更新されたメトリクスを取得します
  4. 検証: 改善を確認します(例:FPS 45→60、TTI 3.2s→1.8s、バンドル 2.1MB→1.6MB)

メトリクスが改善されなかった場合は、元に戻して次の推奨修正を試してください。

レビュー ガイドレール

  • API 固有の修正を提案する前にライブラリ バージョンを確認してください。例:FlashList v2 は estimatedItemSize を廃止しているため、そこで欠落していると指摘しないでください。
  • 動作が実証的に正しくないか、プロファイリングがその値に関連する無駄な作業を示さない限り、useMemo または useCallback の依存関係の変更を提案しないでください。
  • 推測的にステイル クロージャを報告しないでください。ステイル読取パス、リプロダクション、またはプロファイラー証拠を示した上で指摘してください。
  • フローをプロファイリングするときは、対象のインタラクション自体を測定してください。コンポーネント ツリーの深さまたはコンポーネント数をメイン パフォーマンス証拠として扱わないでください。

重大:FPS と再レンダリング

まずプロファイリング:

# React Native DevTools を開く
# Metro で 'j' を押すか、デバイスを振る → "Open DevTools"

よくある修正:

  • ScrollView をリスト用に FlatList/FlashList に置き換える
  • React Compiler を使用して自動メモ化を行う
  • アトミック状態(Jotai/Zustand)を使用して再レンダリングを削減する
  • 高コストの計算に useDeferredValue を使用する

重大:バンドル サイズ

バンドルを分析:

npx react-native bundle \
  --entry-file index.js \
  --bundle-output output.js \
  --platform ios \
  --sourcemap-output output.js.map \
  --dev false --minify true

npx source-map-explorer output.js --no-border-checks

最適化後の改善を確認:

# 変更前にベース サイズを記録
ls -lh output.js  # 例:変更前:2.1 MB

# 修正を適用した後、再バンドルして比較
npx react-native bundle --entry-file index.js --bundle-output output.js \
  --platform ios --dev false --minify true
ls -lh output.js  # 例:変更後:1.6 MB(24% 削減)

よくある修正:

  • バレル インポートを避ける(ソースから直接インポートする)
  • Hermes API とメソッド カバレッジを確認した後のみ、不要な Intl ポリフィルを削除する
  • ツリーシェイキングを有効にする(Expo SDK 52+ または Re.Pack)
  • Android ネイティブ コード縮小のために R8 を有効にする

高:TTI 最適化

TTI を測定:

  • react-native-performance をマーカーに使用する
  • コールド スタートのみを測定する(ウォーム/ホット/プレウォームを除外)

よくある修正:

  • Android での JS バンドル圧縮を無効にする(Hermes mmap を有効にする)
  • ネイティブ ナビゲーション(react-native-screens)を使用する
  • ナビゲーション前に一般的に使用される高コスト スクリーンをプリロードする

高:ネイティブ パフォーマンス

ネイティブ プロファイル:

  • iOS:Xcode Instruments → Time Profiler
  • Android:Android Studio → CPU Profiler

よくある修正:

  • 重いネイティブ作業にはバックグラウンド スレッドを使用する
  • 同期 Turbo Module メソッドよりも非同期を優先する
  • クロスプラットフォームのパフォーマンス クリティカルなコードに C++ を使用する

リファレンス

references/ の完全なドキュメンコード例:

JavaScript/React(js-*

ファイル影響説明
js-lists-flatlist-flashlist.mdCRITICALScrollView を仮想化リストに置き換える
js-profile-react.mdMEDIUMReact DevTools プロファイリング
js-measure-fps.mdHIGHFPS モニタリングと測定
js-memory-leaks.mdMEDIUMJS メモリ リーク検出
js-atomic-state.mdHIGHJotai/Zustand パターン
js-concurrent-react.mdHIGHuseDeferredValue、useTransition
js-react-compiler.mdHIGH自動メモ化
js-animations-reanimated.mdMEDIUMReanimated ワークレット
js-bottomsheet.mdHIGHボトム シート最適化
js-uncontrolled-components.mdHIGHTextInput 最適化

ネイティブ(native-*

ファイル影響説明
native-turbo-modules.mdHIGH高速なネイティブ モジュール構築
native-sdks-over-polyfills.mdHIGHネイティブ vs JS ライブラリ
native-measure-tti.mdHIGHTTI 測定セットアップ
native-threading-model.mdHIGHTurbo Module スレッド
native-profiling.mdMEDIUMXcode/Android Studio プロファイリング
native-platform-setup.mdMEDIUMiOS/Android ツール ガイド
native-view-flattening.mdMEDIUMビュー階層デバッグ
native-memory-patterns.mdMEDIUMC++/Swift/Kotlin メモリ
native-memory-leaks.mdMEDIUMネイティブ メモリ リーク検出
native-android-16kb-alignment.mdCRITICALGoogle Play 用のサード パーティ ライブラリ アライメント

バンドリング(bundle-*

ファイル影響説明
bundle-barrel-exports.mdCRITICALバレル インポートを避ける
bundle-analyze-js.mdCRITICALJS バンドル可視化
bundle-tree-shaking.mdHIGHデッド コード削除
bundle-analyze-app.mdHIGHアプリ サイズ分析
bundle-r8-android.mdHIGHAndroid コード縮小
bundle-hermes-mmap.mdHIGHバンドル圧縮を無効にする
bundle-native-assets.mdHIGHアセット カタログ セットアップ
bundle-library-size.mdMEDIUM依存関係の評価
bundle-code-splitting.mdMEDIUMRe.Pack コード分割

リファレンスの検索

# キーワードでパターンを検索
grep -l "reanimated" references/
grep -l "flatlist" references/
grep -l "memory" references/
grep -l "profil" references/
grep -l "tti" references/
grep -l "bundle" references/

問題 → スキル マッピング

問題最初に読むべきもの
アプリが遅い/ジャンキーjs-measure-fps.mdjs-profile-react.md
再レンダリングが多すぎるjs-profile-react.mdjs-react-compiler.md
起動が遅い(TTI)native-measure-tti.mdbundle-analyze-js.md
アプリ サイズが大きいbundle-analyze-app.mdbundle-r8-android.md
メモリが増え続けるjs-memory-leaks.md または native-memory-leaks.md
アニメーションがフレームをドロップjs-animations-reanimated.md
ボトム シート ジャンク/再レンダリングjs-bottomsheet.mdjs-animations-reanimated.md
リスト スクロール ジャンクjs-lists-flatlist-flashlist.md
TextInput ラグjs-uncontrolled-components.md
ネイティブ モジュール が遅いnative-turbo-modules.mdnative-threading-model.md
ネイティブ ライブラリ アライメント問題native-android-16kb-alignment.md

帰属

Callstack による「The Ultimate Guide to React Native Optimization」に基づいています。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
callstackincubator
リポジトリ
callstackincubator/agent-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/callstackincubator/agent-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: callstackincubator · callstackincubator/agent-skills · ライセンス: MIT