salesforce について
Salesforce skillは、Salesforce CLI(`sf`)を使って認証済みのSalesforce組織を管理する手順を案内します。データ検索、バルク操作、メタデータ、REST API、Apexを扱い、書き込みや削除などには確認のガードレールを設けています。
主な機能
- 01組織のログインとターゲット別名の管理
- 02SOQLクエリとSOSL検索の実行
- 03個別レコードの読み取りと変更
- 04Bulk APIによるインポートとエクスポート
- 05スキーマ確認とメタデータ操作
- 06REST APIの利用とApexの実行
活用シーン
- 01取引先責任者や商談データの検索
- 02レコードの一括インポート・エクスポート
- 03オブジェクトの項目と関連の確認
- 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 出力が非常に大きくなることがあります。生の出力をそのまま表示するのではなく、主要な項目、必須項目、関連情報を要約してユーザーに提示してください。
コメント
Markdown 対応