0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

匿名ブロックと匿名ウィンドウの違い

Posted at

Salesforceの匿名ブロック匿名ウィンドウはどちらもApexコードを一時的に実行する方法ですが、用途や動作の違いがあります。具体例を交えて解説します。


1. 匿名ブロック(Anonymous Block)

概要

  • Salesforce開発コンソール(Developer Console)やVS CodeのExecute Anonymous機能を使って、一時的にApexコードを実行できる方法。
  • クラスやメソッドの定義は不要で、Apexコードを直接記述して実行可能。
  • トランザクションとして実行され、コミットされる(ロールバックは手動)

使用例

開発コンソールで以下のコードを匿名実行すると、Account レコードが作成されます。

Account acc = new Account(Name='Test Account');
insert acc;
System.debug('Created Account ID: ' + acc.Id);

主な特徴

✅ データベースへの変更(DML操作)はコミットされる
トランザクションは匿名実行全体を含む(エラーが起きるとロールバックされる)。
@TestVisible や private メソッドも実行できる(通常はアクセス不可なprivateメンバーにもアクセス可能)。

実行結果の確認

  1. 開発コンソールの「ログ」タブSystem.debug() の出力を確認できる。
  2. 実際にレコードが作成されるので、 Account オブジェクトで新しいレコードを確認可能。

2. 匿名ウィンドウ(Anonymous Window)

概要

  • 開発コンソールの「実行」メニュー → 「開発用の匿名 Apex」ウィンドウ で開くApexコード入力画面のこと。
  • 「匿名ブロックを実行するためのウィンドウ」であり、匿名ブロックと機能は同じ
  • 実行結果(ログ)をすぐに確認できる UI が用意されている

使用例

  1. 開発コンソールを開く
    • 設定 (⚙) > 開発コンソール を開く
  2. 「実行」メニュー > 「開発用の匿名 Apex」 を選択
  3. 匿名ウィンドウにコードを記述して「実行」ボタンを押す
    System.debug('Hello from Anonymous Window!');
    
  4. ログタブで「DEBUG」メッセージを確認

主な特徴

匿名ブロックを実行するための専用ウィンドウ
開発者が試しにコードを実行するのに便利なUIを提供
ログや結果を簡単に確認できる(ウィンドウの下部に出力される)。
実行結果はすぐに反映されるが、セッションが切れると保持されない


3. 匿名ブロック vs. 匿名ウィンドウの比較

特徴 匿名ブロック 匿名ウィンドウ
実行方法 開発コンソール、VS Code 開発コンソールのUI
実行内容 Apexコード全体 匿名ブロックと同じ
トランザクション コード全体が1トランザクション 同じ
DML操作 可能(コミットされる) 可能(コミットされる)
ログの確認 開発コンソールの「ログ」タブ 匿名ウィンドウ内で表示
使いやすさ ログを開かないと見えない すぐに結果が見える

4. どちらを使うべき?

  • ログをすぐに確認したい場合匿名ウィンドウが便利
  • VS Code や他のツールを使いたい場合匿名ブロック(Execute Anonymous)
  • データを変更するテストをしたい場合どちらでもOK(DML操作が可能)
  • privateメソッドをテスト実行したい場合どちらでもOK(@TestVisibleのメソッドも実行可)

5. 注意点

本番環境(Production)では使用できない

匿名ブロックはSandboxDeveloper Edition では実行できますが、本番環境では管理者権限があっても使用不可です。

大量データ処理には不向き

匿名ブロックの実行は一時的なものであり、バッチ処理のように大量のレコードを処理するには適していません。

トランザクション管理に注意

匿名ブロックは1つのトランザクションとして扱われるため、途中でエラーが発生すると全体がロールバックされます。例えば、以下のコードでは2つ目の insert でエラーが発生すると、1つ目の insert も取り消されます。

Account acc1 = new Account(Name='Test Account 1');
insert acc1;

Account acc2 = new Account(); // Name がないのでエラー
insert acc2; // ここでエラーが発生すると、acc1 の挿入も取り消される

解決策:トランザクション制御を追加

try {
    Account acc1 = new Account(Name='Test Account 1');
    insert acc1;

    Account acc2 = new Account(); // Nameがないのでエラー
    insert acc2;
} catch (Exception e) {
    System.debug('Error: ' + e.getMessage());
}

この方法でも acc1 はロールバックされますが、エラー処理が可能になります。


6. まとめ

匿名ブロック 匿名ウィンドウ
実行方法 開発コンソール / VS Code 開発コンソール(UIあり)
ログ確認 開発コンソールのログタブ ウィンドウ内で即時確認
DML実行 可能(コミットされる) 可能(コミットされる)
トランザクション コード全体が1トランザクション 同じ
用途 ちょっとしたスクリプト実行 手軽にコードを試す
  • 開発コンソールで「実行 → 開発用の匿名 Apex」を開くと、それが匿名ウィンドウ
  • 匿名ウィンドウで実行するApexコードそのものが匿名ブロック

つまり、「匿名ウィンドウ」は「匿名ブロックを記述するためのエディタ」 という位置づけです。

開発中に一時的なコード実行をしたい場合は、匿名ウィンドウを開いてコードを試し、デバッグを行うのが便利 です!

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?