mcpField
S
salesforce

salesforce

github.com/jdrhyneマーケティング・グロース24041 回インストール9 週間前に更新
リポジトリ

salesforce について

Salesforce skillは、Salesforce CLI(`sf`)を使って認証済みのSalesforce組織を管理する手順を案内します。データ検索、バルク操作、メタデータ、REST API、Apexを扱い、書き込みや削除などには確認のガードレールを設けています。

主な機能

  1. 01組織のログインとターゲット別名の管理
  2. 02SOQLクエリとSOSL検索の実行
  3. 03個別レコードの読み取りと変更
  4. 04Bulk APIによるインポートとエクスポート
  5. 05スキーマ確認とメタデータ操作
  6. 06REST APIの利用とApexの実行

活用シーン

  1. 01取引先責任者や商談データの検索
  2. 02レコードの一括インポート・エクスポート
  3. 03オブジェクトの項目と関連の確認
  4. 04組織メタデータのデプロイや取得

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jdrhyne/agent-skills --skill salesforce

インストール後、Claude Code で/salesforceを入力して読み込まれたか確認します。

同梱ファイル_meta.json.clawhub/origin.json

詳細

Salesforce スキル

Salesforce CLI(sf)を使用して Salesforce 組織を操作します。CLI は使用前に認証する必要があります。構造化出力を得るには、必ず --json を追加してください。

sf バイナリが利用できない場合は、処理を停止し、リポジトリで宣言されているインストールメタデータまたは Salesforce CLI の公式ガイドに従って Salesforce CLI をインストールするようユーザーに依頼してください。CLI が利用可能になったら、組織データを操作する前に sf org login web で認証してください。

安全上の境界

  • ユーザーの明示的な確認なしに、Apex の作成、更新、削除、デプロイ、実行を行わないでください。
  • アクセストークン、認証 URL、リフレッシュトークン、詳細な組織表示の出力をチャットで開示しないでください。
  • ユーザーから保存用の成果物または一括処理を依頼されていない限り、データをファイルにエクスポートしないでください。
  • サンドボックスまたはステージング環境を利用できる場合、本番組織をデフォルトの対象にしないでください。

認証と組織管理

ログイン(ブラウザーを開く)
sf org login web --alias my-org

その他のログイン方法:

# JWT-based login (CI/automation)
sf org login jwt --client-id <consumer-key> --jwt-key-file server.key --username [email protected] --alias my-org

# Login with an existing access token
sf org login access-token --instance-url https://mycompany.my.salesforce.com

# Login via SFDX auth URL (from a file)
sf org login sfdx-url --sfdx-url-file authUrl.txt --alias my-org
組織の管理
# List all authenticated orgs
sf org list --json

# Display info about the default org (access token, instance URL, username)
sf org display --json

# Display info about a specific org
sf org display --target-org my-org --json

# Display with SFDX auth URL (sensitive - contains refresh token)
sf org display --target-org my-org --verbose --json

# Open org in browser
sf org open
sf org open --target-org my-org

# Log out
sf org logout --target-org my-org
設定とエイリアス
# Set default target org
sf config set target-org my-org

# List all config variables
sf config list

# Get a specific config value
sf config get target-org

# Set an alias
sf alias set [email protected]

# List aliases
sf alias list

データのクエリ(SOQL)

デフォルト API による標準 SOQL クエリ:

# Basic query
sf data query --query "SELECT Id, Name, Email FROM Contact LIMIT 10" --json

# WHERE clause
sf data query --query "SELECT Id, Name, Amount, StageName FROM Opportunity WHERE StageName = 'Closed Won'" --json

# Relationship queries (parent-to-child)
sf data query --query "SELECT Id, Name, (SELECT LastName, Email FROM Contacts) FROM Account LIMIT 5" --json

# Relationship queries (child-to-parent)
sf data query --query "SELECT Id, Name, Account.Name FROM Contact" --json

# LIKE for text search
sf data query --query "SELECT Id, Name FROM Account WHERE Name LIKE '%Acme%'" --json

# Date filtering
sf data query --query "SELECT Id, Name, CreatedDate FROM Lead WHERE CreatedDate = TODAY" --json

# ORDER BY + LIMIT
sf data query --query "SELECT Id, Name, Amount FROM Opportunity ORDER BY Amount DESC LIMIT 20" --json

# Include deleted/archived records
sf data query --query "SELECT Id, Name FROM Account" --all-rows --json

# Query from a file
sf data query --file query.soql --json

