IT人材をお探しの方は、まずはお電話ください。担当営業がすぐにご要望にマッチした人材をご提案いたします。
tel:03-6409-6766 お急ぎの方はお電話ください

ブログTOP > IT・技術関連 > Salesforceでwith sharingを使おう!関連するキーワードの使い方も解説

Salesforceでwith sharingを使おう!関連するキーワードの使い方も解説

IT・技術関連 更新日:2024.09.05
エンジニア採用
Salesforceでwith sharingを使おう!関連するキーワードの使い方も解説

Salesforceのwith sharingの概要 with sharingとは、Salesforceで使われるApexという言語で、クラスを作成する際に、共有ルールの適用方法を指定できるキーワードです。 上記の1文で、with sharingのイメージは掴めたでしょうか。 まだイメージを掴めていない方は、with sharingの説明に入る前に、必要な前提知識を確認しておきましょう。

前提知識

以下で、with sharingを理解するための語句の意味を確認しましょう。 with sharingを理解するためには、最低限「Apex」、「クラスとオブジェクト」、「共有ルール」を理解することが必要です。

Apexとは?

Apexとは、あるプロセス処理を実行する「フロー」と、複数の関連した一連の操作を実行するのに便利な「トランザクション」の制御ステートメントをAPIへのコールと組み合わせて実行できるようにした、Salesforceで使用されるプログラミング言語です。 Apexは、webサービスやメールサービスを作成する際や、複数のオブジェクトに複雑な検証を実行する際などに使われます。 また、Apexコードは以下の手順で実行されます。 1.開発者がApexコードを作成する 2.開発者が作成したApexコードをプラットフォームに保存する 3.エンドユーザがユーザーインターフェースからApexコードを呼び出す

クラスとオブジェクトとは?

クラスとはオブジェクトを作成するためのテンプレートのことを指し、オブジェクトとはクラスのインスタンスのことを指します。 クラスは全体の操作と1つの操作に対するすべての操作を指しています。一方、オブジェクトはクラス内の特定の操作を指しています。 Apexのクラスには、最上位クラス(外部クラス)と内部クラスがあります。以下の例のように、最上位クラス(外部クラス)と内部クラスを定義できます。
public class myOuterClass {
   // Additional myOuterClass code here
   class myInnerClass {
     // myInnerClass code here
   }
}
(出典:https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_defining.htm)

共有ルールとは?

共有ルールとは、公開グループ、ロール、テリトリー内のユーザへのアクセス権を指定するルールです。 共有ルールをクラスに適用することで、レコードを参照できるユーザと参照できないユーザを指定する等の処理を実行できます。

小括-with sharingの概要

前提知識を含めた、以上の説明で、with sharingの概要を理解できましたでしょうか。 冒頭で述べたように、クラスへの共有ルールの適用方法を指定する際にwith sharingキーワードは使用されます。

with sharingに関連するキーワードの使い方

ここでは、クラスへの共有ルールの適用方法を指定するキーワードの使い方をご紹介します。 with sharingに関連するキーワードはwith sharing、without sharing、inherited sharingの3つです。以下では、これら3つの詳細を順に見ていきます。

with sharing

with sharingでは、現在のユーザの共有ルールをクラスに適用するよう指定できます。 Salesforceで利用されるApexコードは、初期状態ではシステムコンテキストで実行されるため、現在のユーザの共有ルールをクラスに適用するためには、with sharingキーワードを明示的に指定する必要があります。

with sharingの例

with sharingは、クラスの宣言時に以下の例のように使用できます。 実行例
public with sharing class sharingClass {

// Code here

}
(出典:https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm)
上記の例を詳しく見ていきましょう。 まず、アクセス修飾子はそのメソッドや変数がどのクラスで使用できるかを指定するものですが、publicはすべてのクラスでの使用を許可します。 そして、Code hereに記述されるコードにsharingClassというクラスを宣言しています。 ここで、with sharingは、Code hereに記述されるコードに現在のユーザの共有ルールを適用することを指定しています。

without sharing

反対に、without sharingは現在のユーザの共有ルールをクラスに適用しないように指定できます。 without sharingは主に、with sharingを使用することにより、宣言された別のクラスから呼び出されたコードに現在のユーザの共有ルールを適用しないように指定するために使用されます。

without sharingの例

without sharingは以下の例のように実行できます。

public without sharing class noSharing {

// Code here

}
(出典:https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm)
上記の例を詳しく見ていきましょう。with sharingの項での例と同じようにアクセス修飾子として、publicが指定されているため、Code hereに記述されるコードは、すべてのクラスで使用できるように指定されています。 また、Code hereに記述されるコードにnoSharingというクラスを宣言して、without sharingは現在のユーザの共有ルールを適用しないように指定しています。

inherited sharing

with sharingもwithout sharingも宣言しない場合は、inherited sharingを宣言できます。 Apexのクラスでは、with sharingもwithout sharingも両方宣言しない場合には、デフォルトでwithout sharingとして実行されます。しかし、これが意図しない共有宣言の省略、つまり、宣言忘れだった場合はセキュリティ上の欠陥となりえます。 そこで、with sharingもwihtout sharingも宣言しない場合は、inherited sharingを宣言することが必要です。 この宣言によって、デフォルトでwith sharingとして実行され、明示的にwithout sharingが宣言されているコンテキストから呼び出された場合のみwithout sharingとして実行されます。

inherited sharingの例

inherited sharingは以下の例のように実行できます。

public inherited sharing class InheritedSharingClass{
  // Code here
    }
}
上記の例では、with sharingやwithout sharingの例と同じように、Code hereに記述されるコードにInheritedSharingClassというクラスを宣言し、inherited sharingを宣言しています。

Apex開発では欠かせないwith sharing

今回は、Salesforceでのwith sharingについてご紹介しました。 Salesforceで用いられるApexにおいて、今回ご紹介したwith sharingはセキュリティ上の観点からも、非常に重要です。with sharingを使いこなして強固なシステムを構築していきましょう。]]>

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニアAWSパートナー/Salesforce認定コンサルティングパートナー 認定企業
ITエンジニア派遣サービス事業を行っています。AWSやSalesforceなど専門領域に特化したITエンジニアが4,715名在籍し、常時100名以上のITエンジニアの即日派遣が可能です。

・2021年:AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
・2022年3月:人材サービス型 AWSパートナー認定
・AWS認定資格保有者数1,154名(2024年6月現在)
・Salesforce認定コンサルティングパートナー
・Salesforce認定資格者276名在籍(2024年5月現在)
・LPIC+CCNA 認定資格者:472 名(2024年6月時点)
ITエンジニアの派遣を利用したい企業様へ
ITエンジニアを派遣で採用したい企業様へ
  • 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
  • すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!

当社のITエンジニア派遣サービスは

  • 派遣スピードが速い!(最短即日)
  • 4,500名のエンジニアから貴社にマッチした人材を派遣
  • 正社員雇用も可能

こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。

無料相談のお申し込みはこちら
IT・技術関連の記事一覧へ

カテゴリから記事を探す

すべての記事一覧へ