Agent Skills by ALSEL
Anthropic Claudeセキュリティ⭐ リポ 0品質スコア 50/100

compose-performance-audit

Jetpack Composeのランタイムパフォーマンスをコードレビューとアーキテクチャの観点から診断・改善します。描画の遅延、スクロールのカクつき、過剰な再コンポーズ、またはCompose UIのパフォーマンス問題の調査を依頼されたときに使用してください。

description の原文を見る

Audit and improve Jetpack Compose runtime performance from code review and architecture. Use when asked to diagnose slow rendering, janky scrolling, excessive recompositions, or performance issues in Compose UI.

SKILL.md 本文

Compose Performance Audit

概要

Jetpack Compose ビューのパフォーマンスを、計測とベースライン設定からルート原因分析と具体的な改善手順まで、エンドツーエンドで監査します。

ワークフロー判定ツリー

  • ユーザーがコードを提供した場合は、「Code-First Review」で開始します。
  • ユーザーが症状のみを説明した場合は、最小限のコード/コンテキストを要求してから「Code-First Review」を実行します。
  • コードレビューが結論に至らない場合は、「Guide the User to Profile」に移行し、Layout Inspector の出力または Perfetto トレースを要求します。

1. Code-First Review

以下を収集します:

  • 対象の Composable コード。
  • データフロー: state、remember、derived state、ViewModel への接続。
  • 症状と再現手順。

以下に注目します:

  • Recomposition ストーム: 不安定なパラメータまたは広範な状態変更から。
  • 不安定なキー: LazyColumn/LazyRow 内(key の変動、キーの欠落)。
  • composition 内の重い作業: フォーマット、ソート、フィルタリング、オブジェクト割り当て。
  • 不要な recomposition: remember の欠落、不安定なクラス、ラムダ式。
  • 大きな画像: 適切なサイズ設定や非同期ロードなし。
  • Layout の thrash: ネストが深い、intrinsic 測定、SubcomposeLayout の誤用。

提供内容:

  • コード参照を含むルート原因の可能性。
  • 提案される修正とリファクタリング。
  • 必要に応じて、最小限の再現方法または計測提案。

2. Guide the User to Profile

データ収集方法を説明します:

  • Android Studio の Layout Inspector を使用して recomposition カウントを確認します。
  • Compose ツーリングで Recomposition Highlights を有効にします。
  • Perfetto または System Trace を使用してフレームタイミング分析を行います。
  • Macrobenchmark の結果でスタートアップ/スクロール メトリクスを確認します。

以下をリクエストします:

  • recomposition カウントを示す Layout Inspector のスクリーンショット。
  • Perfetto トレースまたは System Trace のエクスポート。
  • デバイス/OS/ビルド設定(デバッグ vs リリース)。

重要: プロファイリングは release ビルド で R8 を有効にして実行してください。デバッグビルドにはかなりのオーバーヘッドがあります。

3. 分析と診断

Compose の可能性が高い問題を優先順位付けします:

  • Recomposition ストーム: 不安定なパラメータまたは広範な状態変更から。
  • 不安定なキー: lazy リスト 内(key の変動、インデックスベースのキー)。
  • composition 内の重い作業: フォーマット、ソート、オブジェクト割り当て。
  • remember の欠落: すべての recomposition で再作成が発生します。
  • 大きな画像: Modifier.size() 制約なし。
  • 不要な state の読み取り: 誤った composition フェーズで。

トレース/Layout Inspector からの証拠と共に検出結果を要約します。

4. 改善

対象を絞った修正を適用します:

  • パラメータの安定化: データクラスに @Stable または @Immutable アノテーションを使用します。
  • キーの安定化: LazyColumn/LazyRow アイテムに安定した一意の ID を使用します。
  • state 読み取りの遅延: derivedStateOf、ラムダベースの modifier、または Modifier.drawBehind を使用します。
  • 高コストな計算を remember: remember { } または remember(key) { } でラップします。
  • recomposition をスキップ: 安定した composable を抽出し、key() でアイデンティティを制御します。
  • 非同期画像ロード: Coil/Glide を適切なサイズ制約と共に使用します。
  • layout の複雑さを削減: 階層をフラット化し、深いネストを避けます。

