SalesforceのApexでListを使いこなす|実コード付き

※本サイトにはプロモーション・広告が含まれています。

✔以下の疑問をお持ちの方へ向けた記事です

「SalesforceのApexでListコレクションはどのように使用するのか?」
「ApexのListコレクションの基本的な使い方は何か?」
「ApexでListコレクションを使った具体的なコーディング例はどのようなものか?」

✔当記事を読むことで得られる知識

  • Salesforce ApexでのListコレクションの基本的な概念
  • Listコレクションの作成、操作、およびアクセスの方法
  • Listコレクションを使用した具体的なApexコーディング例

当記事では、Salesforce開発言語であるApexにおけるListコレクションの使い方について詳しく解説します。

Salesforceの開発者やApexを学び始めた方々にとって、実践的なガイドとなる内容です。

ぜひ最後までご覧ください。

Salesforce

定義や属性などは公式ガイドを必ず参考にしましょう。

当記事では、主にその使い方を具体例とともに解説します。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

プロダクトマネージャーとして、Apex・Visualforceの開発エンジニアとして、以下のようなプロジェクトに従事してきました

  • 新規事業の立ち上げに伴うビジネスプロセス構築とSalesforceのカスタマイズ
  • SFDXを活用した大規模リリース
  • Visualforce等による一般ユーザー向けサイト・アプリケーションの構築

相談・業務の依頼も承ります。ご質問・ご希望をお問い合わせください。

ApexのListコレクション入門

Apexコードを学ぶ際に、Listコレクションの理解は不可欠です。

これから、ApexでのプログラミングにおけるListの重要性と基本的な使い方、その応用方法までを解説していきます。

これらの知識はSalesforce上での効率的なデータ処理に役立つでしょう。

  • Listコレクションとは何か
  • ApexにおけるListの重要性
  • ArrayとListの違い

Listコレクションとは何か

ApexにおけるListは、オーダリストのコレクション型で、指定された順序で要素を管理できます。

Listの宣言は以下のの形でおこないます。

List<データ型> 変数名 = new List<データ型>();

Listは動的にサイズが変わるため、要素の追加や削除が容易であり、さまざまなデータを順序付きで管理したい場合に有用です。

ApexにおけるListの重要性

Apexプログラミングにおいて、Listはデータの集合を扱う際に欠かせない要素です。

とくに、複数のレコードに対して繰り返し処理をおこなう場合などにおいて、Listを使うことでコードの可読性と効率が大きく向上します。

List<Account> accounts = [SELECT Id, Name FROM Account];

SOQLクエリの結果をListに格納し、それを利用してデータを操作します。

このように、ListはSalesforceのデータモデルと密接に関連しているため、Apexの中核的な概念と考えて良いでしょう。

ArrayとListの違い

ArrayとListは両者ともに複数の要素をひとつの変数で管理するデータ構造ですが、いくつかの点で違いがあります。

ApexにおけるArrayは固定長であり、宣言時にそのサイズを定義する必要があります。

String[] arrayString = new String[5];

一方でListは動的な長さを持ち、宣言後も要素の追加や削除をおこなってサイズを変更できます。

この柔軟性がApexプログラミングにおいてListが好んで使われる理由です。

上記のコードで初期化すると、すべてnullのString[]ができあがります。

Listの基本操作

Listコレクションを活用するうえで、まずは基本的な操作方法をマスターすることが重要です。

ここではListの初期化や要素の追加、アクセス方法、そしてListのサイズを管理する方法について説明します。

  • Listの初期化と要素の追加
  • List要素へのアクセスと編集
  • Listのサイズ管理と制御

Listの初期化と要素の追加

Listを使う前には、まず初期化が必要です。

List<Type> listName = new List<Type>();

例えば、整数のListを初期化するには以下のように書きます。

List<Integer> numbers = new List<Integer>();

//要素の追加はこちら。
numbers.add(10);

addメソッドで要素の追加が可能で、Listnumbersに整数の10が追加されます。

List要素へのアクセスと編集

Listコレクションの要素へアクセスするには、インデックスを使用します。

例えば、初めて追加された要素にアクセスするにはこちら。

listName[0]

要素の編集も同様にインデックスを通じておこない、以下の形で実行可能です。

listName[index] = newValue;

たとえば、Listの最初の要素を20に更新する場合はこちらのようになります。

numbers[0] = 20;

Listのサイズ管理と制御

Listのサイズを管理するには、以下の方法があります。

  • size()メソッドを使って現在の要素数を取得
  • isEmpty()メソッドを利用してListが空かどうかを確認

要素の削除するにはこちら。

  • remove(index)メソッド: 特定のインデックスの要素を削除
  • clear()メソッド: Listのすべての要素を削除

例えば、numbers.remove(0);はListnumbersの最初の要素を削除し、numbers.clear();はListからすべての要素を削除します。

Listの応用とベストプラクティス

Listコレクションをさらに深く理解し活用するためには、応用的な操作を習得する必要があります。

ループ処理の実装、Listのソート、そして大量データの扱い方など、さまざまな事例を通じて詳しく見ていきましょう。

  • List内のループ処理と繰り返し
  • Listのソートと検索
  • 大量データの効率的な扱い

List内のループ処理と繰り返し

