JP:An Introduction to Packaging

パッケージの概要

摘要

パッケージとは、開発するアプリケーションや機能の要素であるコンポーネントをまとめたものです。パッケージは通常、コンポーネントを自社以外の企業に配布する目的で作成します。

パッケージには、未管理パッケージと管理パッケージがあります。未管理パッケージは、テンプレートのように 1 度のみ配布を行う場合に使用し、アプリケーションのコンポーネントやコードサンプルを共有する場合に最適です。インストールされるのは、コンポーネントからは独立したコピーです。一方、管理パッケージでは知的財産保護が施されているほか (未管理パッケージとは異なり、多くのコンポーネントのソースコードが非公開)、パッケージの作成者がパッケージのアップグレードを提供する手段も用意されています。管理パッケージは商用アプリケーションの配布に適しており、ライセンスの取得を要求する機能もサポートしています。

このドキュメントでは、Force.com プラットフォームでのパッケージの作成と配布の概要をご紹介します。まず、簡単なチュートリアルで未管理パッケージの作成、配布手順を示した後、パッケージ作成の基本概念を取り上げ、2 種類のパッケージの相違点について詳しく説明します。また、ディレクトリサービスとしての AppExchange の役割と、そこで利用できるテストドライブ、ライセンス管理などの機能についても解説します。


簡単なチュートリアル

サンプルパッケージを作成して配布してみることで、重要な概念の主なものをよく理解できます。このチュートリアルでは、未管理パッケージとしてパッケージを作成、配布する手順を説明します。まずシンプルな Apex クラスを作成し、これをパッケージ化して配布します。Developer Edition 環境を 2 つお持ちであれば、ここで記述する手順どおりの作業が可能です。または、この手順を実際には試さず、内容を読み進めてから (非常にシンプルなので心配ありません) 自分のパッケージをインストールする、ということでもかまいません。

このチュートリアルの目的は、以下のようなソースを持つ、シンプルな Apex クラスのパッケージを作成することです。

public class SimpleClass {

 public void foo() {
   System.debug('foo here');
 }
 
 
 static testmethod void testFoo() {
  SimpleClass a = new SimpleClass();
  a.foo();
 }
}

開発環境にログインし、[設定]、[開発]、[Apex クラス] の順にクリックして、上記のクラスを作成します。

これでパッケージを作成する準備が整いました。[設定]、[作成]、[パッケージ]、[新規] の順にクリックして作業を開始します。パッケージコンポーネントを追加するには、パッケージに名前 (ここでは「SimplePackage」としています) を付けて保存します。パッケージはコンポーネントの集合体であり、Force.com プラットフォームで使用するさまざまなコンポーネントを含めることができます。パッケージ化できるものには、Apex クラス、Visualforce ページ、トリガ、電子メールテンプレート、ドキュメント、ワークフロールールなどがあります (ページ末尾のリンクから、完全なリストを参照できます)。このチュートリアルでは Apex クラスを追加します。[パッケージコンポーネント] セクションで [追加] をクリックし、コンポーネントタイプとして [Apex クラス] を選択し、先ほど作成した SimpleClass を指定します。以上により、次のようにパッケージの内容が定義されます。

Image:pkg_1.jpg

以上で完了です。[アップロード] をクリックします。バージョン (ここでは「14」としています) を指定後、パッケージのアップロードが行われます。作成した未管理パッケージは即座にクラウド環境に置かれ、他のユーザがインストールできるようになります。次の図のような画面が表示されます。

Image:pkg_2.jpg

画面内にはインストール用のリンクが表示されています。このリンクは作成者に電子メールで送信されるので、パッケージを共有したい相手にリンクを転送できます。

では、こちらをクリックして上記のリンクにアクセスしてみてください。表示された画面で認証情報を入力すると、インストールページが表示されます。

Image:pkg_3.jpg

[Continue (次へ)] をクリックし、セキュリティ設定を確認するウィザードを進めていくと、パッケージがユーザの環境に直接インストールされます。

インストール後は、Apex クラスのリストに「SimpleClass」というクラスが追加されます。また、[設定]、[インストール済みパッケージの参照] の順にクリックすると、SimplePackage パッケージが表示され、このページでアンインストールも簡単に行うことができます。アンインストールを実行すると、関連するファイルはすべてアンインストールされます。たとえばこの例では、Apex クラス SimpleClass もあわせてアンインストールされます。そのほか、パッケージの作成者はパッケージを無効にしたり削除したりできます。この場合、パッケージをインストール済みのユーザに影響はなく、インストール用のリンクが無効となって、アクセスができなくなるだけです。


