Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Salesforce 大規模開発で留意するトピック集
Search
CLB
April 19, 2021
0
1.2k
Salesforce 大規模開発で留意するトピック集
【オンライン開催】Salesforce Developers Meetup #25 でのスライド資料です。
CLB
April 19, 2021
Tweet
Share
More Decks by CLB
See All by CLB
Salesforce Functions (Java)で実装はどう変わるか
altyjp
0
510
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Building an army of robots
kneath
306
46k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
630
The Invisible Side of Design
smashingmag
302
51k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Unsuck your backbone
ammeep
671
58k
Context Engineering - Making Every Token Count
addyosmani
7
280
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Faster Mobile Websites
deanohume
310
31k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3k
Statistics for Hackers
jakevdp
799
220k
Transcript
Salesforce 大規模開発 で留意するトピック 集 Sato Ryo @ Team spirit inc.
自己紹介 Sato Ryo です。 仕事: チームスピリット で チームスピリット EX を開発しています。
バックエンド(業務処理の開発担当)です。 Salesforce歴 2 年くらいの初心者です。 趣味: ネコ、サバゲー、キャンプなどなど。
チーム スピリット とは? https://www.teamspirit.com/ja-jp/lp/ex/
内容 Salesforce の大規模開発で直面した問題や生産性を上げる為の トピックを紹介します。 パッケージの分割を最初から行う SFDX開発でのクラスの管理方法 テストコードでSFオブジェクトは利用しない方が良い?
20万件のワナ
パッケージ分 割を最初から 行う 理由 Apex コードの文字数は6MB までの制限がある。 パッケージのアップグレードに失敗する恐れがある。
パッケージ の アップグレードインストール時にインス トール時のバックアップ領域が不足することがあり、 「 Dependent class is invalid and needs recompilation」など のエラーが発生する。 こうなると時の運でインストールができるかできないか が決まる。 経験的に、3MBを超えたあたりからパッケージの分割を考え た方が良い。
こんな感じで小ネタを挟んでいきたいと 思います。 次はSFDX でリポジトリをすっきりさせる 小技です。
SFDX開発で のクラスの管 理方法 Apexクラスが増えてくると、classes/ に Apex クラスが増えて いきません? ←ここが厚くなる
SFDX開発で のクラスの管 理方法 実はフォルダ分けして配置することができます。 Java とは違い、Apex はフォルダの位置を変更しても問題なく 動作します。
次:テストコードの書き方
テストコード でSFオブジェ クトは利用し ない方が良 い? テストコードでこのようなコードを書く例はありませんか? @isTest static void
fooTest() { TestData__c data = new TestData__c(); data.value = 'test val 1’; insert data; String actual = getfoo(); System.assertEquals(data.value, actual); }
テストコード でSFオブジェ クトは利用し ない方が良 い? SFのテストオブジェクトは他のテストと共用です。 その為、前述のテストは並列実行時にエラーが発生すること があります。
並列実行は解除することができますが、直列実行となる為、 その分時間がかかります。 https://developer.salesforce.com/docs/atlas.ja- jp.apexcode.meta/apexcode/apex_testing_best_practices.htm
テストコード でSFオブジェ クトは利用し ない方が良 い? isTest(isParallel=true)を利用するとそのテストクラスは並列実行 が有効になります。 リポジトリパターンを利用してテスト時はMockのリポジトリを
利用するなど、SFオブジェクトに依存しないテストを作ること も大切です。 @isTest(isParallel=true) private class fooTest { @isTest static void fooTest() { MockedData data = new MockedData(); data.value = 'test val 1’; String actual = getfoo(); System.assertEquals(data.value, actual); } }
ラスト、本番中に発覚しやすいバグ です。
20万件のワナ Q. 以下のSOQL, 問題点が分かりますか? SELECT Id FROM Account WHERE Name
!= ''
20万件のワナ 先ほどの SOQL、非セレクティブSOQLです。
20万件のワナ 非セレクティブ SOQL(効率の悪いSOQL)であり、前述の SOQLは テーブルフルスキャンが発生する。 フルスキャンの結果、スキャンが必要なレコードが20万件を 超えると System.QueryException
が発生する。 レコードの数が増えることによって発覚するバグで、本番環 境で発生しやすいバグと言える。
20万件のワナ セレクティブSOQLの条件(公式ドキュメントから抜粋) セレクティブ SOQL クエリ条件クエリ検索条件の 1 つがイン デックス付き項目にあり、そのクエリ検索条件によって結果 となる行数がシステム定義のしきい値より少なくなる場合、
そのクエリはセレクティブです。SOQL クエリのパフォーマ ンスは、WHERE 句に使用される 2 つ以上の検索条件がその 条件を満たす場合に改善されます。 選択度しきい値は、初めの 100 万件のレコードの 10%、それ 以降のレコードの 5% 未満の、最大 333,333 件です。インデッ クス付き標準項目であるクエリ検索条件がある場合など一部 の状況では、しきい値が高くなる場合があります。また、選 択度しきい値は変化します。 https://developer.salesforce.com/docs/atlas.ja- jp.apexcode.meta/apexcode/langCon_apex_SOQL_VLSQ.htm
20万件のワナ SOQL 実行計画 を確認して、フルスキャンになる物がないか 確認しよう。 やり方 1. Help >
Preferences で Enable Query Plan を有効化 2. Query タブの Query Plan をクリック
20万件のワナ 上級者編 Nullが入るとフルスキャンになる。 public List<Account> getAccountByIds(List<Id> accountIds){ return [SELECT
Id FROM Account WHERE Id IN :accountIds]; }
ありがとうございました!