SaaS (Software as a Service) の提供

学習の目的

この単元を完了すると、次のことができるようになります。

  • SaaS によってお客様がソフトウェア更新に関して抱く期待がどう変化したかを説明する。
  • 単一バージョンの製品をリリースおよびメンテナンスすることの利点を説明する。
  • 製品の更新を準備する際にできることをいくつか挙げる。

プラットフォームの約束

Salesforce のお客様は、環境が快適であることを認識しています。サーバのメンテナンスやオペレーティングシステムの管理は必要ありません。リレーショナルデータベースを設計、実行、最適化する方法を知らなくても大丈夫です。自分のデータをバックアップする必要さえないのです。

1 年に 3 回メジャーソフトウェアリリースがあり、新機能が導入され、パフォーマンスが向上します。リリースノートやトレーニング資料 (この素晴らしい Trailhead モジュールもその 1 つです) が豊富に用意されています。AppExchange は、Salesforce とシームレスに連動する製品が揃うマーケットプレイスです。ビジネスに必要なものすべてをすぐに入手して利用できます。

大きな期待

いかがですか? エンタープライズソフトウェアが面倒なものとは限りません。実際はすぐに「使える」のです。これが SaaS (Software as a Service) の約束です。Salesforce は過去数年間にわたり、50 回以上のリリースを成功させ、お客様へのこの約束を守り続けてきました。Salesforce Platform のメジャーアップグレードでさえ、通常は意識することもなく順調に行われます。

お客様に SaaS の約束を示してきた多くの Salesforce リリースのロゴ。お客様は、このプラットフォーム上に構築された製品に大きな期待を抱いています。成功できそうな予感がしますね! では、製品を更新するとき、どうすれば SaaS の約束を守りながらお客様に提供できるでしょうか?

更新戦略の選択

更新にはさまざまな形式があります。パッチは最小形式の更新です。バグを修正し、製品に軽微な調整を加えます。アップグレードは、より大きな変更を加える更新です。パッチとアップグレードについては次の単元で説明します。

製品を更新するとき、お客様が新バージョンを入手する方法を選択する必要があります。お客様が新バージョンを入手するには、次の 2 つの方法があります。

  • 手動インストール — お客様が新バージョンのインストール時期を決め、提供された URL を使用してインストールします。
  • 自動インストール — 更新をお客様に転送して、お客様の製品バージョンが常に最新で、全員が常に同じバージョンを使用するようにします。これは転送アップグレードと呼ばれます。

今、なぜセルフサービスオプションが提供されるのか疑問に感じている方もいるでしょう。この方法は、Salesforce 自体のリリースでは使用しません。また、「シームレス」でもありません。なぜ Salesforce のやり方に従い、全員が足並みを揃えて更新しないのでしょうか?

これには理由があります。Salesforce には長年にわたり正常で安定したアップグレードの実績があります。Salesforce は適切にリリースを行い、その過程で問題が発生してもすばやく対応するとお客様から信頼されています。一方で、こうしたお客様でも、AppExchange パートナーからの自動更新を安心して受け入れることには、まだ抵抗を覚える場合があります。

次は、転送アップグレードについて良い評判が広まるように、その利点について説明しましょう。

転送アップグレードでシンプルに

Salesforce では、可能な場合は常に転送アップグレードを使用して製品の新バージョンを配布し、セルフサービス更新は、お客様が強く要望する場合にのみ使用することをお勧めします。

転送アップグレードにより、常にすべてのお客様が同じバージョンのアプリケーションを使用できます。これは、パートナーとお客様のどちらにも良いことです。理由別の方法、たとえば複数の有効なバージョンのアプリケーションをサポートすることを考えみてください。複数のバージョンをメンテナンスする場合、何かと複雑になります。

  • サポートチームは、お客様の問題に適切に対応できるように、各バージョンの機能と修正プログラムを追跡しなければなりません。
  • 複数バージョンのドキュメントとトレーニング資料のメンテナンスが必要です。
  • バグを修正するとき、複数のバージョンに遡って移植が必要になる場合があります。

これに対し、転送アップグレードを使用してお客様を最新の状態に保つと、こうした余分な作業をすべて回避できます。