一般的なコード アンチパターン(と修正)

不安定なラムダキャプチャ

// BAD: 毎 recomposition で新しいラムダインスタンスが作成される
Button(onClick = { viewModel.doSomething(item) }) { ... }

// GOOD: remember またはメソッド参照を使用
val onClick = remember(item) { { viewModel.doSomething(item) } }
Button(onClick = onClick) { ... }

composition 内の重い作業

// BAD: 毎 recomposition でソート実行
@Composable
fun ItemList(items: List<Item>) {
    val sorted = items.sortedBy { it.name } // 毎 recomposition で実行
    LazyColumn { items(sorted) { ... } }
}

// GOOD: remember をキーと共に使用
@Composable
fun ItemList(items: List<Item>) {
    val sorted = remember(items) { items.sortedBy { it.name } }
    LazyColumn { items(sorted) { ... } }
}

LazyColumn でのキー欠落

// BAD: インデックスベースのアイデンティティ(リスト変更時に recomposition 発生)
LazyColumn {
    items(items) { item -> ItemRow(item) }
}

// GOOD: 安定したキーベースのアイデンティティ
LazyColumn {
    items(items, key = { it.id }) { item -> ItemRow(item) }
}

不安定なデータクラス

// BAD: 不安定(List を含み、これは安定していない)
data class UiState(
    val items: List<Item>,
    val isLoading: Boolean
)

// GOOD: 本当に不変の場合は Immutable とマーク
@Immutable
data class UiState(
    val items: ImmutableList<Item>, // kotlinx.collections.immutable
    val isLoading: Boolean
)

早すぎる state の読み取り

// BAD: composition 時に state を読み取り(ツリー全体が recompose)
@Composable
fun AnimatedBox(scrollState: ScrollState) {
    val offset = scrollState.value // スクロールのたびに recompose
    Box(modifier = Modifier.offset(y = offset.dp)) { ... }
}

// GOOD: state の読み取りを layout/draw フェーズに遅延
@Composable
fun AnimatedBox(scrollState: ScrollState) {
    Box(modifier = Modifier.offset {
        IntOffset(0, scrollState.value) // layout フェーズで読み取り
    }) { ... }
}

composition 内のオブジェクト割り当て

// BAD: 毎 recomposition で新しい Modifier チェーンを作成
Box(modifier = Modifier.padding(16.dp).background(Color.Red))

// GOOD(動的な modifier の場合): modifier を remember
val modifier = remember { Modifier.padding(16.dp).background(Color.Red) }
Box(modifier = modifier)

安定性チェックリスト

