Apex 入門
学習の目的
この単元を完了すると、次のことができるようになります。
- Apex プログラミング言語の主要な機能を説明する。
- Apex クラスを保存し、匿名 Apex を使用してメソッドをコールする。
- 開発者コンソールを使用してデバッグログを調査する。
始める前に
Apex のワクワクする冒険に一緒に出かけましょう。このモジュールでは、プログラミング言語に関する基本的な情報を説明するだけでなく、詳細もすばやく掘り下げていきます。このモジュールで初めて Apex に触れる場合は、まず「クイックスタート: Apex」プロジェクトを参照することを強くお勧めします。その後、このモジュールに戻り、先に進みましょう。
Apex とは?
Apex は、Java に似た構文を使用し、データベースのストアドプロシージャーのように動作するプログラミング言語です。開発者は Apex を使用して、ボタンのクリックや関連レコードの更新、Visualforce ページなどのシステムイベントにロジックを追加することができます。
言語として、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 では、Salesforce 固有のデータ型 (sObject データ型) を含む、さまざまなデータ型がサポートされます。
Apex では、次のデータ型がサポートされます。
- Integer、Double、Long、Date、Datetime、String、ID、Boolean などのプリミティブ。
- sObject。汎用 sObject または特定の sObject (Account、Contact、MyCustomObject__c など) のいずれかになります (sObject については後の単元で学習します)。
- 次のものを含むコレクション
- プリミティブ、sObject、ユーザー定義のオブジェクト、Apex クラスから作成されたオブジェクト、またはコレクションのリスト
- プリミティブ、sObject、ユーザー定義のオブジェクト、Apex クラスから作成されたオブジェクト、またはコレクションのセット
- プリミティブからプリミティブ、sObject、またはコレクションへの対応付け
-
列挙型と呼ばれる型付けされた値のリスト
- ユーザー定義の Apex クラス
- システムが提供する Apex クラス
Apex コレクション: List
リストは、同じ型のデータの順序付けられたコレクションを保持します。
次の 2 つの宣言は同等です。colors
変数が List 構文を使用して宣言されています。
List<String> colors = new List<String>();
または、colors
変数は配列表記を使用して宣言することもできます。
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 要素を読み込む方法を示します。また、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 System.debug('Print out the colors in moreColors:'); for(String color : moreColors) { // Write value to the debug log System.debug(color); }
Apex クラス
Apex クラスの利点の 1 つはコードを再利用できることです。クラスメソッドは、トリガーと他のクラスからコールできます。以降のチュートリアルでは、サンプルのクラスを組織に保存し、そのクラスを使用してメールを送信して、デバッグログを調べます。
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 a list 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|Email sent successfully
静的メソッドをコールする
ここでは、クラスの 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 (実行)] をクリックします。これで、このメソッドが実行されました。前の手順と同様に、メールと必要に応じてデバッグログをチェックできます。
リソース