適当に作ったDE組織のメタデータをSFDXのプロジェクト化する #salesforce

作業メモです。

developer.salesforce.com

非管理パッケージを作った後で、取ってきたメタデータをコピーしてあげればよいみたいですね。

CLI: プロジェクトの土台を作成

$ sfdx force:project:create --projectname sample-project

慣れないうちはレイアウトもデフォルトにしておいた方が無難でしょう。

CLI: DE組織を接続

CLI経由で、DE組織へのアクセスが行えるようにします。

$ sfdx force:auth:web:login -a de1

ブラウザが立ち上がって、Salesforceへのログインが促されるので、ログインします。
何かと使うので、組織のエイリアス de1 も指定しておきます。

DE: 非管理パッケージを作成

バージョン管理したいメタデータコンポーネントに追加した上で、非管理パッケージをアップロードします。

とりあえず重要なのは

だけなので、それ以外はテキトーに…。

以下、パッケージ名は「pkg1」にしたことを前提としています(要:適宜読み替え)。

CLI: 非管理パッケージを取得

$ sfdx force:mdapi:retrieve -s -r ./tmp -u de1 -p pkg1

./tmp/ の下に unpackaged.zip が落ちてくるはず。

CLI: 非管理パッケージを展開

$ unzip ./tmp/unpackaged.zip -d ./unzipped

CLI: メタデータをsfdx形式のフォーマットに変換する

$ sfdx force:mdapi:convert -r ./unzipped

コマンドリファレンスに "This command must be run in a project." とあるので、必須な処理みたいですね。

ところでこのコマンド、「一体何をしているか?」ですが、基本的には、unzipped/**/* から force-app/main/default/**/* への再帰的なファイルコピーのようです。

ただし単純なコピーではなく、以下のように、いくつか例外(?)があります。

  • package.xml はコピーしない。これは .forceignore が効いているせいかもしれません。
  • 対応するソースに *-meta.xml ファイルがない場合、オリジナルのファイルに -meta.xml を付けた形でリネームする。
  • Zip形式の静的リソースは展開してコピーする。

挙動から推測するより、中身を見たほうが早いかも、と思いました。