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

salesforce-component-standards

SalesforceのLightning Web Components(LWC)、Auraコンポーネント、VisualforceページにおけるUIコンポーネントの品質基準を定義するスキル。SLDS 2準拠、アクセシビリティ(WCAG 2.1 AA)、データアクセスパターンの選定、コンポーネント間通信ルール、XSS・CSRF対策、AuraEnabledメソッドにおけるFLS/CRUDの適用、ビューステート管理、Jestテスト要件をカバーする。SalesforceのUIコンポーネントを新規作成またはレビューする際に使用し、プラットフォーム固有のセキュリティと品質基準を確実に遵守させる。

description の原文を見る

Quality standards for Salesforce Lightning Web Components (LWC), Aura components, and Visualforce pages. Covers SLDS 2 compliance, accessibility (WCAG 2.1 AA), data access pattern selection, component communication rules, XSS prevention, CSRF enforcement, FLS/CRUD in AuraEnabled methods, view state management, and Jest test requirements. Use this skill when building or reviewing any Salesforce UI component to enforce platform-specific security and quality standards.

SKILL.md 本文

Salesforce コンポーネント品質基準

すべての LWC、Aura コンポーネント、Visualforce ページを作成またはレビューする際に、これらのチェックを適用してください。

セクション 1 — LWC 品質基準

1.1 データアクセスパターンの選択

JavaScript コントローラコードを作成する前に、適切なデータアクセスパターンを選択してください:

ユースケースパターン理由
単一レコードをリアクティブに読み取る (ナビゲーション追従)@wire(getRecord, { recordId, fields })Lightning Data Service — キャッシュされ、リアクティブ
単一オブジェクトの標準 CRUD フォーム<lightning-record-form> または <lightning-record-edit-form>FLS、CRUD、アクセシビリティが組み込み
複雑なサーバークエリまたはフィルター付きリスト@wire(apexMethodName, { param }) on a cacheable=true メソッドキャッシングが可能。パラメータ変更時に再実行
ユーザーがトリガーするアクション、DML、またはキャッシュ不可能なサーバー呼び出し命令形 apexMethodName(params).then(...).catch(...)DML に必須。Wired メソッドは cacheable=true なしで @AuraEnabled にできない
クロスコンポーネント通信 (共有親がない)Lightning Message Service (LMS)デカップリング済み、DOM 境界を越えて動作
マルチオブジェクトグラフ関係GraphQL @wire(gql, { query, variables })複雑な関連データの単一ラウンドトリップ

1.2 セキュリティルール

ルール実装方法
innerHTML に生のユーザーデータを入れないテンプレートで {expression} バインディングを使用 — フレームワークが自動エスケープ。this.template.querySelector('.el').innerHTML = userValue を絶対に使わない
Apex @AuraEnabled メソッドが CRUD/FLS を実装SOQL で WITH USER_MODE を使うか、明示的な Schema.sObjectType チェックを行う
コンポーネント JavaScript にハードコードされた組織固有の ID がないクエリするか prop として渡す — ソースにレコード ID を埋め込まない
親からの @api プロパティ: 使用前に検証親は何でも渡せる — クエリパラメータとして使う前に型と範囲を検証

1.3 SLDS 2 とスタイリング基準

  • 絶対に 色をハードコードしない: color: #FF3366color: var(--slds-c-button-brand-color-background) または意味的な SLDS トークンを使う
  • 絶対に !important で SLDS クラスをオーバーライドしない — CSS カスタムプロパティで構成する
  • <lightning-*> ベースコンポーネントを使える場所では常に使う: lightning-buttonlightning-inputlightning-datatablelightning-card など
  • ベースコンポーネントには組み込み SLDS 2、ダークモード、アクセシビリティが含まれる — 動作を再実装しない
  • カスタム CSS を使う場合は、完了前に ライトモードダークモード の両方でテストする