約束を守る

言うまでもありませんが、言いましょう。アプリケーションやお客様組織を中断させてはいけません。もちろん、お客様の日常を損なわずに製品を更新するにはコツが必要です。Salesforce では、パートナーが正しい方向に進めるように、いくつかの便利なツールを提供し、制限を設けています。

プロセスの自動化

新しい製品バージョンをインストールするとき、更新のためにパートナーがお客様の組織で作業をする必要が生じることがあります。インストール後に組織でデータの検証やクリーンアップの実行が必要になる場合などです。

アプリケーションにその作業を行うためのボタンを追加することもできますが、お客様がボタンを押さなければ実行されません。お客様を巻き込むのではなく、インストール中にその作業を自動的に行うことをお勧めします。パッケージを設定するときに、そのためのスクリプトを追加します。そのスクリプトでデータと特定のメタデータを更新できます。

たとえば、項目に保存された値を計算する Apex コードにバグが見つかったとします。更新の一部として、そのバグを修正し、スクリプトを実行して修正前に生成された不正な値もすべて修正できます。

既存の動作の保持

管理パッケージの処理を開始したら、パッケージに追加した特定のコンポーネントは削除できません (コンポーネントのリストについては、『ISVforce ガイド』を参照)。カスタムオブジェクトまたはカスタム項目をパッケージに追加し、そのパッケージを AppExchange にアップロードしたら、今のところ変更はできません。

もどかしいですね。一方、コンポーネントを削除できないようにすることで、Salesforce はパートナーがお客様への SaaS の約束を守れるようにしています。お客様は、ある程度の安定性を期待しています。つまり、突然の変更を気にすることなく、ソリューションのカスタマイズやソリューション上への構築ができると認識しています。

Salesforce でコンポーネントの削除が禁止されていなかったらどうでしょうか? アプリケーションの更新の一部として、管理パッケージからカスタムオブジェクトがパートナーによって削除されます。お客様がそのカスタムオブジェクトをレポートで使用していたり、新しい項目で拡張していたりしたら、予期しない変更に直面することになります。更新を受信したら、そのカスタムオブジェクトが消え、業務が中断します。大混乱です!

とはいえ、物事、特にソフトウェアで変更はよくあることです。機能の削除やアプリケーションの再設計などで、コンポーネントを削除した方がよい場合もあります。心配は無用です。目標への道を阻むつもりはありません。カスタムオブジェクトの削除も含め、どのような変更が必要な場合でも方法はあります。それについては後の単元で説明します。

少しの準備で大きな効果

前述のとおり、Salesforce には、安定したリリースと更新の素晴らしい実績があります。その秘訣は何でしょうか? 細心のテストです。驚くようなことではありませんが、確かに効果があります。テストするほど、安定性が高まります。

パートナーが素晴らしい新機能にだけ集中して、更新のテスト時に細かいことを軽く扱うことがあります。不完全なテスト手順の例を挙げましょう。アップグレードされたアプリケーションを、まったく新規に作成した空のテスト組織にインストールします。そこで機能したら、準備完了ですか? すべてのお客様が真新しい組織で開始するなら、答えは「イエス」です。

ただし、実際のお客様のほとんどは、どの時点でも業務を行っています。アップグレードは、すでに多くのものが含まれている組織にインストールされます。そのため、アップグレードは初期状態の組織だけでなく、込み入った現実に近い組織でテストします。

更新をシームレスでサイレントにリリース

業務遂行中のお客様が、ソフトウェアの自動更新時に [一時停止] を押すことはあり得ません。それは SaaS の約束には含まれません。一切失敗しないと保証することは不可能ですが、更新がお客様に与える影響について考えることで混乱を最小化することはできます。

  • 更新の影響について検討します。お客様の製品使用方法は変わりますか?
  • 変更をまず内部でテストします。新しい空の組織だけでなく、データが入力されたさまざまなテスト組織を使用します。
  • 段階的なリリースを検討します。まずパワーユーザに更新を提供し、その後で他の全ユーザにリリースします。Salesforce ではこのプロセスを使用しており、実際のお客様への影響を把握するのに役立っています。

次は、さまざまな更新の提供方法を見てみましょう。

リソース