generating-lightning-app について
自然言語の依頼から、デプロイ可能な Salesforce Lightning Experience アプリと関連メタデータを作成するスキルです。コンポーネントと依存関係を計画し、API コンテキストを確認しながら依存順に生成します。
主な機能
- 01自然言語からアプリ要件を計画
- 02種類別にメタデータスキルを連携
- 03依存順にコンポーネントを構築
- 04API コンテキストに基づくメタデータ確認
- 05SFDX ファイルと package.xml の組み立て
活用シーン
- 01複数オブジェクトのプロジェクト管理アプリ作成
- 02ページと権限を含む Lightning アプリの生成
- 03生成前のメタデータ依存関係の計画
- 04Salesforce CLI デプロイ用成果物の準備
MCP 対応
Flow を除き、生成前に salesforce-api-context ツールでメタデータ型を確認するワークフローです。Flow では metadata-experts のパイプラインを使用します。API コンテキストの確認には触れていますが、MCP サーバーへの接続方法は示されていません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill generating-lightning-appインストール後、Claude Code で/generating-lightning-appを入力して読み込まれたか確認します。
詳細
Lightning アプリの生成
概要
Lightning カスタムアプリケーションを定義し、依存するメタデータタイプを正しい依存関係の順序で編成することで、自然言語による説明からデプロイ可能な Salesforce Lightning Experience アプリケーションを完全な形で構築します。利用可能な場合は、専門のメタデータスキルを呼び出してください。該当するスキルがない場合は、メタデータを直接生成します。
このスキルを使用する場合
次の場合に使用してください:
- ユーザーが「Lightning アプリ」または「エンドツーエンドのソリューション」を依頼した場合
- ユーザーが「アプリを構築する」「アプリケーションを作成する」「[種類]アプリを構築する」(プロジェクト管理、追跡など)と言った場合
- 単独のオブジェクト、ページ、タブを個別に作成するのではなく、カスタムアプリ(CustomApplication)とそれを支えるメタデータを作成する場合
このスキルを使用する例:
- 「Tasks、Resources、Supplies オブジェクトを備えたプロジェクト管理用 Lightning アプリを構築して」
- 「Lightning ページと権限セットを使って車両を追跡する LEX アプリを作成して」
- 「複数のオブジェクトとリレーションを備えた宇宙ステーション管理システムが必要です」
- 「カスタム Lightning レコードページを使った従業員オンボーディング用 Lightning アプリを構築して」
次の場合は使用しないでください:
- 1 つのメタデータコンポーネントを作成する場合(代わりに該当するメタデータスキルを使用してください)
- 既存のメタデータのトラブルシューティングやデバッグを行う場合
- Salesforce Classic アプリを構築する場合(Lightning Experience ではありません)
- ユーザーが 1 つのオブジェクト、ページ、または権限セットだけを依頼した場合(ほかのものは不要)
- 他のメタデータは不要で、既存のタブをまとめるアプリコンテナの作成または設定だけが必要な場合。代わりに
generating-custom-applicationを使用してください
メタデータタイプのレジストリ
この表では、Lightning Experience アプリで一般的に必要となるメタデータタイプ、利用可能なスキル、および API コンテキストの要件を示します。
| メタデータタイプ | スキル名 | API コンテキスト | 使用ルール |
|---|---|---|---|
| カスタムオブジェクト | generating-custom-object | salesforce-api-context | スキルを必ず読み込み、API コンテキストを呼び出すこと |
| カスタム項目 | generating-custom-field | salesforce-api-context | スキルを必ず読み込み、API コンテキストを呼び出すこと |
| カスタムタブ | generating-custom-tab | salesforce-api-context | スキルを必ず読み込み、API コンテキストを呼び出すこと |
| FlexiPage | generating-flexipage | salesforce-api-context | スキルを必ず読み込み、API コンテキストを呼び出すこと |
| カスタムアプリケーション | generating-custom-application | salesforce-api-context | スキルを必ず読み込み、API コンテキストを呼び出すこと |
| リストビュー | generating-list-view | salesforce-api-context | スキルを必ず読み込み、API コンテキストを呼び出すこと(依頼された場合) |
| 入力規則 | generating-validation-rule | salesforce-api-context | スキルを必ず読み込み、API コンテキストを呼び出すこと(依頼された場合) |
| フロー | generating-flow | metadata-experts パイプライン | スキルを必ず読み込み、パイプラインを実行すること。salesforce-api-context は不要です。 |
| 権限セット | generating-permission-set | salesforce-api-context | スキルを必ず読み込み、API コンテキストを呼び出すこと |
使用ルール
スキルルール:メタデータタイプに対応するスキルがある場合は、そのスキルを必ず読み込んでください。スキルを読み込まずにメタデータを直接生成してはいけません。
API コンテキストルール:フロー以外のすべてのメタデータタイプについて、生成前に salesforce-api-context ツールを必ず呼び出してください。API コンテキストを呼び出さずにメタデータを生成してはいけません。スキルは構造とルールを示し、API コンテキストは現在の API バージョンで有効かどうかを確認します。どちらも不可欠です。
フォールバックルール:必要なメタデータタイプに対応するスキルがない場合は、Salesforce Metadata API とベストプラクティスに関する知識を使って、メタデータを直接生成してください。この場合も API コンテキストは必要です。
理由:スキルには検証済みのパターンと制約が含まれています。API コンテキストによって、バージョン固有の正確性が確保されます。両方を併用することで、デプロイの失敗を防げます。
依存関係グラフと構築順序
フェーズ 1: データモデル (基盤)
Custom Objects (no dependencies)
↓
Custom Fields (depends on: Objects exist)
↓
Relationships (depends on: Both parent and child objects + fields exist)
このフェーズのメタデータ型:
generating-custom-object- すべてのオブジェクトをまとめて 1 回generating-custom-field- すべての項目をまとめて 1 回 (マスター詳細関係、参照関係、積み上げ集計項目を含む)
フェーズ 2: ビジネスロジック (任意 - 要求された場合のみ)
Validation Rules (depends on: Fields exist)
↓
Flows (depends on: Objects, Fields exist)
このフェーズのメタデータ型 (ユーザーが要求した場合のみ):
generating-validation-rule- 入力規則の要件が言及されている場合、1 回generating-flow- 自動化/ワークフローの要件が言及されている場合、1 回
フェーズ 3: ユーザーインターフェース
List Views (depends on: Objects, Fields exist)
↓
Custom Tabs (depends on: Objects exist)
↓
FlexiPages (depends on: Objects, Tabs exist)
このフェーズのメタデータ型:
generating-list-view- フィルターされたレコードビュー用に 1 回 (要求された場合)generating-custom-tab- すべてのオブジェクトタブをまとめて 1 回generating-flexipage- すべてのレコード/ホーム/アプリページをまとめて 1 回
フェーズ 4: アプリケーションの組み立て
Custom Application (depends on: Tabs exist)
このフェーズのメタデータ型:
generating-custom-application- Lightning アプリのコンテナを作成するために 1 回
フェーズ 5: セキュリティとアクセス
Permission Sets (depends on: Objects, Fields, Tabs, App exist)
このフェーズのメタデータ型:
generating-permission-set- すべての権限セットをまとめて 1 回、および以下へのアクセス:- オブジェクト (参照、作成、編集、削除)
- 項目 (参照、編集)
- タブ (表示)
- カスタムアプリケーション (表示)
実行ワークフロー
ステップ 1: 要件分析と計画
アクション:
- ユーザーの自然言語リクエストを解析する
- ビジネスエンティティを抽出する (カスタムオブジェクトになる)
- 属性/プロパティを抽出する (カスタム項目になる)
- リレーションシップを特定する (マスター詳細関係、参照関係)
- 入力規則の要件を検出する (入力規則になる)
- 自動化の要件を検出する (フローになる)
- ユーザーペルソナを特定する (権限セットに反映される)
出力: ビルド計画
以下を列挙した構造化された計画を生成します:
Lightning App Build Plan: [App Name]
DATA MODEL:
- Custom Objects: [list with object names]
- Custom Fields: [list grouped by object]
- Relationships: [list M-D and Lookup relationships]
BUSINESS LOGIC (if applicable):
- Validation Rules: [list with object and rule name]
- Flows: [list with flow name and type]
USER INTERFACE:
- List Views (if requested): [list with object and view name]
- Custom Tabs: [list with object]
- FlexiPages: [list with page name and type]
- Custom Application: [app name]
SECURITY:
- Permission Sets: [list with purpose]
PER-TYPE EXECUTION (skill + API context for each):
- CustomObject: load generating-custom-object + call salesforce-api-context
- CustomField: load generating-custom-field + call salesforce-api-context
- ValidationRule: load generating-validation-rule + call salesforce-api-context (if requested)
- Flow: load generating-flow + run metadata-experts pipeline (if requested)
- ListView: load generating-list-view + call salesforce-api-context (if requested)
- CustomTab: load generating-custom-tab + call salesforce-api-context
- FlexiPage: load generating-flexipage + call salesforce-api-context
- CustomApplication: load generating-custom-application + call salesforce-api-context
- PermissionSet: load generating-permission-set + call salesforce-api-context
STATUS LINES TO EMIT BEFORE FILE WRITES:
- `type=<Type> skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>`
- Flow exception: `type=Flow skill=complete pipeline=complete`
DEPENDENCY ORDER:
1. Phase 1: Data Model (Objects -> Fields)
2. Phase 2: Business Logic (Validation Rules -> Flows)
3. Phase 3: User Interface (List Views -> Tabs -> Pages)
4. Phase 4: App Assembly (Application)
5. Phase 5: Security (Permission Sets)
ステップ 2: 型ごとの実行
各メタデータ型に対して、一度に 1 つの型ずつ、以下の 4 つのステップを実行します。次の型に進む前に、現在の型について 4 つのステップをすべて完了してください。いかなるステップも省略しないでください。
| ステップ | 実施内容 | 理由 |
|---|---|---|
| ① スキルを読み込む | 型ごとの SKILL.md を検索して読む | XML 構造、必須要素、命名規則、検証制約が得られます |
| ② API コンテキストを呼び出す | このメタデータ型に対して salesforce-api-context ツールを、get_metadata_type_sections、get_metadata_type_context、get_metadata_type_fields、get_metadata_type_fields_properties、search_metadata_types のいずれか 1 つ以上を使って呼び出す | 現在有効な値 — 許可された列挙値、必須項目と任意項目、この API バージョンの子型 — が得られます。スキルは構造を提供し、API コンテキストはバージョン固有の正確さを提供します。 |
| ③ ステータスを記録する | 出力: type=<Type> skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> | ファイルが書き込まれる前に両方のステップが試行されたことを確認し、どの API コンテキストツールが使われたかを記録します |
| ④ ファイルを生成する | この型のすべてのファイルを生成し、チェックポイントを設定する | ①②③ が完了した後にのみ行います。検証してから、次の型に進みます。 |
① と ② を 1 つのアクションにまとめたり、① を完了した後に ② を省略したりしないでください。 これらは別々のステップであり、それぞれ異なる目的を果たします。スキルを読み込んだ後、生成する準備ができたと感じるかもしれません — いったん止まり、先に ② を行ってください。
実際に試行した結果 salesforce-api-context が利用できない場合は、mcp=unavailable と記録し、スキルの知識のみを使って生成してください。② をまったく試行しないのはバグです。
1. カスタムオブジェクト
- ① スキルを読み込む:
generating-custom-objectSKILL.md を読む - ② API コンテキスト: CustomObject に対して
salesforce-api-contextを呼び出す - ③ ステータス:
type=CustomObject skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成 + チェックポイント: すべてのカスタムオブジェクトファイルを生成し、次に #2 に進む 2. カスタム項目
- ① スキルを読み込む:
generating-custom-fieldSKILL.md を読みます - ② API コンテキスト:CustomField に対して
salesforce-api-contextを呼び出します - ③ ステータス:
type=CustomField skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成+チェックポイント:すべてのカスタム項目ファイルを生成してから、#3 に進みます
3. 入力規則(要求された場合のみ)
- ① スキルを読み込む:
generating-validation-ruleSKILL.md を読みます - ② API コンテキスト:ValidationRule に対して
salesforce-api-contextを呼び出します - ③ ステータス:
type=ValidationRule skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成+チェックポイント:すべての入力規則ファイルを生成してから、#4 に進みます
4. フロー(要求された場合のみ)
- ① スキルを読み込む:
generating-flowSKILL.md を読みます - ② パイプライン:
salesforce-api-contextの対象外として、metadata-experts/execute_metadata_actionの3ステップパイプラインを実行します - ③ ステータス:
type=Flow skill=complete pipeline=complete - ④ 生成+チェックポイント:パイプラインを使用してすべてのフローファイルを生成してから、#5 に進みます
5. リストビュー(要求された場合のみ)
- ① スキルを読み込む:
generating-list-viewSKILL.md を読みます - ② API コンテキスト:ListView に対して
salesforce-api-contextを呼び出します - ③ ステータス:
type=ListView skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成+チェックポイント:すべてのリストビューファイルを生成してから、#6 に進みます
6. カスタムタブ
- ① スキルを読み込む:
generating-custom-tabSKILL.md を読みます - ② API コンテキスト:CustomTab に対して
salesforce-api-contextを呼び出します - ③ ステータス:
type=CustomTab skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成+チェックポイント:すべてのカスタムタブファイルを生成してから、#7 に進みます
7. FlexiPages
- ① スキルを読み込む:
generating-flexipageSKILL.md を読みます - ② API コンテキスト:FlexiPage に対して
salesforce-api-contextを呼び出します - ③ ステータス:
type=FlexiPage skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成+チェックポイント:すべての FlexiPage ファイルを生成してから、#8 に進みます
8. カスタムアプリケーション
- ① スキルを読み込む:
generating-custom-applicationSKILL.md を読みます - ② API コンテキスト:CustomApplication に対して
salesforce-api-contextを呼び出します - ③ ステータス:
type=CustomApplication skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成+チェックポイント:カスタムアプリケーションファイルを生成してから、#9 に進みます
9. 権限セット
- ① スキルを読み込む:
generating-permission-setSKILL.md を読みます - ② API コンテキスト:PermissionSet に対して
salesforce-api-contextを呼び出します - ③ ステータス:
type=PermissionSet skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> - ④ 生成+チェックポイント:すべての権限セットファイルを生成します — すべてのタイプが完了
STEP 3: 最終成果物の組み立て
すべてのフェーズが完了したら、出力をデプロイ可能な構造にまとめます。
出力
完成したビルドで生成されるもの:
-
Salesforce DX プロジェクトディレクトリ:生成されたすべてのメタデータを含みます
- 標準の SFDX 構造に整理されています:
force-app/main/default/
- 標準の SFDX 構造に整理されています:
-
メタデータファイル — コンポーネントごとに1つのファイルを作成し、タイプ別に整理します:
force-app/main/default/ ├── objects/ # Custom Objects (.object-meta.xml) ├── fields/ # Custom Fields (.field-meta.xml) ├── tabs/ # Custom Tabs (.tab-meta.xml) ├── flexipages/ # Lightning Pages (.flexipage-meta.xml) ├── applications/ # Custom Applications (.app-meta.xml) ├── permissionsets/ # Permission Sets (.permissionset-meta.xml) ├── flows/ # Flows (.flow-meta.xml) - if applicable └── objects/.../validationRules/ # Validation Rules (.validationRule-meta.xml) - if applicable -
デプロイマニフェスト(
package.xml)- 適切な API バージョンとともにすべてのコンポーネントを一覧表示します
- 依存関係の順序に従ってメタデータタイプ別に整理します
- Salesforce CLI デプロイまたは Metadata API デプロイに対応しています
-
ビルド概要レポート — 以下を一覧表示する Markdown ファイルです:
- 作成されたすべてのコンポーネント
- コンポーネントのタイプと API 名
- ファイルパスの場所
- 依存関係
- 警告や推奨事項
概要の構成例:
Lightning App Build Complete: Project Management App
METADATA GENERATED:
1 Custom Objects
- Project__c -> force-app/main/default/objects/Project__c/Project__c.object-meta.xml
- Task__c -> force-app/main/default/objects/Task__c/Task__c.object-meta.xml
- Resource__c -> force-app/main/default/objects/Resource__c/Resource__c.object-meta.xml
2 Custom Fields
- Project__c.Name -> force-app/main/default/objects/Project__c/fields/Name.field-meta.xml
- Project__c.Status__c -> force-app/main/default/objects/Project__c/fields/Status__c.field-meta.xml
[... etc ...]
3 Custom Tabs
- Project__c -> force-app/main/default/tabs/Project__c.tab-meta.xml
[... etc ...]
4 Lightning Record Pages
- Project_Record_Page -> force-app/main/default/flexipages/Project_Record_Page.flexipage-meta.xml
[... etc ...]
5 Custom Application
- Project_Management -> force-app/main/default/applications/Project_Management.app-meta.xml
6 Permission Sets
- Project_Manager -> force-app/main/default/permissionsets/Project_Manager.permissionset-meta.xml
- Project_User -> force-app/main/default/permissionsets/Project_User.permissionset-meta.xml
WARNINGS: None
検証
完成したビルドをユーザーに提示する前に、コンポーネント間の整合性を確認します。
- オブジェクトとタブの網羅性:すべてのカスタムオブジェクトに、少なくとも1つのカスタムタブがある
- リレーションの整合性:リレーション(親または子)で参照されているすべてのカスタムオブジェクトが、ビルドに存在する
- ページ内の項目参照:FlexiPageで参照されているすべての項目が、対応するオブジェクトに存在する
- アプリ内のタブ参照:カスタムアプリで参照されているすべてのタブが、正常に作成されている
- 権限セットの完全性:権限セットが、生成されたすべてのオブジェクト、項目、タブ、アプリへのアクセスを許可している
- 孤立したコンポーネントがないこと:オブジェクトのないタブ、対応するタブのないページ、タブのないアプリがない
- デプロイメントマニフェストの完全性:
package.xmlに、生成されたすべてのコンポーネントが適切な依存関係の順序で含まれている
検証失敗時の対応(カテゴリ2):
- 検証に失敗した場合は、失敗したチェック項目をビルドサマリーレポートの
VALIDATION WARNINGSセクションに記載します - これらは生成後の問題です。ビルドの提供は止めず、手動での確認や修正が必要な箇所を明確に伝えます
- 検証に失敗した項目ごとに、具体的な修正手順を提示します
注:個々のコンポーネントの検証(予約語、名前の長さ、項目の種類など)は、専門のメタデータスキルが処理するため、ここで再検証する必要はありません。
エラー処理
カテゴリ1:停止してユーザーに確認
次の場合は実行を停止し、ユーザーに確認を求めます。
- ユーザーの依頼が曖昧すぎて、オブジェクトや項目を抽出できない
- 要件に矛盾がある(例:「非公開にする」+「全員が見られるようにする」)
- Salesforceの無効な命名が検出された(
Order、Groupなどの予約語)
カテゴリ2:生成後の警告(警告を記録して続行)
次の場合は警告を記録し、続行します。
- コンポーネント間の検証チェックに失敗した(例:FlexiPageで参照されている項目がオブジェクトに存在しない)
- オプションのコンポーネントの生成に失敗した(例:リストビューの生成に軽微な問題がある)
- 検証ルールまたはフローの出力に軽微な問題がある
警告の形式:
Warning: [Component Type] generation encountered issue
Component: [Name]
Issue: [Description]
Impact: [What won't work]
Recommendation: [How to fix manually]
Continuing with remaining components...
ベストプラクティス
1. 常に依存関係の順序に従う
スキルを順序どおりに実行してください。項目にはオブジェクトが必要で、ページにはタブが、アプリにはタブが必要です。
2. 利用可能な場合はスキルを使用する
一から作り直す必要はありません。専門スキルには、デプロイエラーを防ぐ項目固有の検証機能があります。
3. 適切なデフォルトを設定する
ユーザーが詳細を指定していない場合:
- 人に関するオブジェクトにはテキスト型の名前項目を使用します
- トランザクションには自動採番を使用します
- ユーザー向けのオブジェクトでは検索とレポートを有効にします
- リレーションに基づいてsharingModelを設定します
4. ビルド前に検証する
次の項目を確認します。
- API名に予約語が含まれていないこと
- リレーションの上限(オブジェクトごとに主従関係は最大2つ)
- 名前の長さの上限
- 重複する名前