1.4 アクセシビリティ要件 (WCAG 2.1 AA)

すべての LWC コンポーネントは、完了と見なされる前にこれらすべてをパスする必要があります:

  • すべてのフォーム入力に <label> または aria-label がある — placeholder だけをラベルとして使わない
  • すべてのアイコンのみボタンに alternative-text または aria-label でアクションを説明している
  • すべてのインタラクティブ要素がキーボード (Tab、Enter、Space、Escape) でアクセス可能で操作可能である
  • 色がステータスを伝える唯一の手段ではない — テキスト、アイコン、または aria-* 属性とペアにする
  • エラーメッセージが aria-describedby 経由で入力と関連付けられている
  • モーダルでのフォーカス管理が正しい — フォーカスが開くときにモーダルに移動し、閉じるときに戻る

1.5 コンポーネント通信ルール

方向メカニズム
親 → 子@api プロパティまたは @api メソッドの呼び出し
子 → 親CustomEventthis.dispatchEvent(new CustomEvent('eventname', { detail: data }))
兄弟/関連のないコンポーネントLightning Message Service (LMS)
使わないdocument.querySelectorwindow.*、Pub/Sub ライブラリ

Flow スクリーンコンポーネント用:

  • Flow ランタイムに到達する必要があるイベントは bubbles: truecomposed: true を設定する必要があります
  • Flow 変数との双方向バインディングの場合、@api value を公開する

1.6 JavaScript パフォーマンスルール

  • connectedCallback に副作用なし: これは DOM 接続のたびに実行される — DML、大量計算、レンダリング状態の変更を避ける
  • renderedCallback をガード: 常にブール型ガードを使用して無限レンダリングループを防ぐ
  • リアクティブプロパティトラップを避ける: renderedCallback 内でリアクティブプロパティを設定すると再レンダリングが発生 — 必要な場合にのみガード付きで使う
  • 大規模データセットをコンポーネント状態に保存しない — ページング化またはストリーミングで大規模な結果を処理する

1.7 Jest テスト要件

ユーザーインタラクションを処理したり、Apex データを取得するすべてのコンポーネントは Jest テストを備える必要があります:

// 最小テストカバレッジ期待値
it('renders the component with correct title', async () => { ... });
it('calls apex method and displays results', async () => { ... });  // Wire mock
it('dispatches event when button is clicked', async () => { ... });
it('shows error state when apex call fails', async () => { ... }); // Error path

@salesforce/sfdx-lwc-jest モッキングユーティリティを使用:

  • wire アダプターモッキング: setImmediate + emit({ data, error })
  • Apex メソッドモッキング: jest.mock('@salesforce/apex/MyClass.myMethod', ...)

セクション 2 — Aura コンポーネント基準

2.1 Aura と LWC の使い分け

  • 新規コンポーネント: 常に LWC — ターゲットコンテキストが Aura 専用 (例: force:appPage を拡張、レガシー管理パッケージで Aura 固有のイベントを使用) でない限り
  • Aura から LWC への移行: LWC を選択、コンポーネント単位で移行; LWC を Aura コンポーネント内に埋め込める

2.2 Aura セキュリティルール

  • @AuraEnabled コントローラーメソッドは with sharing を宣言し、CRUD/FLS を実装する必要があります — Aura は自動的に実装 しません
  • {!v.something} をアンエスケープされたユーザーデータと共に <div> アンバウンドヘルパーで使わない — <ui:outputText value="{!v.text}" /> または <c:something> を使ってエスケープする
  • SOQL/Apex ロジックで使用する前に、コンポーネント属性からのすべての入力を検証する

2.3 Aura イベント設計

  • コンポーネントイベント — 親子通信に、最小スコープで
  • アプリケーションイベント — コンポーネントイベントがターゲットに到達できない場合のみ。アプリ全体にブロードキャストされ、パフォーマンスとメンテナンスの問題になる可能性
  • ハイブリッド LWC + Aura スタック用: Lightning Message Service を使ってデカップリングする — Aura アプリケーションイベントが LWC に到達することに依存しない