デフォルトで安定?修正
プリミティブ(IntStringBooleanはいN/A
安定なフィールドを持つ data classはい*すべてのフィールドが安定していることを確認
ListMapSetいいえkotlinx の ImmutableList を使用
var プロパティを持つクラスいいえ外部的に安定している場合は @Stable を使用
ラムダ式いいえremember { } を使用

5. 検証

ユーザーに以下を実行するよう依頼します:

  • Layout Inspector を再実行し、recomposition カウントを比較します。
  • Macrobenchmark を実行し、フレームタイミングを比較します。
  • release ビルドで実機でテストします。

提供されている場合は、差分(recomposition カウント、フレームドロップ、jank)を要約します。

出力

以下を提供します:

  • 短いメトリクス テーブル(利用可能な場合は before/after)。
  • 最上位の問題(影響度順)。
  • 提案される修正と推定される作業量。

参考資料

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

詳細情報

作者
new-silvermoon
リポジトリ
new-silvermoon/awesome-android-agent-skills
ライセンス
Apache-2.0
最終更新
不明

Source: https://github.com/new-silvermoon/awesome-android-agent-skills / ライセンス: Apache-2.0

関連スキル

Anthropic Claudeセキュリティ⭐ リポ 8,981

secure-code-guardian

認証・認可の実装、ユーザー入力の保護、OWASP Top 10の脆弱性対策が必要な場合に使用します。bcrypt/argon2によるパスワードハッシング、パラメータ化ステートメントによるSQLインジェクション対策、CORS/CSPヘッダーの設定、Zodによる入力検証、JWTトークンの構築などのカスタムセキュリティ実装に対応します。認証、認可、入力検証、暗号化、OWASP Top 10対策、セッション管理、セキュリティ強化全般で活用できます。ただし、構築済みのOAuth/SSO統合や単独のセキュリティ監査が必要な場合は、より特化したスキルの検討をお勧めします。

by Jeffallan
汎用セキュリティ⭐ リポ 1,982

claude-authenticity

APIエンドポイントが本物のClaudeによって支えられているか(ラッパーやプロキシ、偽装ではないか)を、claude-verifyプロジェクトを模した9つの重み付きルールベースチェックで検証できます。また、Claudeの正体を上書きしているプロバイダーから注入されたシステムプロンプトも抽出します。完全に自己完結しており、httpx以外の追加パッケージは不要です。Claude APIキーまたはエンドポイントを検証したい場合、サードパーティのClaudeサービスが本物か確認したい場合、APIプロバイダーのClaude正当性を監査したい場合、複数モデルを並行してテストしたい場合、またはプロバイダーが注入したシステムプロンプトを特定したい場合に使用できます。

by LeoYeAI
Anthropic Claudeセキュリティ⭐ リポ 2,159

anth-security-basics

Anthropic Claude APIのセキュリティベストプラクティスを適用し、キー管理、入力値の検証、プロンプトインジェクション対策を実施します。APIキーの保護、Claudeに送信する前のユーザー入力検証、コンテンツセーフティガードレールの実装が必要な場合に活用できます。「anthropic security」「claude api key security」「secure anthropic」「prompt injection defense」といったフレーズでトリガーされます。

by jeremylongshore
汎用セキュリティ⭐ リポ 699

x-ray

x-ray.mdプレ監査レポートを生成します。概要、強化された脅威モデル(プロトコルタイプのプロファイリング、Gitの重み付け攻撃面分析、時間軸リスク分析、コンポーザビリティ依存関係マッピング)、不変条件、統合、ドキュメント品質、テスト分析、開発者・Gitの履歴をカバーしています。「x-ray」「audit readiness」「readiness report」「pre-audit report」「prep this protocol」「protocol prep」「summarize this protocol」のキーワードで実行されます。

by pashov
汎用セキュリティ⭐ リポ 677

semgrep

Semgrepスタティック分析スキャンを実行し、カスタム検出ルールを作成します。Semgrepでのコードスキャン、セキュリティ脆弱性の検出、カスタムYAMLルールの作成、または特定のバグパターンの検出が必要な場合に使用します。重要:ユーザーが「バグをスキャンしたい」「コード品質を確認したい」「脆弱性を見つけたい」「スタティック分析」「セキュリティlint」「コード監査」または「コーディング標準を適用したい」と尋ねた場合も、Semgrepという名称を明記していなくても、このスキルを使用してください。Semgrepは30以上の言語に対応したパターンベースのコードスキャンに最適なツールです。

by wimpysworld
汎用セキュリティ⭐ リポ 591

ghost-bits-cast-attack

Java「ゴーストビッツ」/キャストアタック プレイブック(Black Hat Asia 2026)。16ビット文字が8ビットバイトに暗黙的に縮小されるJavaサービスへの攻撃時に使用します。WAF/IDSを回避して、SQLインジェクション、デシリアライゼーション型RCE、ファイルアップロード(Webシェル)、パストトラバーサル、CRLF インジェクション、リクエストスマグリング、SMTPインジェクションを実行できます。Tomcat、Spring、Jetty、Undertow、Vert.x、Jackson、Fastjson、Apache Commons BCEL、Apache HttpClient、Angus Mail、JDK HttpServer、Lettuce、Jodd、XMLWriterに影響し、WAFバイパスにより多くの「パッチ済み」CVEを再度有効化します。

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