とあるStartupに勤めるエンジニアの技術ブログ

Salesforce、テスト関係の技術ブログなどを書く予定

Japan Dreamin’ 2020 登壇してきた!

遅くなりましたが、2020年1月25日(土)に開催された Japan Dreamin' 2020 に参加・登壇してきました。 

今回の発表では、AppExchange プロダクトを継続して開発していく中で注意すべき点について話しました。こちらから資料を見ることができますので、よろしければご覧ください。

www.slideshare.net

Japan Dreamin' 2020

Japan Dreamin’2020 での発表資料を参照できるものもあります。さまざまなテーマで発表されており、参考になる発表も数多くあると思いますので、ご自身の興味のあるテーマを探してみていただければと思います。

www.japandreamin.com

はじめに

まず、今回の発表はAppExchangeアプリケーション、特に継続的にバージョンアップを重ねて多くの企業にサービス提供していくケースを前提としています。 このようなプロダクト開発では、ひとつの企業を対象としたシステム開発とは下記のような点で異なります。

  • 仕様や構造を変更する場合には多くの企業に対してマイグレーションが必要となる
  • 多くの企業のさまざまな要求を満たすために漸進的な機能追加が必要となる

AppExchangeアプリケーションはこのような特徴に合わせてさまざまな制約を設け、継続的にアップグレードしていけることを担保しています。この制約についてはISVガイドをよく読めば書いてあることですが、実際に運用してみないとその制約がどういった事態を引き起こすか想像できないことも多くあります。

普段、システム開発に慣れ親しんでいる開発者がAppExchangeアプリケーションを開発しようとした場合には、このギャップに気づくのが遅れ設計を誤り、後戻りできない状況になってしまうことがあります。

この発表では、AppExchangeアプリケーションにおける制約を明らかにして、その制約によって引き起こされる事態を共有することで、できるだけ後で困らない設計ができるようにすることを狙いとしていました。

AppExchangeアプリケーション開発で大切なこと

f:id:a-kura:20200505174632p:plain

AppExchangeアプリケーションは通常のシステム開発とは異なる考え方に基づいて開発を進めることとなります。その際に最も大切なことは

「アップグレード可能であること」

です。

AppExchangeアプリケーションでは、一つのアプリケーションを多くのユーザーに提供し、継続的に機能追加していきます。
そのためには、最新バージョンを継続的にリリースし、ユーザーには最新バージョンを利用してもらえるようにアップグレードしてもらう必要があります。 

開発スタイル

Salesforce開発において検討すべきこととして、宣言的開発とコード開発があります。

宣言型開発は画面から操作するだけで簡単に画面や処理を開発できます。しかし、宣言型開発で主に使われるページレイアウトはアップグレードできません。そのため、AppExchangeアプリケーション開発においては、コード開発が中心となります。

AppExchangeアプリケーション開発でもソリューションテンプレートとしてアプリケーションを提供し、その後のカスタマイズやアップグレードは個別の組織で開発していくような場合は宣言的開発でも問題ないと考えます。利点としては顧客に合ったシステムを提供できますが、反面カスタマイズやアップグレードの手間がかかるため、自社リソースの範囲内の限られたユーザーにアプリケーションを提供するようなビジネスモデルになります。 

f:id:a-kura:20200505174319p:plain

アップグレード可能なコンポーネント

管理パッケージでどのコンポーネントがアップグレードできるかISVガイドに記載されています。アップグレード可能かどうか以外にも削除できるか、変更できるか、などについても記載しています。

AppExchangeアプリケーションを開発することになったら、ぜひ熟読してください。AppExchangeアプリケーションを開発し、販売・運用するために必要な情報が数多く記載されています。

ページレイアウトは使うべきか?

ページレイアウトはアップグレードできないコンポーネントとなるため、極力利用すべきではないと考えています。

ページレイアウトをアップグレードしようとすると、顧客が変更している可能性のあるページレイアウトをメタデータAPIを利用して、半ば強引に上書きするか、顧客に手作業で変更してもらう必要があります。作業ミスの可能性を考えると顧客数を増やそうとするとメタデータAPIで上書きする方法を取らざるを得なくなってきますが、それなりに難易度の高い実装となってしまいます。

Visualforceページであれば、初期開発コストはかかってしまいますが、アップグレード可能であり開発継続性は優れています。

選択リストをどう実装するか?

ここで言う選択リストは、画面上からプルダウンで選択できる入力項目のことを指します。このUIを実装するにあたって、選択リスト型を利用する、カスタムメタデータ型を利用する、システム側でマスター管理する、といった方法があります。

選択リスト型はアップグレード可能ではなく、項目値を追加/変更/削除できません。通常の開発であれば多く使われる選択リスト型はAppExchangeアプリケーション開発では良くない選択肢になってしまいます。

AppExchangeアプリケーション開発では、カスタムメタデータ型にするか、マスター管理にするか、は項目の用途に応じて選択します。ポイントとしては、ユーザーが項目を変更する要件があるかどうか、になります。アプリケーション側で制御する項目であればカスタムメタデータ型を利用し、ユーザーがカスタマイズする項目であればマスター管理を利用することになります。

f:id:a-kura:20200505174417p:plain

レポートをどう提供するか?

Salesforce Platformにおいてレポートやダッシュボードは非常に強力な機能です。しかし、レポートやダッシュボードはアップグレードできません。そのため、管理パッケージに安易に含めてしまうのは考えものです。

解決するためのアイデアとして、レポートを提供する拡張パッケージを本体とは別に作成する方法です。別パッケージとして提供すれば、古いレポートはアンインストールし、新しいレポートをインストールして利用する、といった運用ができるようになります。

まとめ

f:id:a-kura:20200505174502p:plain

AppExchangeアプリケーションを継続的に開発し続けてきた経験から得たノウハウを公開しました。
大事なポイントをまとめると、下記の2点です。

  • AppExchangeアプリケーションを継続的に開発するためには「アップグレード可能性」が重要となる
  • AppExchangeアプリケーション開発をはじめる開発者はISVガイドを熟読すべし

 

ここでまとめた内容は、基本的にはISVガイドを熟読し、運用を想像すると分かります。
しかし、想像しながら読み込むことはかなり難しい作業になりますので、今回の事例が発想するための助けになれば幸いです。

 

Enjoy Dreamin'!