Tech Waves

produced by Hakuhodo DY ONE

本ブログは、株式会社Hakuhodo DY ONEの開発チームによるエンジニアブログです。
それぞれのメンバーが業務を通して得た技術情報や、各種セミナーの参加レポート、またその他トピックについて情報発信を行っています。

Salesforce CLI CustomObjectのメタデータ取得までやってみた

こんばんは!oneTossiyです👓

今回はSalesforce CLIの組織への接続からメタデータの取り込みまでをハンズオン形式で解説します。

ターミナルに詳しくない人でも理解しやすいよう、できるだけわかりやすく説明していますのでぜひ参考にしてみてください!

読者想定

  • Salesforce CLIインストール済みだがターミナル操作に不慣れな方
  • メタデータを取得するところまで実践したい方

1. Salesforce CLIコマンドが実行できるかどうか確認

コマンドプロンプトもしくはターミナル上で以下のコマンドを実行してください。

sf version

実行後、以下のような文字列がターミナル上に表示されたらOKです。 私の環境(2026年6月10日時点)では以下のバージョンですが、アップデートにより表記が変わる可能性があります。

もし、表示されない場合はインストールがきちんとできているか確認してください。

$ sf version
@Salesforce/cli/2.137.7 darwin-arm64 node-v22.22.3

インストール方法はこちらから↓ developer.salesforce.com

2. 組織へログインする

Salesforceの組織へのログインします。

接続にはログイン画面のURLが必要です。コマンド入力後、ログイン画面がブラウザ上に立ち上がりますのでログインしてください。

sf org login web --instance-url ログインURL --alias エイリアス名

👉エイリアスとは?
組織につけるニックネームのようなものです。
毎回組織を指定するたびに組織のURLやユーザIDなど長くて覚えにくい識別子がありますが、エイリアスという形でわかりやすい別名を割り当てることで、短い名前で組織を指定できるようになります。
例えば—alias devしておけば、以降のコマンドで-o devと書くだけでその組織を指定することができます。

次にきちんと組織に接続できるか確認をします。

以下のコマンドを入力して指定したエイリアスに対して、ログイン情報が一致しているか確認してください。

sf org list

私の環境では2つ組織を接続していますので、2レコード分の接続情報が表示されています。

3. プロジェクトを作成する

メタデータを取得する前に、あらかじめメタデータを格納するための箱を作成する必要があります。

これはメタデータ取得以外にもリソースをデプロイしたり、gitと連携したりする際にも重要になってきますので、忘れずに実行しましょう。

sf project generate --name 作成したいフォルダ名

実行後、—nameの後に与えたフォルダ名のフォルダが作成されるのでそちらへ移動してください。

(下記はSalesforce_devへ移動する例)

cd Salesforce_dev

プロジェクトのディレクトリ構成(自動で作成されます)

.
├── config
│   └── project-scratch-def.json
├── eslint.config.js
├── force-app
│   └── main
│       └── default
│           ├── applications
│           ├── aura
│           ├── classes
│           ├── contentassets
│           ├── flexipages
│           ├── layouts
│           ├── lwc
│           ├── objects
│           │   └── Account
│           │       ├── Account.object-meta.xml
│           │       ├── fields
│           │       │   ├── AccountNumber.field-meta.xml
│           │       │   ├── AccountSource.field-meta.xml
│           │       │   ├── Active__c.field-meta.xml
│           │       │   ├── AnnualRevenue.field-meta.xml
│           │       │   ├── BillingAddress.field-meta.xml
│           │       │   ├── CleanStatus.field-meta.xml
│           │       │   ├── CustomerPriority__c.field-meta.xml
│           │       │   ├── DandbCompanyId.field-meta.xml
│           │       │   ├── Description.field-meta.xml
│           │       │   ├── DunsNumber.field-meta.xml
│           │       │   ├── Fax.field-meta.xml
│           │       │   ├── Industry.field-meta.xml
│           │       │   ├── Jigsaw.field-meta.xml
│           │       │   ├── NaicsCode.field-meta.xml
│           │       │   ├── NaicsDesc.field-meta.xml
│           │       │   ├── Name.field-meta.xml
│           │       │   ├── NumberOfEmployees.field-meta.xml
│           │       │   ├── NumberofLocations__c.field-meta.xml
│           │       │   ├── OperatingHoursId.field-meta.xml
│           │       │   ├── OwnerId.field-meta.xml
│           │       │   ├── Ownership.field-meta.xml
│           │       │   ├── ParentId.field-meta.xml
│           │       │   ├── Phone.field-meta.xml
│           │       │   ├── Rating.field-meta.xml
│           │       │   ├── ShippingAddress.field-meta.xml
│           │       │   ├── Sic.field-meta.xml
│           │       │   ├── SicDesc.field-meta.xml
│           │       │   ├── Site.field-meta.xml
│           │       │   ├── SLA__c.field-meta.xml
│           │       │   ├── SLAExpirationDate__c.field-meta.xml
│           │       │   ├── SLASerialNumber__c.field-meta.xml
│           │       │   ├── TickerSymbol.field-meta.xml
│           │       │   ├── Tier.field-meta.xml
│           │       │   ├── Tradestyle.field-meta.xml
│           │       │   ├── Type.field-meta.xml
│           │       │   ├── UpsellOpportunity__c.field-meta.xml
│           │       │   ├── Website.field-meta.xml
│           │       │   └── YearStarted.field-meta.xml
│           │       ├── listViews
│           │       │   ├── AllAccounts.listView-meta.xml
│           │       │   ├── MyAccounts.listView-meta.xml
│           │       │   ├── NewLastWeek.listView-meta.xml
│           │       │   ├── NewThisWeek.listView-meta.xml
│           │       │   └── PlatinumandGoldSLACustomers.listView-meta.xml
│           │       └── webLinks
│           │           └── Billing.webLink-meta.xml
│           ├── permissionsets
│           ├── staticresources
│           ├── tabs
│           └── triggers
├── jest.config.js
├── package.json
├── README.md
├── scripts
│   ├── apex
│   │   └── hello.apex
│   └── soql
│       └── account.soql
└── sfdx-project.json

