[salesforce]Force.comプログラミングのベストプラクティス集

By |1月 12, 2011|salesforce, |


Jeff Douglasさんが、Force.com開発のベストプラクティスをまとめていました。

参考:Force.com Programming Best Practices

Apex

  • APEXは自由な記法で開発することができます。大文字小文字の区別もありませんし、タブ/スペースの利用も自由にできます。ただし、可読性を向上するためには、JAVA記法に沿って記述をして、タブの代わりに2つスペースを利用したほうが望ましいです。
  • 同期処理が不要な場合は、非同期処理 (@future annotation)を利用します。
  • 非同期処理の内容は、 “bulkified”されている必要があります。
  • APEXコード内で正しいエラーハンドリングを実装している必要があります。
  • SOSL/SOQLインジェクションを防ぐために、静的クエリ、変数バインディング、シングルクオートエスケープを利用する必要があります。
  • 大量レコードをクエリーする場合は、SOQL “for” loopを使いましょう。
  • 可能な場合はできるだけ、SOQLより高速なSOSLを使いましょう。
  • ガバナ制限を避けるために、APEX limit メソッドを使って、ガバナ制限の利用状況を確認しましょう。
  • ループ処理の中で、SOQL/SOSLクエリを使わないこと。
  • ループ処理の中で、DML処理を使わないこと。
  • ループ処理の中で、非同期処理を使わないこと。
  • APEXコード内に、SalesforceIDをハードコーディングして、それに依存した設計にしないこと。(レコードは組織の利用状況に応じて変更される場合もありますし、サンドボックスと本番組織でIDが異なる場合もあるからです。)

Triggers

  • 1オブジェクトに実装するのは1トリガまで。
  • トリガ内に複雑な処理を実装するのは避けましょう。単純化するために、トリガからの処理は外部のAPEXクラスに任せたほうが好ましいです。トリガーテンプレートが参考になります。
  • 全てのhelperクラスとメソッドはBulkifyしましょう。
  • トリガは “bulkified”されている必要があり、処理するレコード数は200レコードまでに制限されている必要があります。
  • DML処理を実行する場合は、レコードを一つ一つ処理するのではなく、配列にまとめて複数レコードを一度のDML処理で扱いましょう。
  • SOQLの”where”内で配列を使って、必要なレコードは一度のSOQLクエリで取得するようにしましょう。
  • トリガの命名規則には、対象のオブジェクト名を含む一貫性のある形式にしましょう。例: AccountTrigger

Visualforce

  • 選択リストはViauforceページ内にハードコーディングせずに、コントローラ内に記述しましょう。
  • JavascriptとCSSファイルは、キャッシュを有効活用するために、静的リソースに置きましょう
  • CSSファイルはページ内の最上部に、JavaScriptは最下部に記述して、ページの読み込みを高速化しましょう。
  • ビューステートのサイズを縮小してページ読み込みを高速化するために、コントローラ内の変数でポストバックが不要なものは”transient”修飾子を付けましょう。
  • 配列の繰り返し表示が必要な場合は、 <apex:repeat> タグを使いましょう。
  • CDNへのコンテンツキャッシングを有効化するために、適切な場合は<apex:page> タグのcache属性を有効にしましょう。

Unit Testing

  • テストの命名規則には、対象のクラス名を含む一貫性のある形式にしましょう。例: Test_AccountTrigger
  • テストクラスには@isTestアノテーションを付けましょう。
  • テストメソッドは、対象組織の実際のレコードに依存しない形で、対象のメソッドで必要な全てのデータを生成する必要があります。
  • APEXコードが期待通り動作しているか検証するためにSystem.assertを使いましょう。
  • 全ての条件分岐をテストしましょう。
  • 条件分岐の成功/失敗の両方をテストしましょう。
  • トリガをテストする際には、200レコードを処理できるように “bulkified”されているか検証し、 “Too many SOQL queries: 21″ のエラーがでないようにしましょう。
  • ガバナ制限のテストをする際には、Test.startTestTest.stopTestを使い、ガバナ制限の値はハードコーディングせずにAPEX limit メソッドを使うようにしましょう。
  • 共有ルールの検証をするために、System.runAs()を使って特定ユーザによる実行を検証しましょう。
  • テストはブラウザからSalesforceの画面上で行うのではなく、Force.com IDEから行いましょう。ブラウザ上からだとコードカバレッジを見間違ってしまう場合があります。
  • Force.com Security Source Scanner を使ってSalesforce組織のセキュリティチェックとコードチェックを行いましょう。 (e.g., Cross Site Scripting, Access Control Issues, Frame Spoofing)