パッケージ化の概念

この後は、パッケージ、パッケージ化、AppExchange について詳しく説明していきます。パッケージは通常複数のさまざまなコンポーネント、たとえば、ユーザインターフェースコンポーネント、オブジェクトやトリガなどのデータベースコンポーネント、Apex コード、ページレイアウト、レポートなどから構成されています。これらのコンポーネントをパッケージとしてまとめることで、配布やインストールに使用できるようになります。パッケージには、未管理パッケージと管理パッケージの 2 つのタイプがあります。後続のセクションでは、これらの概念について具体的に解説します。


パッケージのコンポーネントと連動関係

次の表に、パッケージ化が可能なコンポーネントを示します。

Apex クラス Apex トリガ
カスタムアプリケーション カスタムボタンとカスタムリンク
カスタム項目の定義 カスタムホームページ
カスタムオブジェクトの定義 カスタムレポートタイプ
カスタム S コントロール カスタムタブの定義
ダッシュボード ドキュメント
電子メールアラート 電子メールテンプレート
項目自動更新 フォルダ
ホームページのコンポーネント レターヘッド
プロファイルの設定 レポート
静的リソース ToDo
Visualforce コンポーネント Visualforce ページ
ワークフローアウトバウンドメッセージ ワークフロールール

パッケージ化可能なコンポーネントをすべて網羅したリストと注意点 (たとえば、一部のコンポーネントはユーザが作成したカスタムオブジェクトでのみパッケージ化が可能であり、標準のオブジェクトではパッケージ化できない等) は、パッケージのドキュメントで参照できます。

パッケージ化では、シンプルな Apex クラスを 1 つのみ使用しているものから、数百ものコンポーネントをまとめたものまで、さまざまなパッケージを作成できます。各コンポーネントには連動関係を持つものがありますが、その場合、連動し合うコンポーネントは自動的に追加されます。たとえば、カスタムコントローラとの連動関係を持つ Visualforce ページをパッケージに追加すると、そのカスタムコントローラも自動的にパッケージに追加されます。さらに、自動的に追加されたそのカスタムコントローラのクラスに別のコンポーネントとの連動関係があれば、そちらも自動的に追加されます。このようにして、連動関係をたどってすべての関連コンポーネントが追加されます。


コードカバレッジとパッケージ

未管理パッケージ、管理パッケージのいずれにおいても、展開を行うためには、あらゆるパッケージのすべての Apex クラスとトリガについて、累積で 75% 以上のテストカバレッジを達成することが求められます。たとえば、前のセクションのチュートリアルでは、クラス内に次のメソッドが定義されていました。

static testmethod void testFoo() {
  SimpleClass a = new SimpleClass();
  a.foo();
}

testmethod キーワードはこのメソッドがテストケースの一部であることを示します。コードを見て分かるとおり、このメソッドはクラスのインスタンスを作成し、メソッドを起動します。通常は、期待される応答が確実に生成されるよう、アサーションを追加します。Apex とコードカバレッジの詳細については、 Apex の概要 を参照してください。


未管理パッケージ

未管理パッケージは、多くの場合、コンポーネントと共にソースコードを配布することを目的に作成されます。前のチュートリアルで作成したパッケージは、未管理パッケージの一例です。未管理パッケージをインストールすると、そのパッケージに含まれている Apex クラスを実行できるだけでなく、Apex クラスのソースコードも参照できます。

未管理パッケージは、「コンポーネントを 1 つにまとめて他のユーザに渡すためにある」と考えることが可能です。作成者は、ユーザがインストールしたパッケージをコントロールすることはできません。未管理パッケージでは、パッケージのコピーが配布されます。他のユーザがインストール用リンクをクリックしてパッケージをインストールすると、パッケージの内容がインストール先にコピーされ、それ以降パッケージの作成者がこのコピーに関与することはありません。作成者がパッケージを削除したり変更したりしても、ユーザがインストールしたバージョンに影響が及ぶことはなく、また、ユーザはインストールしたバージョンのパッケージやコンポーネントを必要に応じて変更したり削除したりできます。