# Tooling API queries (metadata objects like ApexClass, ApexTrigger)
sf data query --query "SELECT Id, Name, Status FROM ApexClass" --use-tooling-api --json

# Output to CSV file
sf data query --query "SELECT Id, Name, Email FROM Contact" --result-format csv --output-file contacts.csv

# Target a specific org
sf data query --query "SELECT Id, Name FROM Account" --target-org my-org --json

10,000 件を超えるレコードを返すクエリには、代わりに Bulk API を使用してください:

sf data export bulk --query "SELECT Id, Name, Email FROM Contact" --output-file contacts.csv --result-format csv --wait 10
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.json --result-format json --wait 10

テキスト検索(SOSL)

SOSL では複数のオブジェクトを一度に検索できます:

# Search for text across objects
sf data search --query "FIND {John Smith} IN ALL FIELDS RETURNING Contact(Name, Email), Lead(Name, Email)" --json

# Search in name fields only
sf data search --query "FIND {Acme} IN NAME FIELDS RETURNING Account(Name, Industry), Contact(Name)" --json

# Search from a file
sf data search --file search.sosl --json

# Output to CSV
sf data search --query "FIND {test} RETURNING Contact(Name)" --result-format csv

単一レコードの操作

レコードの取得
# By record ID
sf data get record --sobject Contact --record-id 003XXXXXXXXXXXX --json

# By field match (WHERE-like)
sf data get record --sobject Account --where "Name=Acme" --json

# By multiple fields (values with spaces need single quotes)
sf data get record --sobject Account --where "Name='Universal Containers' Phone='(123) 456-7890'" --json
レコードの作成(先にユーザーに確認)
sf data create record --sobject Contact --values "FirstName='Jane' LastName='Doe' Email='[email protected]'" --json

sf data create record --sobject Account --values "Name='New Company' Website=www.example.com Industry='Technology'" --json

# Tooling API object
sf data create record --sobject TraceFlag --use-tooling-api --values "DebugLevelId=7dl... LogType=CLASS_TRACING" --json
レコードの更新(先にユーザーに確認)
# By ID
sf data update record --sobject Contact --record-id 003XXXXXXXXXXXX --values "Email='[email protected]'" --json

# By field match
sf data update record --sobject Account --where "Name='Old Acme'" --values "Name='New Acme'" --json

# Multiple fields
sf data update record --sobject Account --record-id 001XXXXXXXXXXXX --values "Name='Acme III' Website=www.example.com" --json
レコードの削除(ユーザーの明示的な確認が必要)
# By ID
sf data delete record --sobject Account --record-id 001XXXXXXXXXXXX --json

# By field match
sf data delete record --sobject Account --where "Name=Acme" --json

一括データ操作(Bulk API 2.0)

大規模なデータセット(数千〜数百万件のレコード)の場合:

一括エクスポート
# Export to CSV
sf data export bulk --query "SELECT Id, Name, Email FROM Contact" --output-file contacts.csv --result-format csv --wait 10

# Export to JSON
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.json --result-format json --wait 10

# Include soft-deleted records
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.csv --result-format csv --all-rows --wait 10

# Resume a timed-out export
sf data export resume --job-id 750XXXXXXXXXXXX --json
一括インポート
# Import from CSV
sf data import bulk --file accounts.csv --sobject Account --wait 10

# Resume a timed-out import
sf data import resume --job-id 750XXXXXXXXXXXX --json
一括アップサート
sf data upsert bulk --file contacts.csv --sobject Contact --external-id Email --wait 10
一括削除
# Delete records listed in CSV (CSV must have an Id column)
sf data delete bulk --file records-to-delete.csv --sobject Contact --wait 10
ツリー形式のエクスポート/インポート(関連レコード向け)
# Export with relationships into JSON tree format
sf data export tree --query "SELECT Id, Name, (SELECT Name, Email FROM Contacts) FROM Account" --json

# Export with a plan file (for multiple objects)
sf data export tree --query "SELECT Id, Name FROM Account" --plan --output-dir export-data

# Import from tree JSON files
sf data import tree --files Account.json,Contact.json

# Import using a plan definition file
sf data import tree --plan Account-Contact-plan.json

スキーマの確認

# Describe an object (fields, relationships, picklist values)
sf sobject describe --sobject Account --json

# Describe a custom object
sf sobject describe --sobject MyCustomObject__c --json

# Describe a Tooling API object
sf sobject describe --sobject ApexClass --use-tooling-api --json

# List all objects
sf sobject list --json

# List only custom objects
sf sobject list --sobject custom --json

# List only standard objects
sf sobject list --sobject standard --json

