0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Salesforceの本番組織からApexクラスを削除する

Last updated at Posted at 2024-04-10

Apexコードは本番環境から直接削除できない

もうこの処理は使わなくなったから削除したいな〜ということがあっても、ApexクラスやApexトリガーは本番環境から直接削除ができないため、別途WorkbenchやSalesforce CLIを使う必要があります。
Salesforce CLIのsfdxコマンドを使うものはよく見るのですが、
sfコマンドを使って削除処理をする記事をあまり見つけられなかったので、備忘録として残すことにしました。

Salesforce CLIのバージョン確認

Salesforce CLIのv2でないと動かないそうなので、以下のコマンドでバージョンを確認します。

sf version
@salesforce/cli/2.35.6 darwin-x64 node-v20.11.1

@salesforce/cli/2.xx.xが2から始まっていればOK。

本番組織に接続する

コンソールから以下のコマンドを入力するとブラウザが開くのでログインします。

sf org login web --set-default-dev-hub --alias dev

apex-del1.png

ログイン後にこの画面が開けばOK。

apex-del2.png


org login webがうまくいかない場合はorg login deviceを使う。書き方はwebと一緒。

sf org login device --set-default-dev-hub --alias dev
% sf org login device --set-default-dev-hub --alias dev
=== Action Required!

Enter XXXXXXXX device code in this verification URL: https://login.salesforce.com/setup/connect

実行するとこんな感じで8桁の文字列とログインURLが返されるので、ブラウザで開いてXXXXXXXXの部分を入力する。

参考

destructiveChanges.xmlの作成

VS Codeで作ります。

apex-del3.png

プロジェクトを右クリックしてSFDX: Generate Manifest Fileをクリック。

apex-del4.png

ファイル名をdestructiveChanges.xmlと入力します。

マニフェストファイルの名前にはルールがあり、削除のみを行う場合はdestructiveChanges.xmlとするらしい。

apex-del5.png

プロジェクト内のmanifestフォルダにファイルが作成されました:bulb:

destructiveChanges.xml
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <fullName>destructive</fullName>
    <types>
        <members>HogeController</members> <!-- 削除したいApexクラスの名前 -->
        <members>HogeControllerTest</members>
        <name>ApexClass</name> <!-- 削除したいコンポーネントの名前 -->
    </types>
    <types>
        <members>HogeTrigger</members>
        <name>ApexTrigger</name>
    </types>
    <version>60.0</version> <!-- APIバージョン -->
</Package>

ある程度の枠組みは最初から入力されているので、こんな感じで中身を書き足します。

  • fullName
    • 変更セットの名前にあたるもの
  • members
    • 削除するファイルの名前
  • name
    • 削除するコンポーネントの名前
  • version
    • 削除対象を探す際、ここで指定されたバージョン以前のものを対象とする

上記の内容をコマンドから作る場合はproject generate manifestを使います。

sf project generate manifest --metadata ApexClass:HogeController --metadata ApexClass:HogeControllerTest --metadata ApexTrigger:HogeTrigger -t destroy -d manifest
  • -m(--metadata)で削除するコンポーネントを指定
    • コンポーネント名とファイル名を:で繋ぐことでファイル指定ができる
  • 削除するためのファイルなので-t(-type)destroyを指定
    • ファイル名がdestructiveChanges.xmlになる
  • -d(-output-dir)で出力先をmanifestフォルダに指定
    • すでに同名のファイルがある場合は上書き

参考

package.xmlの作成

destructiveChanges.xmlの作成と同じ手順で作成します。
中身は空でOK!

package.xml
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <version>60.0</version> <!-- APIバージョン -->
</Package>

本番環境にデプロイする

以下のコマンドを実行します。
SFDXプロジェクト内でないと動かないので、VS Codeのターミナルタブからやると楽。

sf project deploy start --manifest manifest/package.xml --post-destructive-changes manifest/destructiveChanges.xml --target-org dev
  • -x(--manifest)でマニフェストファイルのパスを指定
    • SFDXプロジェクトを基準にした絶対パス
  • --post-destructive-changes-x(--manifest)と同じパスを指定
    • prepostがあるが、デプロイ後にファイル削除するのでpostの方を使う
  • -o(--target-org)でデプロイ先の組織を指定
Deploying v60.0 metadata to ixxxng@example.co.jp using the v60.0 SOAP API.
Deploy ID: XXXXXXXXXXXXXXXXXX
Status: Succeeded | ████████████████████████████████████████ | 2/2 Components | 6/6 Tests

Test Results Summary
Passing: 6
Failing: 0
Total: 6
Time: 11698

Status: Succeededでこんな感じのログが返ってくれば成功です。
CLI、簡単だけど難しい。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?