Apex の使用開始
Apex の使用開始
Apex は、言語として次の特徴があります。
- ホスティング — Apex は、サーバ (Lightning Platform) 上で保存、コンパイル、および実行されます。
- オブジェクト指向 — Apex は、クラス、インターフェース、および継承をサポートします。
- 強い型付け — Apex は、コンパイル時にオブジェクトへの参照を検証します。
- マルチテナント型 — Apex はマルチテナントプラットフォームで実行されるため、制限を適用して回避コードを厳密に防止してコードが共有リソースを独占しないようにします。
- データベースとの統合 — レコードに簡単にアクセスして操作できます。Apex では、レコードとその項目に直接アクセスできます。また、それらのレコードを操作するためのステートメントとクエリ言語が提供されます。
- データ指向 — Apex では、データベースへのトランザクションアクセスが提供されるため、ロールバック操作が可能です。
- 使いやすさ — Apex は、使い慣れた Java イディオムに基づいています。
- テストしやすさ — Apex には、単体テストの作成、実行、およびコードカバー率のサポートが組み込まれています。Salesforce では、プラットフォームのアップグレードの前にすべての単体テストを実行することによって、すべてのカスタム Apex コードが期待どおりに動作することを確認しています。
- バージョン管理 — カスタム Apex コードは、異なるバージョンの API に対して保存できます。

