Apex 入門
学習の目的
始める前に
Apex のワクワクする冒険に一緒に出かけましょう。このモジュールでは、プログラミング言語に関する基本的な情報を説明するだけでなく、詳細もすばやく掘り下げていきます。このモジュールで初めて Apex に触れる場合は、まず「クイックスタート: 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 では大文字と小文字が区別されません。
開発ツール
Visual Studio Code 向け Salesforce 拡張機能を使用して、クライアントコンピューターで Apex を記述してデバッグできます。「Salesforce Visual Studio Code Extensions (Salesforce Visual Studio コード拡張機能)」 を参照してください。
また、Salesforce ユーザーインターフェースを使用して、ブラウザーで直接 Apex を記述し、デバッグ情報にアクセスすることもできます。自分の名前 の下にある開発者コンソールまたはクイックアクセスメニュー () を開きます。
データ型の概要
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.add()
メソッドを使用して新しい要素を追加すると、必要に応じてコレクションを増やすことができます。コレクション内の既存の要素をインデックスで参照するには、角括弧の配列表記を使用します。ただし、角括弧の配列記法で要素を追加することはできません。
次の例は、リスト作成時に要素を追加し、add()
メソッドを使用してさらに要素を追加する方法を示しています。
// 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 クラス
EmailManager
クラスを組織に保存します。
- 自分の名前の下にある開発者コンソールまたはクイックアクセスメニュー (
) を開きます。
- 開発者コンソールで、[File (ファイル)] | [New (新規)] | [Apex Class (Apex クラス)] をクリックし、クラス名に「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; } }
-
[File (ファイル)] | [Save (保存)] をクリックします。
メモ: コードの構文が正しくない場合は、[Problems (問題)] タブにエラーが表示されます。エラーの詳細を参考にコードを修正します。
メソッドをコールしてメールを送信する
公開メソッドを呼び出しましょう。ここでは、匿名 Apex 実行を使用して呼び出します。匿名 Apex を使用すると、コード行をその場で実行でき、特に機能のテストなどで Apex を呼び出す場合に便利です。他の Apex 実行と同様に、結果としてデバッグログが生成されます。
- 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
- 開いたウィンドウで、次の情報を入力します。'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) {
- [File (ファイル)] | [Save (保存)] をクリックして、クラスを保存します。
- [Execute Anonymous (匿名実行)] ウィンドウで、クラス名で静的メソッドをコールするようにステートメントを変更します。
EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
- [Execute (実行)] をクリックします。これで、このメソッドが実行されました。前の手順と同様に、メールと必要に応じてデバッグログをチェックできます。