Skip to main content
From 16:00 UTC on January 17, 2026, to 20:00 UTC on January 17, 2026, we will perform planned maintenance on the Trailhead, myTrailhead, and Trailblazer Community sites. During the maintenance, these sites will be unavailable, and users won't be able to access them. Please plan your activities around this required maintenance.

Apex クラスで SOQL クエリを作成する

学習の目的

この単元を完了すると、次のことができるようになります。

  • メソッドで SOQL クエリを作成する。
  • SOQL クエリで返されたデータを操作する。
メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

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

一緒にトレイルを進みましょう

エキスパートの説明を見ながらこのステップを実行したい場合は、次の動画をご覧ください。これは Trailhead Live の「Trail Together」(一緒にトレイル) シリーズの一部です。

(巻き戻して最初から見直したい場合、このクリップは 17:32 分から開始されます。)

はじめに

SOQL クエリの基本事項を理解したら、数式項目に関する知識を SOQL クエリに適用できます。

この例のクエリは、SELECT FirstName, LastName FROM Contact というごくシンプルなものです。

ここで、結果として返されたデータを保存するオブジェクトが必要です。SOQL クエリでは常にデータがリスト形式で返されるため、Apex リストを作成します。「システム管理者のための Apex の基本」で学んだとおり、リストを宣言するには、List という予約語、データ型 (< > 記号で囲む)、新しいリストの名前が必要です。このクエリの場合、データ型は Contact で、新しいリストに listOfContacts という名前を付けます。リスト宣言は次のようになります。

List<Contact> listofContacts

クエリの結果を新しいリストに代入するには、次のとおり、代入演算子の等号 (=) をリスト宣言とクエリの間に配置します。

List<Contact> listofContacts = [SELECT FirstName, LastName FROM Contact];

構文に注目すると、クエリが角括弧 [ ] で囲まれ、ステートメントがセミコロン (;) で終わっています。

このクエリを開発者コンソールで試してみましょう。ここではテストを目的に、取引先責任者のリストをデバッグログに送信して、コードがどのように処理されるのか確認します。

開発者コンソールでコードをテストする

  1. 開発者コンソールで、[Debug (デバッグ)] | [Open Execute Anonymous Window (匿名実行ウィンドウを開く)] をクリックします。
  2. [Enter Apex Code (Apex コードを入力)] ウィンドウで、クエリ結果を新しいリストに代入します。
    List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact LIMIT 2];
  3. 次の行で、listOfContacts リストをデバッグログに送信します。
    System.debug(listOfContacts);
  4. [Open Log (ログを開く)] チェックボックスをオンにします。
  5. [Execute (実行)] をクリックします。
  6. [Execute Log (実行ログ)] ウィンドウの下部にある [Debug Only (デバッグのみ)] チェックボックスをオンにします。
    デバッグログの最初の 2 つの項目は次のようになります。

[2

  1. クエリで結果が見つからなかった場合は、空のリストが返されます。
    [2]|DEBUG|()

コードの実行処理

SELECT FirstName, LastName FROM Contact LIMIT 2 からの矢印がクラウドの Contact オブジェクトを指しています。「クエリと一致するデータを Apex クラスに送信」という 2 つ目の矢印が取引先責任者リストを指しています。1.FirstName = Rose, LastName = Gonzalez.2.FirstName = Sean, LastName = Forbes.

コードを実行すると、まずクエリが処理されます。

 SELECT FirstName, LastName FROM Contact LIMIT 2

クエリがすべての取引先責任者を見つけて、各レコードから姓と名を取得します。次に、取引先責任者レコードから選択されたデータが listOfContacts というリストに追加されます。

最後に、行 2 で listOfContacts の内容が System.debug に表示されます。

Apex で SOQL クエリを実行する

前の単元では、クエリエディターを使用してテーブルにデータを返しました。この単元では、[Execute Anonymous (匿名実行)] ウィンドウを使用してクエリを実行し、結果をデバッグログに送信しました。どちらもうまくいきましたが、実際にはユーザーが開発者コンソールでクエリを実行することはありません。組織のユーザーインターフェースでデータを返す方法が必要です。この手段となるのが Apex のクラスやメソッドです。では、Apex で SOQL クエリを実行し、結果を操作する方法を見ていきましょう。

最初に、Apex クラスで Apex メソッドを作成します。この Apex メソッドはクエリを実行して必要なデータを選択します。

  1. 開発者コンソールで、[File (ファイル)] | [New (新規)] | [Apex Class (Apex クラス)] をクリックします。
  2. このクラスに ContactUtility という名前を付け、[OK] をクリックします。
  3. クラスが開き、クラスを宣言してクラスの本体用のスペースを確保するコードが表示されます。
  4. 行 2 に、viewContacts というメソッドを追加します。
    public static void viewContacts(){
    }
  5. 行 3 で、viewContacts メソッドの内側に、クエリを実行して結果を新しいリストに代入するコードを貼り付けます。
    List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact];
  6. このクラスを保存します。

これで listOfContacts リストに保存するデータが揃いました。次は、for ループを使用してこのリストを反復処理し、出力形式を構成します。

for ループを使用してリストを反復処理する