未管理パッケージは、テンプレートアプリケーションや無料コンポーネントの配布手段として最適です。ユーザは、インストールしたパッケージのすべての構成要素を参照できます。まるで、パッケージのインストーラ自体がこれらのコンポーネントの作成者であるかのようです。

未管理パッケージでは名前空間は使用しません。組織で名前空間を使用している場合でも、未管理パッケージとしてアップロードすると、すべてのコンポーネントから名前空間が削除されます。

パッケージのすぐれた点は、管理であっても未管理であっても、アンインストールが可能であるところです。パッケージをアンインストールすると、パッケージの一部としてインストールされたコンポーネントはすべて削除されます。


管理パッケージ

管理パッケージでは、あらゆる種類の機能、動作がサポートされます。次に例を挙げます。

  • インストール用リンクをクリックしてパッケージをインストールしたユーザは、Apex コードをはじめとする、管理パッケージの一部としてインストールされた多数のコンポーネントのソースコードにアクセスすることはできません。これにより、パッケージ所有者の知的財産権が保護されます。
  • シームレスなアップグレードを実現するため、インストールしたアプリケーションにユーザが変更を加えることはできないようになっています。
  • パッケージの所有者はパッケージのアップグレードを提供できます。パッケージの利用者は任意で最新のバージョンにアップグレードできます。
  • ライセンス管理アプリケーション (LMA: License Management Application) を使ってインストール状況を追跡できます。たとえば、パッケージの所有者は、アプリケーションのインストール、アップグレードを実行しているユーザを把握できます。

こうした機能は未管理パッケージでは使用できません。管理パッケージは、アップグレードや追跡をサポートしますが、未管理パッケージと異なり、ソースは公開されません。このため、有償での配布に適しています。別の言い方をすれば、管理パッケージは、「コピー」でなく「参照」としてインストールされます。つまり、インストールではパッケージへの参照がインストールされ、上記に示したようなさまざまな機能、動作は Force.com プラットフォームのマルチテナントアーキテクチャが担います。


AppExchange

パッケージ化したアプリケーションのユーザは Force.com プラットフォームのユーザとなります。このような場合、Force.com プラットフォームで開発したアプリケーションを一元的に管理するディレクトリがあれば、セールスフォース・ドットコムコミュニティのメンバーがあらゆる Force.com アプリケーションを簡単に共有、検索、インストールできるようになり便利です。それを実現するのが AppExchange です。AppExchange はオンデマンド型アプリケーションのディレクトリサービスであり、Force.com プラットフォームで稼働するアプリケーションやコンポーネントを検索したり、インストールしたり、共有したりできます。

AppExchange では、さらに強力なパッケージ化を可能にする機能が多数用意されています。

  • パッケージを簡単に見つけられるディレクトリ機能、検索機能
  • ユーザが、インストールしたパッケージの評価やレビューを行えるランキングシステム
  • アプリケーションに興味を持ったユーザがインストールを行う前に試用できるテストドライブ機能
  • ライセンス管理アプリケーションのサポート。これにより、アプリケーションを利用している企業、企業内でアプリケーションを使用しているユーザなど把握して管理できます

AppExchange には、管理パッケージと未管理パッケージのいずれも公開できますが、有償で配布するアプリケーションは管理パッケージとしてパッケージ化することをお勧めします。


メタデータ API

Force.com プラットフォームでは、高機能で強力なメタデータモデルとメタデータ API を提供しています。この API には、アプリケーションの構成設定やソースにプログラム的にアクセスできる一連の Web サービスメソッドが含まれます。たとえば、メタデータ API を使用すると、ユーザは自身の組織にリモートアクセスして、アプリケーションを構成するソースコードや設定をすべてダウンロードできます。また、この API を使用してメタデータコンポーネントを制御することも可能です。

メタデータ API は主に変更内容の移行に使用します。たとえば、メタデータ API とその関連ツールを使用して、変更内容をサンドボックス組織などのテスト環境から運用環境に移行できます。またこの API は DaaS (Development as a Service: サービスとしての開発) でも利用されます。たとえば、Force.com IDE は、メタデータ API によって使いやすい統合開発環境を実現した IDE です。

なお、メタデータ API はユーザによるソースコンポーネントの操作と移行を可能にする機能ですが、このような展開方法は、このドキュメントで取り上げているパッケージ化とはまったく異なります。


管理パッケージの詳細

