【Salesforce】第一世代パッケージ 未管理・管理パッケージの違い・開発における注意事項

こんにちは、クラウドフロントTのかわしんです。
最近当社ではSalesforceの第一世代パッケージを利用したプロジェクトがあり、ナレッジが溜まってきましたので今回は、第一世代パッケージ開発についてナレッジを共有したいと思います。


パッケージを利用していると、未管理パッケージ・管理パッケージ、
ベータ版リリース版とややこしいですが当記事を参考にして頂ければ幸いです。


パッケージ化とは

パッケージ化とは、Developer環境で開発したAPEXやLWCなどの一式をひとまとめにパッケージ化して別環境に配布することができる仕組みのことです。

またパッケージ開発には、第一世代管理パッケージ(1GP)と第二世代管理パッケージ(2GP)があります。2GP は、1GP のバージョン 2.0 ではなく、CLIやメタデータを利用して管理する別物の方法です。今後のアプリケーション開発では 2GP が主流になるとされています。

第一世代の場合は、一般的な開発と同様で特に特別なSFDXコマンドやCLIは不要で、変更セットと同じイメージでGUI上でパッケージに含めたいリソースを選択することができます。本記事では第一世代のみに関して記載しています。

■第一世代に関する開発者ガイドはこちら (日本語版はなさそう。。)
developer.salesforce.com

未管理パッケージと管理パッケージの違いとは

未管理パッケージ

・インストール先でパッケージ内に含まれるリソース(APEX・LWC等)の確認・編集が可能

・パッケージのアップグレード不可
(再インストールするには、アンインストール後、新バージョンをインストールする必要がある)

管理パッケージ

・インストール先でパッケージ内に含まれるリソースの確認・編集が不可

・Developer Edition組織で作成する必要あり

・パッケージのアップグレードはベータ版だと不可(未管理版と同様)、リリース版だと可能


また、一度管理パッケージとしてパッケージ化した場合、未管理パッケージに戻すことはできません
パッケージの名称を別の名前として再度未管理パッケージ化することはできますが、面倒なのでお気をつけください。

ベータ版とリリース版の違いとは

前提として、未管理パッケージにはベータ・リリースの概念はありません。管理パッケージのみにおける概念です。

ベータ版

・パッケージのアップグレード不可
(再インストールするには、アンインストールする必要がある)
・Developer Edition 組織と Sandbox にのみインストール可能

リリース版

・パッケージのアップグレード可能
・本番組織にインストール可能・AppExchangeで販売可能
(AppExchangeに載せなくてもURLを共有すればインストール可能)
・ベータ版へ戻す場合はサポートに依頼する必要がある



表にまとめると以下のようになります。 ※多少誤りがあるかもしれません。その際は指摘ください


以下にパッケージそれぞれの種類の説明・各版をインストールするモデルケースについて、公式が記載しているので併せてご確認ください。

・パッケージそれぞれの種類の説明
developer.salesforce.com

・各版をインストールするモデルケース
developer.salesforce.com

パッケージに含めることができる項目

以下ページにパッケージに含めることができるコンポーネントの記載があります。
「承認プロセス」や「キュー」あたりは含められないようです。
変更セットでのリリース時も同じですが、バイネームでユーザを指定する設定などはだめなようです


・パッケージに含めることができるコンポーネント
developer.salesforce.com


・管理パッケージに自動的に追加されるコンポーネント
developer.salesforce.com

注意事項

パッケージ開発ではパッケージ開発特有の普段遭遇しないエラーや不具合が発生します。
その中でぜひ注意頂きたい事項を記載します。

名前空間

当社でもハマった点なのですが、APEXやauraでパッケージ内のオブジェクトをハードコーディングしている場合はソースが適切に動きません。
こちらの記事に詳しく記載がありますが、名前空間プレフィックスを有効化した状態で他組織にAPEXをインストールすると、
インストール先の組織では パッケージ名前空間名.オブジェクト名 という形でしか認識されませんので注意してください。
静的リソースなども同様です。
(しかもインストール時にエラーも出ないので気づくのに時間がかかります。。)

SFDC:名前空間プレフィックスを有効化したときに注意すること - tyoshikawa1106のブログ


・名前空間の登録
developer.salesforce.com

標準オブジェクトに対する権限セットやプロファイルができない

以下ページにも記載がありますが、標準オブジェクトに対してはパッケージ内に権限セットやプロファイルを含めても
インストール先で設定した権限は適用されません。
基本的に、パッケージに含めるユーザへの権限設定はパッケージ内のオブジェクトだけ可能 という整理がよさそうです

developer.salesforce.com


まとめ

これ以外にも記載したい内容はありますが一旦ここまでとしたいと思います。
パッケージ開発については、Salesforce Communityでも多く質問があるようで独特のクセがあるので
注意事項などはまた追記したいと思います!!