𝗬𝗼𝘂𝗿 𝗔𝗽𝗲𝘅 𝗠𝗶𝗴𝗵𝘁 𝗥𝗲𝘁𝘂𝗿𝗻 𝗙𝗲𝘄𝗲𝗿 𝗥𝗲𝗰𝗼𝗿𝗱𝘀 𝗶𝗻 𝗦𝘂𝗺𝗺𝗲𝗿 '𝟮𝟲
Salesforce Summer '26 (API v67.0) では、Apex に重大な変更が導入されます。この変更により、エラーが発生することなくコードの実行結果が変わる可能性があります。
長年、Apex はデフォルトでシステムモードで実行されてきました。これは、SOQL、SOSL、および DML がユーザー権限や共有ルールを無視することを意味していました。そのため、本来表示すべきでないユーザーに対してデータが表示されてしまう可能性がありました。
API v67.0 では、このデフォルト設定が逆転します。データベース操作は、今後ユーザーモードで実行されるようになります。
v67.0 での変更点:
• SOQL、SOSL、および DML は、デフォルトでユーザー権限と共有ルールを適用します。 • 共有宣言のないクラスは、デフォルトで "with sharing" になります。 • "WITH SECURITY_ENFORCED" は削除されます。代わりに "WITH USER_MODE" を使用する必要があります。 • トリガーは常にシステムモードで実行されます。
この変更はクラスの API バージョンに紐付いています。既存のクラスは、67.0 にアップグレードするまで変更されません。これにより、移行をコントロールできます。
次のような「サイレントな問題」に注意してください:
- クエリのレコード減少: ユーザーにアクセス権がないため、クエリが 500 件ではなく 40 件しか返さないといったことが起こり得ます。これにより、合計値の誤りやレポートの不備が発生します。
- コンパイルエラー: "WITH SECURITY_ENFORCED" は、新しいバージョンではコンパイルに失敗します。
- 連携の失敗: 連携ユーザーが、自動化ジョブに必要なデータへのアクセス権を失う可能性があります。
- 共有設定の変更: 共有宣言がないことに依存していたクラスは、今後共有ルールが適用されるようになります。
安全に移行する方法:
- コードの棚卸し: "WITH SECURITY_ENFORCED" や共有宣言のないクラスを検索します。
- Sandbox でテスト: コントローラーや REST エンドポイントなど、リスクの高いクラスから優先的に更新します。
- System.runAs() の使用: テストがパスしたからといって安心せず、権限を制限したユーザーでテストを行い、データの可視性を確認してください。
- 意図的に使用する: "SYSTEM_MODE" や "without sharing" は、明確な理由がある場合にのみ使用してください。
今これらの変更を行っておくことで、将来的な本番環境でのサイレントなバグを防ぐことができます。
オプションの学習コミュニティ: https://t.me/GyaanSetuAi