ブログ

【Salesforce】管理パッケージを徹底解説。第一世代と第二世代の違い・選び方・活用法

この記事をSNSでシェア!

はじめに

Salesforceプラットフォームには、アプリケーションやコンポーネントを「管理パッケージ(Managed Package)」としてまとめ、他の組織へ配布できる仕組みがあります。管理パッケージには主に「第一世代管理パッケージ(1GP)」と「第二世代管理パッケージ(2GP)」の2種類があり、それぞれに特徴と利点があります。

本記事では、これからSalesforceでアプリケーションやコンポーネントの開発をしていく方へ向けて、1GPと2GPの違いについて特に重要な点を比較し、開発者としてどちらを選択すべきかを解説します。

管理パッケージとは?

管理パッケージとは、Salesforceで開発したアプリケーションやコンポーネントを、他のSalesforce組織にインストールできるようにするためのパッケージです。これにより、アプリケーションの配布やアップデートが容易になり、複数の顧客に対して一貫したソリューションを提供できます。

第一世代管理パッケージ(1GP)の特徴

1GPはSalesforceで初めて登場した管理パッケージの形式で、以下のような特徴があります。

開発環境
第一世代管理パッケージ(1GP)は、特定のSalesforce組織(主にサンドボックス)内で作成・管理されます。すべてのコードやリソースはその組織に閉じており、配布前に必ずパッケージとしてまとめる必要があります。開発チームメンバー全員が同一の組織内で開発を行うという特性上、変更の競合が発生しやすいです。

メタデータ管理
メタデータの種類や容量に制限があり、大規模なアプリケーションには不向きです。例えば、クラスやトリガーのバージョン管理が難しく、変更を加える際にはパッケージ全体を再パッケージ化する必要があります。

パッケージ管理
パッケージの変更や更新には、すべてのメタデータを含めた再構築が必要です。例えば、小さな修正(例:Apexクラス1つ修正)でも、パッケージ全体の新しいバージョンを作成しなければなりません。

インストールの柔軟性
すべての機能が1つのパッケージに詰め込まれており、インストール時にその中身を選ぶことはできません。一度配布されたコンポーネントは削除できない制約もあり、運用における柔軟性は低めです。

第二世代管理パッケージ(2GP)の特徴

2GPは、Salesforce DX*を活用した新しいパッケージング方式で、以下のような特徴があります。

*Salesforce公式ヘルプ:Salesforce Developer Experience による作業方法の変化

開発環境
第二世代管理パッケージ(2GP)は「Dev Hub」と呼ばれる新しい組織で開発・管理されます。開発者は複数のサンドボックスや開発組織で作業し、その成果をまとめてパッケージとして公開できます。これにより、開発者はより柔軟にパッケージを作成できます。

メタデータ管理
メタデータ管理が大幅に改善されており、クラスやトリガーなどのコードのバージョン管理が容易です。また、メタデータの変更がパッケージ全体に影響を与えることなく、部分的に行えます。

パッケージ管理
Gitなどで管理されたソースコードの差分をもとに、変更のあった部分だけを更新対象にできます。不要なコンポーネントを含めずに、本当に必要な変更だけをリリースできるのが強みです。

インストールの柔軟性
機能ごとにパッケージを分割できるため、顧客や環境に応じて必要なパーツだけを選んでインストールできる柔軟さがあります。アップデートや依存関係の管理もCLIベースで行えるため、より柔軟な運用が可能です。

特徴をまとめると

特徴第一世代管理パッケージ(1GP)第二世代管理パッケージ(2GP)
開発環境単一の組織内で開発複数の組織で開発可能(Dev Hub)
メタデータ管理制限が多く、変更には差異パッケージ化が必要バージョン管理が容易で部分的な更新が可能
パッケージ管理パッケージ全体を更新部分的な更新や柔軟な管理が可能
インストールの柔軟性インストール後の変更が難しいインストール時にコンポーネントを選択

どちらを選択すべきか?

総評として、以下のまとめになります。
1GP:1GPで開発した既存パッケージでは、2GPへの移行コストを考慮し1GPを継続利用することが最適の場合がある。
2GP:新規でパッケージ開発を行う場合は2GPが推奨。
新規にパッケージ開発を行う場合は、基本的に第二世代管理パッケージ(2GP)の利用がおすすめです。既存の1GPパッケージを継続するケースを除けば、2GPの方が拡張性・保守性ともに優れており、今後のSalesforce開発に適しています。本記事で触れた技術的なメリット以外にも、今後2GPに関する技術情報が充足していくことも予想され、開発者にとっては大きな利点になるのではないでしょうか。

1GPと2GPのメリットデメリット

利用場面1GP2GP
大規模で複雑なアプリケーションやパッケージ開発をする×:構成が破綻しやすくスケーラビリティに欠ける〇:モジュール化や依存関係管理に優れる
既存の1GPパッケージを継続利用・保守する〇:そのまま保守・運用が可能×:移行が必要、再構成・再審査が必要な場合あり
AppExchange公開用で、既に1GPでセキュリティレビュー済みの実績がある〇:再審査不要でスムーズに継続可×:新たにセキュリティレビューが必要な可能性
複数の開発チーム・拠点で機能を分割して開発する×:分割開発に不向き、共同作業が困難〇:ソース駆動開発・CI/CD対応で分業に強い
将来的に機能を追加・変更していく構成がある×:変更・拡張に制約が多く、長期運用に不向き〇:柔軟な拡張・バージョン管理が可能

6. おわりに

「第一世代管理パッケージ(1GP)」と「第二世代管理パッケージ(2GP)」は、名称こそ似ていますが開発プロセスは大きく異なります。本記事で比較したように、2GPはソース管理やCI/CDに対応しており、複数チームでの開発や将来的な拡張に強い点が特長です。Salesforce開発に携わるエンジニアにとって、理解しておくべき重要な知識と言えるでしょう。
単純に比較できるようなものではありませんが、私なりに主要部分をピックアップして比較しました。私自身、2GPでの開発経験はあるものの、1GPでの開発経験がなかったので、1GPからどういった改善点があったのか、2GPにはどのようなメリットがあるのかを改めて知ることができました。実際に2GPでの開発時には、Gitでソースコードを管理し、開発チームメンバーと機能を分担して開発を行いました。Git上で管理できるためバージョン管理やレビューといったプロセスが非常に行いやすかったです。しかし、単純なSalesforce上の開発に比べて、管理パッケージの開発は開発環境や開発プロセスが複雑である上に、1GPや2GPといった2つの世代が存在することでよりとっつきにくいと感じます。本記事でご紹介した内容が管理パッケージ開発の一助になれば幸いです。

投稿者プロフィール

竹内 祐輝
竹内 祐輝
主にSalesforceを使用した開発を担当しており、Salesforce歴は3年程です。

フローを使ったローコードでの実装や、Apexを使用したバックエンドの構築を担当しております。最近では、Lightning Web Componentや、第2世代管理パッケージの開発にも携わっております。

保有資格:Salesforce認定platformデベロッパー
この記事をSNSでシェア!