「システム管理者のためのオブジェクト指向プログラミング」で、for ループを使用してリスト項目を 1 つずつ処理する方法を学習しました。ここでは、for ループを使用して各取引先責任者の姓と名を組み合わせ、取引先責任者のフルネームにします。まず、ループを作成し、次にループ内の各レコードを処理します。

for ループを宣言するには、変数名、そのデータ型、ループが反復処理するリストの名前が必要です。

for ループでは、特定のオブジェクトを直接参照することはありません。代わりに、ループ内のリスト項目を 1 つずつ表す変数を作成します。この変数は、リストの各項目のプレースホルダーの役割を果たします。どのような名前でも構いませんが、簡単なものにします。ここでは con とします。次に、変数のデータ型を Contact、リストの名前を listOfContacts に指定します。すべてをまとめると次のようになります。

for (Contact con : listOfContacts){ //loop body}

for ループを宣言する

  1. viewContacts メソッドで、SOQL クエリの後に次のコードを貼り付けます。
    for(Contact con : listOfContacts) {
        //loop body
    }
  2. このクラスを保存します。

これまでに、データベースにクエリを実行し (1)、データを選択して、そのデータをリストに保存し (2)、for ルールを作成しました (3)。

1.「The query, Select FirstName, LastName FROM Contact LIMIT 2」というクエリが listOfContacts リスト (2) をフィードします。3.「for(Contact con : listOfContacts){ //logic goes here}」という for ループが listOfContacts リストの取引先責任者を処理します。

次に、ループ内でリストの項目を処理します。最終的な目的は、listOfContacts の各取引先責任者を次の形式で表示することです。

First Name: <contact's first name>, Last Name: <contact's last name>

リスト項目の項目を参照するには、ドット表記を使用してオブジェクトとその項目を指定します (object.field)。たとえば、listOfContacts リストの Contact オブジェクトの FirstName 項目を参照する場合は、次のとおり、con (オブジェクト変数) と FirstName (項目) の間にピリオド (ドット表記の「ドット」) を配置します。

con.FirstName

このリストには、姓項目と名項目が別々に記載されています。Apex では、連結を使用して項目値 (場合によってはリテラルテキスト) を結合します。(「システム管理者のための Apex の基本」でもいくつかの結合を実施しました。)

復習すると、結合により、項目データが object.field として表されます。リテラルテキストは単一引用付で囲まれます。必要な場合は、リテラルテキストの先頭と末尾にスペースを含めます。プラス記号 (+) を使用して、項目同士、または項目とリテラルテキストを結合します。

では、この例の for ループの本体を完成させましょう。最初に、listOfContacts リストの項目ごとに、FirstName と LastName を結合して fullname という新しい変数にします。

String fullName = 'First Name: ' + con.FirstName + ', Last Name: ' + con.LastName;

FirstName と LastName の間にスペースが必要です。出力は次のようになります。

First Name: Angela, Last Name: Carter

次のようにならないようにします。

FirstName:Angela,LastName:Carter

fullName 変数 (データ型: String) の値が代入されたら、この変数を次の行のデバッグステートメントに追加します。

System.debug(fullName);

for ループのリスト項目を処理する

  1. viewContacts メソッドで、//loop body を次のコードに置換します。
    String fullName = 'First Name: ' + con.FirstName + ', Last Name: ' + con.LastName;
    System.debug(fullName);
  2. このクラスを保存します。

コードは次のようになります。

public class ContactUtility {
    public static void viewContacts() {
        List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact];
        for(Contact con : listOfContacts) {
            String fullName = 'First Name: ' + con.FirstName + ', Last Name: ' + con.LastName;
            System.debug(fullName);
        }
    }
}

クラス、メソッド、SOQL クエリが揃ったら、コードを実行してどのようになるか確認します。[Execute Anonymous (匿名実行)] ウィンドウで Apex コードを実行するには、ドット表記を使用してクラスとメソッドを指定します。

  1. [Execute Annonymous (匿名実行)] ウィンドウを開きます。
  2. [Enter Apex Code (Apex コードを入力)] ウィンドウで、既存のコードを次のコードに置き換えます。
    ContactUtility.viewContacts();
  3. [Open Log (ログが開く)] チェックボックスがオンになっていることを確認します。
  4. [Execute (実行)] をクリックします。
  5. [Debug Only (デバッグのみ)] を選択します。

結果の最初の 6 行が次のようになります。

Execution Log (実行ログ)

Event (イベント)

Details (詳細)

USER_DEBUG

[5]|DEBUG|First Name: Rose, Last Name: Gonzalez

USER_DEBUG

[5]|DEBUG|First Name: Sean, Last Name: Forbes

USER_DEBUG

[5]|DEBUG|First Name: Jack, Last Name: Rogers

USER_DEBUG

[5]|DEBUG|First Name: Pat, Last Name: Stumuller

USER_DEBUG

[5]|DEBUG|First Name: Andy, Last Name: Young

USER_DEBUG

[5]|DEBUG|First Name: Tim, Last Name: Barr

ご覧ください! SOQL、for ループ、連結を使用して、取引先責任者データを取得し、データをリストに代入して、リストを反復処理し、求めていた結果を生成することができました!

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む