Salesforce の管理パッケージ開発で、変数やメソッドのアクセス修飾子 global を軽率に用いていると、バージョンアップ時に困ることになります。
この記事を読むことで global の性質と、バージョンアップ時の注意点を理解することができます。
public と global の比較
管理パッケージにおいて、public と global ではインストール先の組織から変数やメソッドを参照できるか、という点で差が出ます。
public では、管理パッケージの外部から変数やメソッドを参照することができません。

一方、global ではインストール先の組織(パッケージ外部のコードや開発者コンソールの匿名実行など)から変数やメソッドを参照することができます。

バージョンアップでの global の注意点
上記の性質は管理パッケージのバージョンアップに影響します。
global な変数やメソッドは、バージョンアップ時に削除したり、シグネチャ(メソッド名や引数、返り値の情報)を変更することができません。
これは外部参照との整合性を保つためです。例えば以下のような状況になるのを防ぎます。

したがって global な変数やメソッドはいつまでも残り続けることになります。その点を考慮して global を用いるかは慎重に検討するべきです。
また、改修する際も global な変数やメソッドは削除やシグネチャの変更ができない点に気をつけましょう。
まとめ
- public と global ではインストール先の組織から変数やメソッドを参照できるかが異なる
- global な変数やメソッドは、バージョンアップ時に削除したり、シグネチャを変更できない
コメント