セクション 3 — Visualforce セキュリティ基準

3.1 XSS 防止

<!-- ❌ しない — 生のユーザー入力を HTML としてレンダリング -->
<apex:outputText value="{!userInput}" escape="false" />

<!-- ✅ する — 自動エスケープオン -->
<apex:outputText value="{!userInput}" />
<!-- デフォルト escape="true" — プラットフォームが出力を HTML エンコード -->

ルール: escape="false" はユーザー制御データに対して絶対に受け入れられません。リッチテキストをレンダリングする必要がある場合、ホワイトリストを使ってサーバー側で出力前にサニタイズしてください。

3.2 CSRF 保護

すべてのポストバックアクションに <apex:form> を使用してください — プラットフォームが CSRF トークンをフォームに自動的に注入します。CSRF 保護をバイパスする生の <form method="POST"> HTML 要素を使わ ない でください。

3.3 コントローラーでの SOQL インジェクション防止

// ❌ しない
String soql = 'SELECT Id FROM Account WHERE Name = \'' + ApexPages.currentPage().getParameters().get('name') + '\'';
List<Account> results = Database.query(soql);

// ✅ する — バインド変数
String nameParam = ApexPages.currentPage().getParameters().get('name');
List<Account> results = [SELECT Id FROM Account WHERE Name = :nameParam];

3.4 ビューステート管理チェックリスト

  • ビューステートが 135 KB 未満である (ブラウザー開発者ツールまたは Salesforce ビューステートタブで確認)
  • サーバー側の計算にのみ使用されるフィールドが transient で宣言されている
  • 大規模なコレクションが不要にポストバック全体で永続化されていない
  • <apex:page>readonly="true" が設定されている読み取り専用ページではビューステートシリアル化がスキップされる

3.5 Visualforce コントローラーの FLS/CRUD

// フィールド読み取り前
if (!Schema.sObjectType.Account.fields.Revenue__c.isAccessible()) {
    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'You do not have access to this field.'));
    return null;
}

// DML 実行前
if (!Schema.sObjectType.Account.isDeletable()) {
    throw new System.NoAccessException();
}

標準コントローラーはバウンドフィールドの FLS を自動的に実装します。カスタムコントローラーはしません — FLS を手動で実装する必要があります。


クイックリファレンス — コンポーネントアンチパターンまとめ

アンチパターンテクノロジーリスク修正
ユーザーデータとの innerHTMLLWCXSSテンプレートバインディング {expression} を使う
ハードコードされた 16 進カラーLWC/Auraダークモード/SLDS 2 破損SLDS CSS カスタムプロパティを使う
アイコンのみボタンに aria-label がないLWC/Aura/VFアクセシビリティ失敗alternative-text または aria-label を追加
renderedCallback にガードがないLWC無限再レンダリングループhasRendered ブール型ガードを追加
親子通信にアプリケーションイベントAura不要なブロードキャストスコープコンポーネントイベントを代わりに使用
ユーザーデータに escape="false"VisualforceXSS削除 — デフォルトエスケープを使う
ポストバックで生の <form>VisualforceCSRF 脆弱性<apex:form> を使う
カスタムコントローラーで with sharing なしVF/Apexデータ漏洩with sharing 宣言を追加
カスタムコントローラーで FLS チェックなしVF/Apex権限昇格Schema.sObjectType チェックを追加
SOQL が URL パラメータと連結VF/ApexSOQL インジェクションバインド変数を使う

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

詳細情報

作者
github
リポジトリ
github/awesome-copilot
ライセンス
MIT
最終更新
不明

Source: https://github.com/github/awesome-copilot / ライセンス: 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 フォームよりご連絡ください。
原作者: github · github/awesome-copilot · ライセンス: MIT