Apex 言語の特長
他のオブジェクト指向プログラミング言語と同様に、Apex では次のような言語構成要素がサポートされます。
- クラス、インターフェース、プロパティ、コレクション (配列を含む)
- オブジェクトおよび配列表記
- 式、変数、定数
- 条件付きステートメント (if-then-else) とフロー制御ステートメント (for ループと while ループ)
他のオブジェクト指向プログラミング言語とは異なり、Apex では次の機能がサポートされます。
- クラウド開発 (Apex はクラウドで保管、コンパイル、および実行されるため)
- トリガ (データベースシステムのトリガと類似)
- 直接データベースコールが可能なデータベースステートメントと、データのクエリと検索を行うためのクエリ言語
- トランザクションとロールバック
- global アクセス修飾子 (public 修飾子よりも権限が高く、名前空間とアプリケーションの全体でアクセスが可能)
- カスタムコードのバージョン管理
さらに、Apex では大文字と小文字が区別されません。
開発ツール
ブラウザから Salesforce ユーザインターフェースを使用して Apex を記述し、デバッグ情報に直接アクセスできます。自分の名前 の下にある開発者コンソールまたはクイックアクセスメニュー () を開きます。
また、Visual Studio Code 向け Salesforce 拡張機能を使用して、クライアント上で Apex を作成することもできます。「Salesforce Visual Studio Code Extensions (Salesforce Visual Studio コード拡張機能)」 を参照してください。
データ型の概要
Apex では、次のデータ型がサポートされます。
- Integer、Double、Long、Date、Datetime、String、ID、Boolean などのプリミティブ。
- sObject。汎用 sObject または特定の sObject (Account、Contact、MyCustomObject__c など) のいずれかになります (sObject については後の単元で学習します)。
- 次のものを含むコレクション
- プリミティブ、sObject、ユーザ定義のオブジェクト、Apex クラスから作成されたオブジェクト、またはコレクションのリスト (または配列)
- プリミティブのセット
- プリミティブからプリミティブ、sObject、またはコレクションへの対応付け
- 列挙と呼ばれる型付けされた値のリスト
- ユーザ定義の Apex クラス
- システムが提供する Apex クラス
Apex コレクション: List
List は、順序付けされたオブジェクトのコレクションです。Apex の List は配列と同義で、この 2 つは互いに代替できます。
次の 2 つの宣言は同等です。colors 変数が List 構文を使用して宣言されています。
List<String> colors = new List<String>();
または、colors 変数は配列として宣言できますが、配列ではなく List に割り当てられています。
String[] colors = new List<String>();
一般に、List では割り当てが必要な要素数を事前に決定する必要がないため、配列よりも List の方が作成が容易です。
List への要素の追加は、リスト作成時でも、リスト作成後に add() メソッドをコールしても行うことができます。最初の例は、要素を List に追加する 2 つの方法を示します。
// Create a list and add elements to it in one step List<String> colors = new List<String> { 'red', 'green', 'blue' }; // Add elements to a list after it has been created List<String> moreColors = new List<String>(); moreColors.add('orange'); moreColors.add('purple');
List 要素は、配列要素と同様に、角括弧で囲まれたインデックスを指定することで読み込めます。また、get() メソッドを使用して List 要素を読み込むこともできます。次の例は、前の例で作成されたリストに基づいており、いずれかのメソッドを使用して List 要素を読み込む方法を示します。また、配列要素の反復処理方法も示します。
// Get elements from a list String color1 = moreColors.get(0); String color2 = moreColors[0]; System.assertEquals(color1, color2); // Iterate over a list to read elements for(Integer i=0;i<colors.size();i++) { // Write value to the debug log System.debug(colors[i]); }
中級編
Apex は、他にも 2 つのコレクション型、Set と Map がサポートされます。これらの型については、『Apex 開発者ガイド』の「Collections」セクションを参照してください。
Apex クラス
Apex クラスを保存する
EmailManager クラスを組織に保存します。
-
自分の名前 の下にある開発者コンソールまたはクイックアクセスメニュー (
) を開きます。
- 開発者コンソールで、 をクリックし、クラス名に「EmailManager」と入力し、[OK] をクリックします。
- デフォルトのクラス本文をサンプルの EmailManager クラスで置き換えます。
EmailManager クラスには、メールを送信し、Apex クラスライブラリの組み込みメッセージメソッドを使用する公開メソッド (sendMail()) が含まれます。また、このクラスには非公開ヘルパーメソッド (inspectResults()) があります。これは非公開でクラス内でのみ使用されるため外部からはコールできません。このヘルパーメソッドは、メール送信コールの結果を検査するもので、sendMail() からコールされます。
public class EmailManager { // Public method public void sendMail(String address, String subject, String body) { // Create an email message object Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String[] toAddresses = new String[] {address}; mail.setToAddresses(toAddresses); mail.setSubject(subject); mail.setPlainTextBody(body); // Pass this email message to the built-in sendEmail method // of the Messaging class Messaging.SendEmailResult[] results = Messaging.sendEmail( new Messaging.SingleEmailMessage[] { mail }); // Call a helper method to inspect the returned results inspectResults(results); } // Helper method private static Boolean inspectResults(Messaging.SendEmailResult[] results) { Boolean sendResult = true; // sendEmail returns an array of result objects. // Iterate through the list to inspect results. // In this class, the methods send only one email, // so we should have only one result. for (Messaging.SendEmailResult res : results) { if (res.isSuccess()) { System.debug('Email sent successfully'); } else { sendResult = false; System.debug('The following errors occurred: ' + res.getErrors()); } } return sendResult; } }
- Ctrl キーを押しながら S キーを押してクラスを保存します。
中級編
保存したクラスでは、オブジェクト指向プログラミング (OOP) を利用します。このクラスは、メールの管理に関連するメソッドをカプセル化します。完全な OOP の例にするには、クラスにメンバー変数 (属性) とそれらの属性にアクセスするためのアクセス機構メソッドも含める必要がありますが、ここでは簡略化のために省略しています。
クラスを保存すると Salesforce によってクラスがコンパイルされます。
メソッドをコールしてメールを送信する
公開メソッドを呼び出しましょう。ここでは、匿名 Apex 実行を使用して呼び出します。匿名 Apex を使用すると、コード行をその場で実行でき、特に機能のテストなどで Apex を呼び出す場合に便利です。他の Apex 実行と同様に、結果としてデバッグログが生成されます。
- 開発者コンソールで、 をクリックします。
- 開いたウィンドウで、次の情報を入力します。'Your email address' を自分のメールアドレスで置き換えます。
EmailManager em = new EmailManager(); em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
-
[Execute (実行)] をクリックします。
このメソッドが実行されたので、受信トレイにメールが届いているはずです。メールを確認してみましょう。
デバッグログを調べる
デバッグログは、コードをデバッグするのに便利です。Apex メソッドが実行されると、コールはデバッグログに記録されます。また、独自のデバッグメッセージをログに書き出すことができ、エラーがある場合のコードのデバッグに役立ちます。sendMail() からコールされる inspectResults() ヘルパーメソッドは、System.debug() を使用して、メール送信操作が成功したかエラーになったかを示すメッセージをログに書き出します。メソッドを実行したときに生成されたデバッグログでこれらのメッセージを検索できます。
- 開発者コンソールの [Logs (ログ)] タブをクリックし、リストの最新のログをダブルクリックします。
-
[Debug Only (デバッグのみ)] を選択して、System.debug() ステートメントのログ行のみが表示されるようにログを絞り込みます。
メールがエラーなく送信された場合、絞り込まれたログビューには次のメッセージが表示されます。
DEBUG|メッセージは正常に送信されました。
静的メソッドをコールする
ここでは、クラスの sendMail() メソッドはクラスメンバー変数にアクセスしないため、インスタンスメソッドである必要はありません。宣言に static キーワードを追加して、静的メソッドに変更しましょう。静的メソッドは、クラスのインスタンスでコールされる必要がなく、クラス名で直接コールできるため、インスタンスメソッドよりもコールが容易です。
- 開発者コンソールで、開いている EmailManager クラスのタブを見つけ、sendMail() メソッド定義の最初の行を次のように変更します (変更は static キーワードの追加のみ)。
public static void sendMail(String address, String subject, String body) {
- Ctrl キーを押しながら S キーを押してクラスを保存します。
- [Execute Anonymous (匿名実行)] ウィンドウで、クラス名で静的メソッドをコールするようにステートメントを変更します。
EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
-
[Execute (実行)] をクリックします。
このメソッドが実行されたので、前の手順と同様に、メールと必要に応じてデバッグログをチェックできます。