開発環境・ツール

レポートのメタデータをVS Codeで取得する手順

レポートは画面から1件ずつ確認していると、フォルダをまたいだ棚卸しに時間がかかります。組織にあるレポートの一覧を取り、VS Codeでメタデータとして取得する手順をまとめます。

2023.09.26

なぜメタデータでレポートを扱うのか

レポートの数が増えると、どのフォルダに何が入っているかを画面だけで追うのは大変です。レポートはメタデータとして取得でき、フォルダ名・レポート名・グラフやフィルタの設定までXMLで確認できます。棚卸しや、別組織へのリリース前の確認に使えます。

レポートとフォルダを用意する

  1. レポートフォルダを作る

    レポートタブから新しいフォルダを作成し、名前を付けます。共有先も合わせて設定します。

  2. フォルダの中にレポートを作る

    作成したフォルダを保存先に指定して、レポートを新規作成します。

以降は、次の4件のレポートが組織にある想定で進めます。

レポート名レポートの一意の名前フォルダ
非公開レポートサンプルprivateReportSample非公開レポート
公開レポートサンプルpublicReportSample公開レポートフォルダサンプル
サンプルフローレポート: 画面フローflow_screen_prebuilt_report公開レポート
TestPackageReportTestPackageReport公開レポート

組織にあるレポートの一覧を取る

一覧の取り方は2つあります。

SOQLで一覧を取る

開発者コンソールのクエリエディタか、匿名ApexからReportオブジェクトを検索すると、フォルダ名と開発者名を確認できます。

String reportList = '';
for (Report rt : [SELECT Id, FolderName, DeveloperName FROM Report]) {
    reportList += rt.FolderName + '/' + rt.DeveloperName + '\n';
}
System.debug(reportList);

組織にあるレポートの、フォルダ名と開発者名を1行ずつ出力します。

出力はデバッグログに1行ずつ並ぶので、そこからpackage.xml用の行を手で組み立てます。件数が少ないうちは扱えますが、増えると書き写しの間違いが起きやすくなります。

CLIで一覧を取る

sf CLIのorg list metadataコマンドを使うと、指定したメタデータタイプのコンポーネント名を直接一覧にできます。デバッグログを読んで書き写す手間がありません。

sf org list metadata --metadata-type Report --target-org あなたの組織のエイリアス

指定した組織にあるReportメタデータの一覧を表示します。

VS CodeにSalesforce拡張機能を入れている場合は、サイドバーの「Org Browser」からも同じ一覧をツリー表示で確認できます。こちらはコマンドを打たずに、フォルダごとのレポートを開いて個別に取得できます。

package.xmlを編集する

package.xmlに、取得したいメタデータタイプと対象のレポートを書きます。標準オブジェクトなど一部のメタデータはワイルドカード(*)を使えませんが、ApexClassのようなタイプでは組織にあるすべてのコンポーネントを*で指定できます。Reportはフォルダ単位の名前を1件ずつ書きます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>*</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>非公開レポート/privateReportSample</members>
        <members>公開レポートフォルダサンプル/publicReportSample</members>
        <members>公開レポート/flow_screen_prebuilt_report</members>
        <members>公開レポート/TestPackageReport</members>
        <name>Report</name>
    </types>
    <version>67.0</version>
</Package>

force-app/main/default/package.xmlに置きます。バージョンは組織のAPIバージョンに合わせます。

⚠️ APIバージョンは、2026年9月時点の最新であるSummer '26(67.0)にしています。

Reportのmembersは「フォルダ名/レポートの一意の名前」の形で書きます。フォルダ名の綴りが違うと、その行だけ一致せず取得されません。正しい名前が分からないときは、sf org list metadata --metadata-type Reportの出力かOrg Browserの表示で確認してから書きます。

VS Codeで取得する

package.xmlを用意したら、VS Codeのターミナルからsfコマンドで取得します。

sf project retrieve start --manifest force-app/main/default/package.xml

package.xmlに書いたコンポーネントを、既定の組織からローカルへ取得します。

