you-might-not-need-a-memo
コード内のuseMemo/React.memoアンチパターンを分析して修正します
description の原文を見る
Analyze and fix useMemo/React.memo anti-patterns in your code
SKILL.md 本文
メモ化が不要かもしれない
引数:
- scope: 分析対象(デフォルト: 現在の変更部分)。例: "diff to main"、"PR #123"、"src/components/"、"whole codebase"
- fix: 修正を適用するかどうか(デフォルト: true)。false に設定すると変更の提案のみを行います。
ユーザー引数: $ARGUMENTS
参照資料
分析前に読んでください:
- https://overreacted.io/before-you-memo/ — メモ化を完全に避けるための2つのテクニック
検出するアンチパターン
- 状態を下に移動できる場合に React.memo でコンポーネントをラップしている: コンポーネントが使用していない状態のため再レンダリングされている場合、メモ化する代わりにその状態を小さい子コンポーネントに移動させてください。遅いコンポーネントはメモ化なしで再レンダリングされなくなります。
- 子要素を上に持ち上げられるのに React.memo でラップしている: 親コンポーネントが頻繁に変更される状態を持つ場合、ステートフルな部分を抽出し、高コストなサブツリーを
childrenとして渡してください。プロップスとして渡された子要素は、親の状態が変更されても再レンダリングされません。 - 低コストな計算に useMemo を使用している: 小さい配列のフィルタリングやマッピング、文字列の連結、単純な算術演算など、これらはメモ化を必要としません。パフォーマンスの問題を測定した場合にのみメモ化してください。
- 依存配列が毎回変わる useMemo を使用している: 依存配列がレンダリングのたびに変わる場合、useMemo は何もしません — 毎回再計算されます。依存関係を修正するか、メモ化を削除してください。
- プロップスとして渡すオブジェクト/配列を作成するために useMemo を使用している: 子の再レンダリングを防ぐためにメモ化する代わりに、子要素が参照の安定性を必要としているかどうかを検討してください。子要素が React.memo を使用していない、または依存配列に渡していない場合、メモ化は無駄です。
- 常に新しいプロップスを受け取るコンポーネントに React.memo を使用している: 親が常に新しいオブジェクト、配列、またはコールバックを渡す場合、React.memo の浅い比較は常に失敗します。子をメモ化する代わりに親を修正してください。
- 導出状態に useMemo を使用している: プロップスまたは状態から値を計算している場合、レンダリング中にインラインで計算してください。React のレンダリングは高速です。
const fullName = first + ' ' + lastは useMemo を必要としません。
手順
- 上記の参考資料を読んで、2つのコア テクニック(状態を下に移動、コンテンツを上に持ち上げ)を理解します
- 指定したスコープを分析し、上記のアンチパターンを検出します
- fix=true の場合は修正を適用します。fix=false の場合は修正を適用せず提案のみです。
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- simstudioai
- リポジトリ
- simstudioai/sim
- ライセンス
- Apache-2.0
- 最終更新
- 2026/5/12
Source: https://github.com/simstudioai/sim / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。