Skip to main content

Apex 入門

学習の目的

この単元を完了すると、次のことができるようになります。
  • Apex プログラミング言語の主要な機能を説明する。
  • Apex クラスを保存し、匿名 Apex を使用してメソッドをコールする。
  • 開発者コンソールを使用してデバッグログを調査する。
メモ

メモ

日本語で受講されている方へ
このバッジの Trailhead ハンズオン Challenge は英語で受講していただく必要があります。英語の意味についてはかっこ内の翻訳をご参照ください。Trailhead Playground では (1) [Locale (地域)] を [United States (米国)] に、[Language (言語)] を [English (英語)] に切り替えて、(2) 英語の値のみをコピーして貼り付けてください。こちらの指示に従ってください。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

始める前に

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 言語の特長

他のオブジェクト指向プログラミング言語と同様に、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

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 は、他にも 2 つのコレクション型、Set と Map がサポートされます。これらの型については、『Apex 開発者ガイド』の「Collections」セクションを参照してください。

Apex クラス

Apex クラスの利点の 1 つはコードを再利用できることです。クラスメソッドは、トリガーと他のクラスからコールできます。以降のチュートリアルでは、サンプルのクラスを組織に保存し、そのクラスを使用してメールを送信して、デバッグログを調べます。


Apex クラスを保存する

EmailManager クラスを組織に保存します。

  1. 自分の名前の下にある開発者コンソールまたはクイックアクセスメニュー (設定歯車アイコン) を開きます。
  2. 開発者コンソールで、[File (ファイル)] | [New (新規)] | [Apex Class (Apex クラス)] をクリックし、クラス名に「EmailManager」と入力し、[OK] をクリックします。
  3. デフォルトのクラス本文をサンプルの 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;
        }
    }
  4. [File (ファイル)] | [Save (保存)] をクリックします。

    メモ: コードの構文が正しくない場合は、[Problems (問題)] タブにエラーが表示されます。エラーの詳細を参考にコードを修正します。
メモ
高度な操作 
保存したクラスでは、オブジェクト指向プログラミング (OOP) を利用します。このクラスは、メールの管理に関連するメソッドをカプセル化します。完全な OOP の例にするには、クラスにメンバー変数 (属性) とそれらの属性にアクセスするためのアクセス機構メソッドも含める必要がありますが、ここでは簡略化のために省略しています。

クラスを保存すると Salesforce によってクラスがコンパイルされます。

メソッドをコールしてメールを送信する

公開メソッドを呼び出しましょう。ここでは、匿名 Apex 実行を使用して呼び出します。匿名 Apex を使用すると、コード行をその場で実行でき、特に機能のテストなどで Apex を呼び出す場合に便利です。他の Apex 実行と同様に、結果としてデバッグログが生成されます。

メモ

メモ

トリガーを使用するなど、他にも Apex を呼び出す方法があります。トリガーの詳細については、別のモジュールで学習します。

  1. 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] をクリックします。
  2. 開いたウィンドウで、次の情報を入力します。'Your email address' を自分のメールアドレスで置き換えます。
    EmailManager em = new EmailManager();
    em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
  3. [実行] をクリックします。
    これで、受信箱にメールが送信されるようになりました。メールを確認してみましょう。

デバッグログを調べる

デバッグログは、コードをデバッグするのに便利です。Apex メソッドが実行されると、コールはデバッグログに記録されます。また、独自のデバッグメッセージをログに書き出すことができ、エラーがある場合のコードのデバッグに役立ちます。sendMail() からコールされる inspectResults() ヘルパーメソッドは、System.debug() を使用して、メール送信操作が成功したかエラーになったかを示すメッセージをログに書き出します。メソッドを実行したときに生成されたデバッグログでこれらのメッセージを検索できます。

  1. 開発者コンソールの [Logs (ログ)] タブをクリックし、リストの最新のログをダブルクリックします。
  2. [Debug Only (デバッグのみ)] を選択して、System.debug() ステートメントのログ行のみが表示されるようにログを絞り込みます。 開発者コンソールでデバッグメッセージが表示されるようにデバッグログを絞り込む

メールがエラーなく送信された場合、絞り込まれたログビューには次のメッセージが表示されます。

DEBUG|Email sent successfully (デバッグ|メールは正常に送信されました)

メモ
メモ

また、[Filter (絞り込み条件)] 項目にキーワードを入力して検索するか、その他いずれかのオプションを選択して、デバッグログを絞り込むこともできます。詳細は、ログインスペクターのヘルプを参照してください。

静的メソッドをコールする

ここでは、クラスの sendMail() メソッドはクラスメンバー変数にアクセスしないため、インスタンスメソッドである必要はありません。宣言に static キーワードを追加して、静的メソッドに変更しましょう。静的メソッドは、クラスのインスタンスでコールされる必要がなく、クラス名で直接コールできるため、インスタンスメソッドよりもコールが容易です。

  1. 開発者コンソールで、開いている EmailManager クラスのタブを見つけ、sendMail() メソッド定義の最初の行を次のように変更します (変更は static キーワードの追加のみ)。
    public static void sendMail(String address, String subject, String body) {
  2. [File (ファイル)] | [Save (保存)] をクリックして、クラスを保存します。
  3. [Execute Anonymous (匿名実行)] ウィンドウで、クラス名で静的メソッドをコールするようにステートメントを変更します。
    EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
  4. [Execute (実行)] をクリックします。これで、このメソッドが実行されました。前の手順と同様に、メールと必要に応じてデバッグログをチェックできます。
無料で学習を続けましょう!
続けるにはアカウントにサインアップしてください。
サインアップすると次のような機能が利用できるようになります。
  • 各自のキャリア目標に合わせてパーソナライズされたおすすめが表示される
  • ハンズオン Challenge やテストでスキルを練習できる
  • 進捗状況を追跡して上司と共有できる
  • メンターやキャリアチャンスと繋がることができる