4. 取得できるメタデータ一覧を取得する

今回の記事ではカスタムオブジェクトのメタデータを抽出しますが、他にも様々なオブジェクトを抽出することが可能です。

取得できる一覧を確認するには以下のコマンドを実行します。エイリアス名は2.の工程で説明したエイリアスを指定してください。

sf org list metadata-types -o エイリアス名

実行後、取得できるメタデータ一覧が表示されます。

👉ターミナルを始めて使う方へのTips
ターミナル上で大量のデータを確認するのは大変だと感じるかもしれません。 そのような場合は以下のコマンドを活用することで、ターミナル上の出力結果をテキストファイルで保存することが可能です。
sf org list metadata-types -o エイリアス名 > text.txt
このコマンドを実行すると、実行したディレクトリにtext.txtファイルが作成され、そこに実行結果が書き込まれます。

5. カスタムオブジェクトのメタデータを抽出しよう

先ほどのメタデータリストを確認すると、CustomObjectも抽出できるリストに含まれています。(少し見づらいですが左列に存在しています)

それでは以下のコマンドを実行してカスタムオブジェクトのメタデータ一覧を見てみましょう。

sf org list metadata --metadata-type CustomObject -o エイリアス名

実行後、オブジェクト一覧と作成者などが確認できるでしょう。

さらに、標準オブジェクトの中のAccountオブジェクトのメタデータを抽出してみます。

Accountは標準オブジェクトですが、Salesforceのメタデータタイプ上ではカスタムオブジェクトとして扱われていますので、抽出が可能です。

こちらのコマンドはこれまでのターミナル上に表示されるものとは異なり、実際のプロジェクトフォルダにxmlファイルとして直接メタデータが格納されます。

さらに具体的に説明すると、指定した組織から Account オブジェクトのメタデータを取得し、プロジェクト内の force-app/main/default/objects/Account 配下に保存します。

⚠️注意点
3.の工程で作成したプロジェクトフォルダにいる状態でこちらのコマンドを実行してください。

格納場所は4行目のPathに相対パスとして表示されます。

sf project retrieve start --metadata CustomObject:Account -o エイリアス名

メタデータ取得後のフォルダ構成↓

.
└── Account
    ├── Account.object-meta.xml
    ├── fields
    │   ├── AccountNumber.field-meta.xml
    │   ├── AccountSource.field-meta.xml
    │   ├── Active__c.field-meta.xml
    │   ├── AnnualRevenue.field-meta.xml
    │   ├── BillingAddress.field-meta.xml
    │   ├── CleanStatus.field-meta.xml
    │   ├── CustomerPriority__c.field-meta.xml
    │   ├── DandbCompanyId.field-meta.xml
    │   ├── Description.field-meta.xml
    │   ├── DunsNumber.field-meta.xml
    │   ├── Fax.field-meta.xml
    │   ├── Industry.field-meta.xml
    │   ├── Jigsaw.field-meta.xml
    │   ├── NaicsCode.field-meta.xml
    │   ├── NaicsDesc.field-meta.xml
    │   ├── Name.field-meta.xml
    │   ├── NumberOfEmployees.field-meta.xml
    │   ├── NumberofLocations__c.field-meta.xml
    │   ├── OperatingHoursId.field-meta.xml
    │   ├── OwnerId.field-meta.xml
    │   ├── Ownership.field-meta.xml
    │   ├── ParentId.field-meta.xml
    │   ├── Phone.field-meta.xml
    │   ├── Rating.field-meta.xml
    │   ├── ShippingAddress.field-meta.xml
    │   ├── Sic.field-meta.xml
    │   ├── SicDesc.field-meta.xml
    │   ├── Site.field-meta.xml
    │   ├── SLA__c.field-meta.xml
    │   ├── SLAExpirationDate__c.field-meta.xml
    │   ├── SLASerialNumber__c.field-meta.xml
    │   ├── TickerSymbol.field-meta.xml
    │   ├── Tier.field-meta.xml
    │   ├── Tradestyle.field-meta.xml
    │   ├── Type.field-meta.xml
    │   ├── UpsellOpportunity__c.field-meta.xml
    │   ├── Website.field-meta.xml
    │   └── YearStarted.field-meta.xml
    ├── listViews
    │   ├── AllAccounts.listView-meta.xml
    │   ├── MyAccounts.listView-meta.xml
    │   ├── NewLastWeek.listView-meta.xml
    │   ├── NewThisWeek.listView-meta.xml
    │   └── PlatinumandGoldSLACustomers.listView-meta.xml
    └── webLinks
        └── Billing.webLink-meta.xml

まとめ

今回はSalesforce CLI導入後、組織の接続からメタデータを抽出するところまで解説しました。

Salesforceの操作はGUIが主流なため難しい部分もあるかもしれないですが、身につけておいて損はありませんので、ぜひ活用してみてください。

この記事を書いた人

oneTossiy (id:id:oneTossiy)

CDP構築を主に担当しています。CDP以外にも気になることがあれば投稿していきます!