管理パッケージの作成方法は未管理パッケージとほぼ同じで、[設定]、[作成]、[パッケージ] の順にクリックして表示された画面で行いますが、名前空間を設定する必要がある点が異なります。

管理パッケージはどのような組織にでもインストールできるため、他のユーザが作成したコードと並存可能であることが求められます。このため、Force.com プラットフォームでは、ユーザに対して名前空間プレフィックスの作成を要求し、ユーザが作成したパッケージ、内容を他のユーザが作成したパッケージ、内容と区別します。プレフィックスはすべての組織にわたって一意であり、かつ一度作成したら変更はできません。また、作成したプレフィックスは、すべてのコンポーネントの先頭に自動的に追加されます。

例として、名前空間「XXX」を持つ Visualforce ページ「MyPage」とコントローラ「MyController」を含んだ管理パッケージをインストールするケースを考えてみましょう。この Visualforce ページの URL は次のようになります。

https://XXX.na6.visual.force.com/apex/MyPage

インストールの結果、コントローラ (Apex クラス) に名前空間プレフィックスが追加されるため、このクラスは Visualforce ページからは「XXX.MyController」として参照されます。この名前空間は、管理パッケージと共にインストールされる全コンポーネントに対して、自動的に追加されます。


管理パッケージにおけるソースコード参照の制限

管理パッケージをインストールした場合、参照できるソースコードは制限されます。たとえば、パッケージで Apex クラスをインストールしても、その Apex クラスのソースコードを閲覧することはできません。次に、注意すべき点を挙げます。

  • メソッドや変数が公開されているグローバルクラスの Apex クラスを除き、Apex クラスのソースコードは完全に非公開となります。
  • Visualforce ページのソースは参照可能です。ただし、編集することはできません。
  • Visualforce コンポーネントのソースは非公開となります。
  • トリガのソースコードも非公開となります。

管理パッケージでは、このような制限により強力な IP 保護を実現しています。


AppExchange の詳細

管理パッケージと未管理パッケージは AppExchange で公開できます。AppExchange には、パッケージ化と配布に関連する以下のような機能のフレームワークが用意されています。


リスティング

アプリケーションの「リスティング」とは、AppExchange に掲載するマーケティング素材であり、AppExchange における「店先」とも言えるでしょう。ユーザは、データシートやホワイトペーパー、デモなどのコンテンツを参照したり、テストドライブを実行したりして、アプリケーションに関する情報を収集します。アプリケーションをインストールできる [インストール] ボタンや [ダウンロード] ボタンを用意したり、さらに詳細な情報を提供する [詳細] ボタンなどを用意することもできます。

リスティングを作成するには、ます AppExchange で公開者プロファイルを作成する必要があります。このプロファイルにアプリケーションを関連付け、ドキュメント (必須) やテストドライブ (任意) を作成してから、アプリケーションを登録して公開します。具体的な手順については、 AppExchangeサイトへのリスティング を参照してください。


テストドライブ

テストドライブでは、制御された環境内でユーザがアプリケーションの動作を確認することができます。デモをセットアップすることで、ユーザにアプリケーションを体験してもらえます。これは、アプリケーションの性能を容易にアピールできるすばらしい営業ツールです。テストドライブ作成の詳細については、PDF ドキュメント Creating Test Drives (テストドライブの作成) を参照してください。


ライセンス管理

ライセンス管理アプリケーション (LMA) を利用すると、管理パッケージのインストールやアップグレードの状況を追跡できるようになります。これにより、管理パッケージのライセンスを管理し、パッケージへのアクセスを許可するユーザ組織のユーザ数やライセンス期間を制御することが可能になります。

ライセンス管理アプリケーションは AppExchange から入手できます。詳細については、製品のドキュメントを参照してください。


まとめ

このドキュメントでは、Force.com プラットフォームで提供しているアプリケーションのパッケージ化と配布に関連するさまざまなオプションを取り上げて解説しました。未管理パッケージは、すばやく簡単に作成できるパッケージで、コンポーネントをまとめてコピーとして配布します。作成者がインストールされたパッケージを管理することはありません。管理パッケージでは、参照によって機能を提供します。管理パッケージの作成者は、パッケージの内容、知的所有権、使用方法などをコントロールすることが可能です。AppExchange は、パッケージの配布拠点として手軽に利用できるディレクトリサービスです。ライセンス管理アプリケーションを使用すると、ユーザ組織でのパッケージの利用を厳密に制御できます。


参考資料