はじめに
みなさん、こんにちは。
マネーフォワード 横断BizOps 本部で、 Salesforce管理者をしているしげる @4geru です。
この記事は Salesforce Advent Calendar 2025 の2日目の記事です。
昨日はぴえさん(@piepie1231)の「ApexでSlack通知の実装(ほぼChatGPT)」でした。
普段、複雑な組織設定と日々向き合っている中で、AIを使ってその"向き合い方"を少し楽にする方法を見つけたので、本記事でご紹介します。
Salesforceの管理者として、こんなことを思ったことはありませんか?
- 「このフローって、どこから呼ばれてるんだっけ?」
- 「この項目、削除したいけどどこで使われているか分からない...」
- 「引き継いだはいいけど、複雑すぎて設定がどうなってるか把握できない...」
Salesforceの標準機能だけでは、組織全体の構成を把握したり、変更の影響範囲を特定したりするのは大変な作業です。
この記事では、Salesforceのメタデータ(設定情報)を手元のPCにダウンロードし、AI搭載エディタ「Cursor」を使って、自然言語(日本語)で組織の構成を"質問しながら"理解・分析する方法を紹介します。
AIに日本語で質問するだけで、こんなことができるようになります:
- 「取引先責任者オブジェクトの必須項目を一覧にして」
- 「'住所'という項目が使われているフローやApexを全部教えて」
- 「このプロファイルとあのプロファイルの権限の違いを表にして」
特別な開発スキルは不要です。Salesforce管理者の方が、AIの力を借りて、より安全かつ効率的に組織を管理するための一歩を踏み出すお手伝いをします。
なぜローカルでメタデータを管理するのか?
AIに組織の情報を質問できるようにするには、まずSalesforce組織の設定情報(メタデータ)を、AIが読み取れるテキストファイルとして手元に用意する必要があります。これが「ローカルでのメタデータ管理」です。
Salesforceの画面上で行う設定変更には、いくつかの課題があります。
- 影響範囲の調査が大変:特定の項目がどこで使われているか調べるのが困難
- 変更履歴が追いづらい:「誰が、いつ、何を、なぜ変更したのか」が分かりにくい
- バックアップが不十分:Sandbox Refreshだけでは過去の特定時点の復元は難しい
メタデータをローカルにダウンロードすることで、これらの課題を解決し、AIがあなたの組織の"専属アナリスト"になるための準備が整います。
前提条件
- Salesforce組織(Developer Edition, Sandboxなど)
- Node.js(v18以上)
- Salesforce CLI(インストール方法は前記事を参照)
- Cursor(インストール方法は前記事を参照)
3ステップで準備完了!
ステップ1:プロジェクトフォルダの作成
ターミナルで以下のコマンドを実行し、作業用のフォルダを作成します。
# SFDXプロジェクトの作成
sf project generate --name my-salesforce-project
cd my-salesforce-project
ステップ2:Salesforce組織への接続
次に、分析したいSalesforce組織に接続します。
sf org login web --alias myDevOrg --set-default
ブラウザが開き、Salesforceのログイン画面が表示されるので、ログインして認証を完了させます。
ステップ3:メタデータのダウンロード
組織から設定情報をダウンロードします。まず、manifest/package.xmlというファイルに、どの設定項目を取得するかを定義します。
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>*</members>
<name>CustomObject</name>
</types>
<types>
<members>*</members>
<name>Layout</name>
</types>
<types>
<members>*</members>
<name>Flow</name>
</types>
<types>
<members>*</members>
<name>Profile</name>
</types>
<types>
<members>*</members>
<name>PermissionSet</name>
</types>
<version>65.0</version>
</Package>
このpackage.xmlは、管理者の方がよく利用する主要なメタデータを取得する設定です。後から「Apexクラスも取得したい」となった場合も、Cursorに「package.xmlにApexクラスを追加して」とお願いすれば、このファイルを更新してくれます。
以下のコマンドで、メタデータをダウンロードします。
組織の規模が大きい場合、sf project retrieve start コマンドの実行に時間がかかることがあります。また、管理パッケージに含まれるコンポーネントなど、一部取得できないメタデータも存在しますのでご注意ください。
sf project retrieve start --manifest manifest/package.xml
force-appというフォルダに設定情報がダウンロードされたら準備完了です!
AIに質問してみよう!Cursor活用ユースケース
ここからは、Cursorを使ってAIに質問しながら組織を分析する具体的な例を見ていきましょう。
ケース1:複雑なフローの内容を解読する
引き継いだフローが複雑で何をしているか分からない時や、特定の処理(例えば商談作成時)にどのフローが動いているか調べたい時にAIは役立ちます。
まず、Cursorのチャットで質問してみましょう:
🐼:商談(Opportunity)が作成されたときに実行されるフローを教えてください
Cursorがforce-app/main/default/flows/ディレクトリを検索して、該当するフローをリストアップしてくれます。
次に、特定のフローについて詳しく聞いてみます:
🐼:Opportunity_AutoUpdate.flow-meta.xml のフローは何をしていますか?3行でまとめてください
AIの回答例:
このフローは、商談が作成または更新されたときに自動実行されます。
商談の金額や契約開始日などのフィールドを元に、関連する商談商品のデータを更新します。
また、特定の条件下で通知を送信します。
さらに詳しく知りたい場合:
🐼:このフローはどこから呼び出されますか?また、外部APIを呼び出していますか?
AIの回答例:
このフローは、プロセスビルダーや他のフローから直接呼び出されてはいません。商談オブジェクトのレコードトリガーフローとして設定されているため、商談の作成・更新時に自動で起動します。
また、フロー内で外部API(コールアウト)を呼び出しているアクションは見当たりません。
🐼:このフローの '受注判定' という決定要素の条件を教えてください
AIの回答例:
'受注判定'の決定要素では、以下の2つの条件がAND(かつ)で設定されています。
1. `{!$Record.StageName}` (フェーズ) が `受注` と等しい
2. `{!$Record.IsClosed}` (完了) が `true` (真) である
このように、複雑なXMLファイルもAIが日本語で要約してくれるので、設定内容を素早く理解できます。
ケース2:項目の影響範囲を洗い出す
「'年間売上'項目を廃止したいけど、どこで使われているか分からない...」影響範囲の調査は管理者にとって重要な作業です。AIを使えば、この作業を正確かつ迅速に行えます。
🐼:プロジェクト全体から
AnnualRevenueというAPI参照名の項目が使われている箇所を全てリストアップしてください。Apex、フロー、LWC、レイアウトのそれぞれで教えてください。
AIの回答例:
`AnnualRevenue` が使用されている箇所は以下の通りです。
**Apexクラス:**
- `AccountTriggerHandler.cls`:45行目で売上計算ロジックに使用
- `AccountBatchUpdate.cls`:102行目でレポート用データとして参照
**フロー:**
- `Account_High_Value_Alert.flow-meta.xml`:大口顧客のアラート通知の条件として使用
**LWCコンポーネント:**
- `accountDetailCard/accountDetailCard.html`:画面表示に使用
**ページレイアウト:**
- `Account-Account Layout.layout-meta.xml`:取引先ページレイアウトに配置
Salesforce標準機能の「使用場所」ボタンでも影響範囲は調査できますが、フロー内の数式やApexコード内での動的な参照までは追跡できない場合があります。AIはファイル全体を横断的に検索するため、より網羅的な調査が可能です。
AIがファイル全体を横断的に検索してくれるので、安全に項目を整理・削除できます。これにより、「うっかり」による設定の破壊を防ぎます。
ケース3:プロファイル権限を比較する
「営業Aさんと営業Bさんで見える画面が違うのはなぜ?」手作業では大変な権限の比較も、AIに任せれば一瞬で完了します。
🐼:
Profile/Sales_A.profile-meta.xmlとProfile/Sales_B.profile-meta.xmlのファイル内容を比較し、オブジェクト権限の違いをMarkdownのテーブル形式でまとめてください。
AIの回答例:
営業Aと営業Bのプロファイルのオブジェクト権限の違いは以下の通りです。
| オブジェクト | 営業Aの権限 | 営業Bの権限 |
|---|---|---|
Contract |
作成、参照、編集、削除 | 参照のみ |
Pricebook2 |
参照のみ | 参照、編集 |
Custom_Report__c |
アクセス不可 | 参照、編集 |
さらに、特定のオブジェクトに対する項目レベルの権限の違いを深掘りすることもできます。
🐼:この2つのプロファイルで、有効になっているApexクラスの違いはありますか?
AIの回答例:
はい、以下のApexクラスへのアクセス権に違いがあります。
- `InvoiceManagement_Controller`:営業Aプロファイルでは有効ですが、営業Bプロファイルでは無効になっています。
ケース4:Apexクラスの要約と解説
開発者が書いたApexコード、何をしているか分からない...。そんな時もAIに聞けば、初心者にも分かるように解説してくれます。
🐼:
AccountTriggerHandler.clsは何をするためのクラスですか?機能ごとに箇条書きで説明してください。
AIの回答例:
このクラスは、取引先(Account)オブジェクトで何かしらの変更があった時に、自動的に動くプログラムです。主に以下の機能があります。
- 住所の自動入力:取引先の郵便番号が入力されたら、自動で住所を補完します。
- 関連する商談の更新:取引先の年間売上が更新されたら、関連する全ての商談の優先度を再計算します。
- エラー通知:特定の条件を満たさないデータが保存されようとした時に、エラーメッセージを表示します。
🐼:このクラスの
updateRelatedOpportunitiesメソッドの処理内容だけを詳しく教えてください。
AIの回答例:
`updateRelatedOpportunities` メソッドは、取引先の年間売上が変更された際に、その取引先に関連する全ての商談レコードの「優先度」項目を更新するための処理です。年間売上が一定額を超えた場合に優先度を「高」に設定するロジックが含まれています。
コードが読めなくても、AIを介することで開発者が実装したロジックを理解し、仕様の確認やレビューに役立てることができます。
ケース5:Apexクラスの関連性を調査する
「このApexクラスは、どのトリガーから呼ばれているんだろう?」といったクラス間の関連性を調べることも可能です。
🐼:外部API(Callout)を呼び出しているApexクラスを探してください
CursorがHttp、HttpRequest、@future(callout=true)などのキーワードで検索し、該当するクラスをリストアップしてくれます。
特定のクラスについて深掘り:
🐼:このクラスを呼び出している他のクラスやトリガーを教えてください
AIの回答例:
`AccountSyncService.cls`は、以下のコンポーネントから呼び出されています。
- Apexトリガー:
- `AccountTrigger.trigger`:`after update` イベントで `AccountSyncService.syncToExternalSystem` を呼び出しています。
- Apexクラス:
- `AccountBatchUpdate.cls`:バッチ処理の `finish` メソッド内で呼び出されています。
🐼:このクラスのメソッド間の関連性を図にしてください
Cursorが図を生成してくれるので、複雑な処理の流れを視覚的に理解できます。
ケース6:テストカバレッジを上げる
🐼:AccountBatchUpdate.cls のテストカバレッジが60%しかありません。
100%にするためのテストケースを追加してください。
Cursorが不足しているテストケースを特定し、追加のテストメソッドを生成してくれます。
さらに、テストケースの網羅性をチェック:
🐼:このテストクラスで、以下のシナリオがカバーされているか確認してください:
- 正常系
- 異常系(エラーが発生する場合)
- 境界値テスト
- バルク処理(200件以上のレコード)
🐼:
AccountBatchUpdate.clsの例外処理をテストするためのメソッドを書いてください
AIの回答例:
以下に、`AccountBatchUpdate.cls`で意図的に例外を発生させ、エラーハンドリングが正しく機能するかを確認するためのテストメソッドの例を示します。
@isTest
static void testBatchUpdate_ErrorHandling() {
// ... テストデータ準備 ...
Test.startTest();
Database.executeBatch(new AccountBatchUpdate());
Test.stopTest();
// ... エラーログが出力されているかなどを確認するAssert文 ...
}
ケース7:レイアウトとコンポーネントの配置
🐼:取引先(Account)レコードページのレイアウトで、カスタムLWCコンポーネント "accountSummary" がどのタブに配置されているか教えてください
Cursorが.flexipage-meta.xml(Lightningページ)のファイルを解析し、コンポーネントの配置場所を具体的に教えてくれます。
AIの回答例:
LWCコンポーネント "accountSummary" は、`Account_Record_Page.flexipage-meta.xml` ファイルに定義されている取引先レコードページに配置されています。
具体的には、「詳細」タブ内の右サイドバー領域に表示される設定になっています。
🐼:このLightningページは、どのアプリケーションのどのプロファイルに割り当てられていますか?
AIの回答例:
`Account_Record_Page.flexipage-meta.xml` の内容によると、このページは以下の割り当てがされています。
- **アプリのデフォルト:** `Sales` アプリケーション
- **プロファイル:** `Sales Profile`, `System Administrator`
活用のヒント
最後に、この手法をさらに活用するためのヒントをいくつか紹介します。
-
Gitでのバージョン管理:
ローカルにダウンロードしたメタデータは、Gitというツールでバージョン管理するのがおすすめです。変更履歴を記録したり、誤った変更を元に戻したりできるため、より安全に組織を管理できます。git initgit commitといった簡単なコマンドで始められます。 -
他のAIツールでもOK:
この記事ではCursorを紹介しましたが、VS CodeとGitHub Copilotの組み合わせや、GoogleのGemini、AnthropicのClaudeといったAIのCLIツールでも、同様にメタデータの分析が可能です。
もちろん Salesforce 公式の Agentforce Vibes でも同様のプロンプトが利用可能です。 -
コマンド操作に慣れないうちは:
ターミナル操作に不慣れでも、CursorのAIチャットに「Salesforce組織からメタデータを取得するコマンドを教えて」のように質問すれば、適切なコマンドを提案してくれます。エラーが出た場合も、エラーメッセージを貼り付けて解決策を尋ねることができます。 -
AIの表示が見づらい...
チャット画面で見づらい場合は、一言工夫してみましょう!
「マークダウンで書き出してみて」「mermaid記法で書き出して」「Draw.io記法で書き出して」とすると、読みやすい形で教えてくれます。
まとめ
この記事では、CursorのAIを活用して、Salesforceのメタデータを日本語で質問しながら理解・分析する方法を紹介しました。
ローカルにメタデータをダウンロードするという一手間を加えるだけで、AIがあなたの組織構成に関する強力なアナリストになってくれます。影響範囲の調査や、複雑な設定の解読、権限の比較など、これまで時間のかかっていた作業を大幅に効率化できるはずです。
ぜひ、この手法でAI時代のSalesforce管理を体験してみてください!
おわりに
マネーフォワードでは、Salesforce を利用して、営業生産性の向上に取り組んでいます。
情報システム領域とデータ基盤と開発の混ざり合う領域であり、エンジニアにとってチャレンジの機会が多い領域です。業務全体を俯瞰する視点を持ち、適切な課題解決に注力すれば、その成果は組織全体に大きな影響を与えることができます。
あなたもエンジニアのスキルを活かし、事業を支えるデータやプロセスを作る新しい挑戦を始めてみませんか?
ビジネスカンパニー 横断BizOps本部 【Salesforceエンジニア/プロジェクトリーダー】
この記事は Salesforce Advent Calendar 2025 の2日目の記事でした。
明日は @denwaya34 さんの「Service Cloud Voice for Partner Telephony について」です。お楽しみに!