List内の要素に対して繰り返し処理をおこなうには、forループを使用しましょう。

例えば、Listの各要素を出力するには以下のように記述できます。

for(Integer num : numbers) {
    System.debug(num);
}

numbersというList内のすべての整数をデバッグログに出力。

ループ処理は、List内のデータに柔軟にアクセスし、それを用いた複雑な計算やデータの変換などに使用されます。

Listのソートと検索

Listをソートするには、sort()メソッドを利用します。

たとえば、整数のListを昇順にソートする場合は、以下を実行するだけ。

numbers.sort();

Listの中から特定の要素を検索するには、ループ処理を使用し、条件に一致するかをチェックします。

もしくは、contains()メソッドを用いて特定の要素がListに含まれているかを確認することも可能です。

大量データの効率的な扱い

大量のデータをListで扱う際には、パフォーマンスを意識したコーディングが必要です。

例えば、Listを必要以上に頻繁にソートするのは避け、代わりにデータを追加する段階で順序を考慮するなどの工夫が求められます。

また、List内でのデータ検索には効率的なアルゴリズムを選び、適切なインデックスを使用することが重要です。

ListとSalesforceのデータ構造

セールスフォースにおいてApexのListを使う場合には、カスタムオブジェクトやSOQLクエリ、さらにはDML操作との組み合わせが一般的です。

これらの統合により、データの取り扱いがより柔軟で強力になります。

  • カスタムオブジェクトとの組み合わせ
  • SOQLクエリとListの統合
  • ListとDML操作(挿入、更新、削除)

カスタムオブジェクトとの組み合わせ

Listは、カスタムオブジェクトのレコードを格納し処理するためによく使用されます。

カスタムオブジェクトのListを生成するには、以下のようにListの型をカスタムオブジェクトにしてください。

List<MyCustomObject__c> customObjectList = new List<MyCustomObject__c>();

またレコードをListに追加する際には、新たなインスタンスを作成して追加します。

MyCustomObject__c newRecord = new MyCustomObject__c(Name='New Record');
customObjectList.add(newRecord);

この方法により、関連するカスタムオブジェクトの複数レコードを一度に処理できるようになります。

SOQLクエリとListの統合

SOQLクエリを使用して取得したデータをListに格納することは、非常に一般的な操作です。

例えば、すべてのアカウントレコードを取得しListに保管する場合は、以下の形でシンプルに記述できます。

List<Account> accountList = [SELECT Id, Name FROM Account];

このソースコードにより、accountListにはアカウントオブジェクトのレコードが保存されます。

ListとDML操作(挿入、更新、削除)

ListはDML(Data Manipulation Language)操作と連携し、複数のレコードを一度に挿入、更新、または削除する際に使われます。

例えば、複数の新しいカスタムオブジェクトのレコードをListに格納してから、一括挿入も可能。

insert customObjectList;

じようにupdatedeleteを使ってListに格納されたレコードを更新または削除できます。

ガバナ制限を回避するためにも、このようなコードは必須です。

ガバナ制限について知りたい方はこちらをどうぞ。)

Listのトラブルシューティング

Listを使用する際には、エラーやパフォーマンス、セキュリティといった問題に直面するかもしれません。

これらの問題を的確に解決するためには、原因を理解し適切な対策を講じることが重要です。

  • 一般的なList関連のエラー
  • パフォーマンスの問題と最適化
  • セキュリティとListの管理

一般的なList関連のエラー

Listを使用していてよく起こりうるエラーには、IndexOutOfBoundsExceptionがあります。

これは、存在しないインデックスにアクセスしようとした場合に発生するもの。

ほかのエラーとしては、正しくない型の要素をListに追加しようとしたときにTypeMismatchExceptionが生じます。

これらのエラーを防ぐには、List操作には常に注意深く、適切なエラーハンドリングが大切です。

パフォーマンスの問題と最適化

大規模なデータを扱う際には、List操作に起因するパフォーマンスの低下に警戒する必要があります。

とくにループ処理の中でのList操作は、適切に扱わないと重大なパフォーマンス問題を引き起こします。

例えば、ループ内での不必要なSOQLクエリの実行は避けるべきです。

パフォーマンスの最適化には、必要最小限のクエリを実行し、アルゴリズムを効率良く設計が求められます。

セキュリティとListの管理

Listに含まれるデータは、セキュリティの観点からも適切に管理する必要があります。

とくに、機密性の高い情報を取り扱う際には、誤って外部に公開しないよう細心の注意を払うべきです。

また、with sharingwithout sharingキーワードの使用により、Apexクラスの実行コンテキストに応じたデータアクセスの制御も重要です。

適正なアクセス権限の管理をおこなうことで、無断アクセスやデータの不正な変更を防ぎます。

まとめ

当記事では以下のようなことについてお伝えしてきました。

  • ApexにおけるListコレクションの入門的な解説から応用的な使い方
  • Salesforce内でのデータ構造との連携
  • トラブルシューティングの方法

ListはSalesforceでのデータ処理を行う際に非常に重要な役割を果たします。

当記事で紹介した知識を基に、効率的で安全なApexコードの開発が可能になることを願っています。

実際のコーディングの際には、今回学んだ概念を思い出し、最適なコードを書くための参考にしていただけると幸いです。

タイトルとURLをコピーしました