Apex コードの実行

# Execute Apex from a file
sf apex run --file script.apex --json

# Run interactively (type code, press Ctrl+D to execute)
sf apex run

# Run Apex tests
sf apex run test --test-names MyTestClass --json

# Get test results
sf apex get test --test-run-id 707XXXXXXXXXXXX --json

# View Apex logs
sf apex list log --json
sf apex get log --log-id 07LXXXXXXXXXXXX

REST API(上級者向け)

認証済みの任意の REST API 呼び出しを実行します:

# GET request
sf api request rest 'services/data/v62.0/limits' --json

# List API versions
sf api request rest '/services/data/' --json

# Create a record via REST
sf api request rest '/services/data/v62.0/sobjects/Account' --method POST --body '{"Name":"REST Account","Industry":"Technology"}' --json

# Update a record via REST (PATCH)
sf api request rest '/services/data/v62.0/sobjects/Account/001XXXXXXXXXXXX' --method PATCH --body '{"BillingCity":"San Francisco"}' --json

# GraphQL query
sf api request graphql --body '{"query":"{ uiapi { query { Account { edges { node { Name { value } } } } } } }"}' --json

# Custom headers
sf api request rest '/services/data/v62.0/limits' --header 'Accept: application/xml'

# Save response to file
sf api request rest '/services/data/v62.0/limits' --stream-to-file limits.json

メタデータのデプロイと取得

# Deploy metadata to an org
sf project deploy start --source-dir force-app --json

# Deploy specific metadata components
sf project deploy start --metadata ApexClass:MyClass --json

# Retrieve metadata from an org
sf project retrieve start --metadata ApexClass --json

# Check deploy status
sf project deploy report --job-id 0AfXXXXXXXXXXXX --json

# Generate a new Salesforce DX project
sf project generate --name my-project

# List metadata components in the org
sf project list ignored --json

診断

# Run CLI diagnostics
sf doctor

# Check CLI version
sf version

# See what is new
sf whatsnew

よく使われる SOQL パターン

-- Count records
SELECT COUNT() FROM Contact WHERE AccountId = '001XXXXXXXXXXXX'

-- Aggregate query
SELECT StageName, COUNT(Id), SUM(Amount) FROM Opportunity GROUP BY StageName

-- Date literals
SELECT Id, Name FROM Lead WHERE CreatedDate = LAST_N_DAYS:30

-- Subquery (semi-join)
SELECT Id, Name FROM Account WHERE Id IN (SELECT AccountId FROM Contact WHERE Email LIKE '%@acme.com')

-- Polymorphic lookup
SELECT Id, Who.Name, Who.Type FROM Task WHERE Who.Type = 'Contact'

-- Multiple WHERE conditions
SELECT Id, Name, Amount FROM Opportunity WHERE Amount > 10000 AND StageName != 'Closed Lost' AND CloseDate = THIS_QUARTER

ガードレール

  • 構造化され、解析可能な出力を得るには、必ず --json を使用してください。
  • ユーザーの明示的な確認なしに、レコードを作成、更新、削除しないでください。操作内容を説明し、実行前に確認を求めてください。
  • ユーザーが明示的に依頼し、対象のレコードを確認するまでは、レコードを削除しないでください。
  • ユーザーがファイル/クエリを確認して承認するまでは、一括削除または一括インポートを行わないでください。
  • 過剰なデータ取得を避けるため、クエリには LIMIT を使用してください。まず LIMIT 10 から始め、ユーザーがさらに必要とする場合に増やしてください。
  • 10,000 件を超えるレコードへのクエリには、sf data query の代わりに sf data export bulk を使用してください。
  • ユーザーが単一のオブジェクトを「検索」するよう求めた場合は、SOQL の WHERE ... LIKE '%term%' を使用してください。複数のオブジェクトを横断して検索する場合は、sf data search で SOSL を使用してください。
  • ユーザーが複数の組織を持つ場合は --target-org <alias> を使用してください。対象が不明確な場合は、どの組織かユーザーに尋ねてください。
  • 認証に失敗した場合、またはセッションの有効期限が切れた場合は、sf org login web で再認証するようユーザーを案内してください。
  • Bulk API 2.0 には SOQL の制限があります(COUNT() のような集計関数は使用できません)。そのような場合は、標準の sf data query を使用してください。
  • オブジェクトを記述する場合(sf sobject describe)、JSON 出力が非常に大きくなることがあります。生の出力をそのまま表示するのではなく、主要な項目、必須項目、関連情報を要約してユーザーに提示してください。

コメント