Reportだけを対象を絞って取得したいときは、--manifestの代わりに--metadata Reportのようにタイプ名を直接渡すこともできます。package.xmlを作らずに済みます。

取得結果を確認する

取得したファイルは、公開フォルダのレポートであればforce-app/main/default/reports/配下にフォルダごとのディレクトリで保存されます。

flow_screen_prebuilt_report.report-meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<Report xmlns="http://soap.sforce.com/2006/04/metadata">
    <chart>
        <chartType>HorizontalBarStacked</chartType>
        <groupingColumn>FlowInterviewLog$FlowDeveloperName</groupingColumn>
    </chart>
    <columns>
        <field>FlowInterviewLog.FlowInterviewLogs$LogEntryType</field>
    </columns>
    <format>Summary</format>
    <groupingsDown>
        <dateGranularity>Day</dateGranularity>
        <field>FlowInterviewLog$FlowDeveloperName</field>
        <sortOrder>Asc</sortOrder>
    </groupingsDown>
    <name>サンプルフローレポート: 画面フロー</name>
    <reportType>screen_flows_prebuilt_crt__c</reportType>
    <scope>organization</scope>
    <showDetails>false</showDetails>
    <timeFrameFilter>
        <dateColumn>FlowInterviewLog$CreatedDate</dateColumn>
        <interval>INTERVAL_LAST7</interval>
    </timeFrameFilter>
</Report>

画面フローの実行状況を集計するレポートの定義です。グラフとグルーピングの設定が含まれます。

他の3件も同じ形で取得されます。ファイル名は{レポートの一意の名前}.report-meta.xmlで、reportType(レポートの種類)・format(表示形式)・columns(表示項目)がXMLで並ぶ点は共通です。

TestPackageReportのレポート定義XML。formatはTabular、reportTypeはCustomEntity$TestPackageObject__c
本文に載せていない、もう1件の取得結果です。format・name・reportType・columnsが同じ並びで入っている点を見てください。
公開レポートサンプルのレポート定義XML。nameは公開レポートサンプル、formatはTabular
さらに別のレポートです。nameに画面上の表示名がそのまま入るので、XMLだけでどのレポートか判別できます。

棚卸しとリリースへの応用

取得したレポートのメタデータはテキストファイルなので、Gitなどのバージョン管理に載せられます。フォルダ単位で差分が追えるため、「どのレポートがいつ変わったか」を棚卸しできます。別組織へリリースするときも、同じpackage.xmlを使ってsf project deploy start --manifest ...でデプロイすれば、画面から1件ずつ作り直す必要がありません。

ここで間違えやすい

間違い何が起きるか
Reportのmembersにフォルダ名を書かずレポート名だけ書く一致せず、そのレポートは取得されません
フォルダ名の綴りを画面の表示のまま書き写す実際の名前と食い違うと取得漏れになります
package.xmlのAPIバージョンを古いまま使う新しいメタデータの項目が反映されないことがあります
標準レポートをReportメタデータで取ろうとするReportメタデータタイプはカスタムレポートのみが対象です

確認した環境

  • 2026年9月 / Salesforce Summer '26(APIバージョン67.0)時点の公式ドキュメントで、Reportメタデータタイプの対象範囲とCLIコマンドを確認しています
  • レポート名・フォルダ名は、ご自身の組織のものに置き換えてください

まとめ

  • レポートはメタデータとして取得でき、フォルダ単位で棚卸しやバージョン管理に使えます
  • 一覧はSOQLでも取れますが、sf org list metadata --metadata-type ReportかOrg Browserを使うと書き写しの手間がありません
  • Reportのmembersは「フォルダ名/レポートの一意の名前」で書きます。フォルダ名の綴りが違うと取得されません
  • 取得はsf project retrieve start --manifest package.xml、または--metadata Reportで対象を絞れます
  • package.xmlのversionは、組織の現在のAPIバージョンに合わせます

Salesforceの導入・運用についてご相談ください

導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。