JP:An Introduction to Metadata and Development as a Service

Force.com のメタデータと DaaS の概要

摘要

DaaS (Development as a Service: サービスとしての開発) とは、従来型の開発手法にもとづいたオンデマンド型アプリケーションの開発を可能にする一連の機能のことを指します。DaaS は、IDE (統合開発環境)、ソースコントロールシステム、バッチスクリプトなどのツールによってクラウドコンピューティングの開発プロセスを強化し、迅速な開発や導入を可能にします。

Force.com プラットフォームは、高度で強力なメタデータモデルと API を提供することによって、この DaaS を実現しています。メタデータは、アプリケーションを記述するメカニズムを提供します。一方、API は、アプリケーションの構成やソースへのプログラム的なアクセスを可能にする一連の Web サービスメソッドを提供します。この API を基に構築されたクライアントアプリケーションには Force.com IDE、Force.com 移行ツールなどがあり、これによりユーザは DaaS のメリットを享受できます。

このドキュメントでは、最初に Force.com プラットフォームにおけるメタデータと API の役割について述べ、続いて、Force.com IDE と Force.com 移行ツールにおける API の活用方法について説明します。また、メタデータ API のプログラム的なアクセス方法についても言及します。メタデータ API を利用した独自ツールの開発にお役立てください。


メタデータとメタデータ API

メタデータは Force.com プラットフォームの中核的な機能です。上に述べた Force.com IDE、Force.com 移行ツールのほか、ユーザがアプリケーションでレコードを追加する際に使用するユーザインターフェースにもメタデータが使用されています。後続のセクションでは、このメタデータの定義や使用方法について解説します。


メタデータの定義

多くのアプリケーションではデータを処理します。通常、データはデータベースに格納され、そこには取引先、取引先担当者などの情報が含まれます。同様に考えると、アプリケーションのソースコードも、アプリケーションの外観や操作性、機能に関する情報を含んだある種のデータとみなすことができます。「メタデータ」とは、このようなデータを指す言葉として使われます。

従来の開発パラダイムでは、開発者がソースコードや構成に関する情報を取得し、コンパイル、パッケージ化、展開することで、ユーザがアプリケーションの使用を開始できるようになります。それに対して、ソフトウェアをサービスとして提供する Force.com プラットフォームでは、メタデータを使用することによって、クラウド環境でオンデマンドアプリケーションを迅速に提供できます。

Force.com プラットフォームでは、ユーザインターフェースの外観からワークフローに至る Force.com の全機能をカバーする強力なコンポーネント群を、このメタデータによって定義しています。Visualforce で作成するカスタムのユーザインターフェース、自動的に生成されるページレイアウト、カスタムのアプリケーション機能に使用する Apex クラスなども、メタデータを使用したコンポーネントです。つまり、ワークフローからデータを格納するデータベースオブジェクトの設定に至るまで、Force.com プラットフォームで開発するアプリケーションの機能すべてがメタデータなのです。


メタデータによるアプリケーションの定義方法

ここでは、データベースオブジェクトを作成するというシナリオを使って、メタデータによるアプリケーションの定義方法を説明します。この場合、ブラウザベースの開発環境である Developer Edition 環境の [設定] メニューから作成を行うことができます。[設定]、[作成]、[オブジェクト] の順にメニューを選択し、[新規カスタムオブジェクト] をクリックします。今回は、TodoItem というオブジェクトを作成します。オブジェクトの項目には説明、期日などの情報を含めるようにし、他の項目へのリレーションも設定します。名前や所有者の項目は自動的に設定されます。ブラウザベースの開発環境では、[設定] メニューでマウス操作を行うだけで、このようなオブジェクトを簡単に作成できます。

Image:meta_setup.jpg

作成した TodoItem オブジェクトでは、このオブジェクトのロジックやインターフェースのすべてを記述したメタデータ以外にも、さまざまな機能を標準で利用できます。

次に示すのは、自動生成されたこのオブジェクトのデータ入力画面です。

Image:Db_todoitemcreation.jpg

このページの期日の項目を見ると、ポップアップのカレンダーから日付を選択できるようになっています。これは、Force.com プラットフォームが、オブジェクトのメタデータを利用してこの項目が「日付」というデータ型を持つことを検出し、適切なユーザインターフェース要素を提供しているためです。同様に、TodoList 項目には他の項目へのリレーションが設定してあるため、項目の横に関連レコードを参照するためのボタンが追加されています。こうした機能の詳細については、 An Introduction to the Force.com Database (Force.com データベースの概要) で詳しく取り上げています。

このように、[設定] メニューではアプリケーション開発に使用されるメタデータをユーザが作成、編集することができます。ここでは、そのメタデータによってデフォルトのインターフェースが自動的に生成されます。

一部のメタデータは、アプリケーションの視覚的表現ではなく機能を構成します。たとえば、[設定] メニューを使用してワークフロールールを定義する場合、前出の例のようなユーザインターフェースの自動生成は行われず、メタデータの定義にもとづいた機能がアプリケーションに追加されます。以上のように、メタデータはアプリケーションのソースコード以上の役割を果たしています。カスタムアプリケーションの開発においても、Force.com プラットフォームでは、メタデータを基にアプリケーションのデフォルトの機能を構成します。


メタデータ API を使ったメタデータへのアクセス

メタデータの作成や編集は、ブラウザベースの開発環境の [設定] メニュー以外からでも行うことができます。Force.com には、Force.com アプリケーションへのアクセスと同じように、ブラウザを介して任意の場所からメタデータにアクセスできる SOAP ベースの Web サービス「メタデータ API」が用意されています。メタデータはアプリケーションのロジックや表示を制御するため、ユーザは、メタデータを直接作成、編集することによってアプリケーションを開発、変更できます。つまり、ユーザは「プログラムを記述するプログラムを操作する」ことができるわけです。

これから詳しく取り上げるメタデータ API は、Web サービスを介して次の 2 種類のメソッドを提供します。1 つ目は、ユーザによる一連のメタデータコンポーネントの作成、削除、更新を可能にするものです。たとえば、これにより、データベースオブジェクトのスキーマを変更して、項目を追加することなどができます。2 つ目は、ファイルベースのメタデータ呼び出しを含んだメソッド群で、ユーザはこれによりファイルの形式でメタデータを取得、展開できます。これは、組織間での移行処理において大きな役割を果たします (詳細は後述します)。たとえば、前出の TodoItem オブジェクトを XML ファイルの形式で取得すると次のようになります (ファイルの抜粋を示します)。

<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<deploymentStatus>Deployed</deploymentStatus>
<fields>
    <fullName>Description__c</fullName>
    <inlineHelpText>Some help text</inlineHelpText>
    <label>Description</label>
    <type>TextArea</type>
</fields>
<fields>
    <fullName>Due_Date__c</fullName>
    <defaultValue>TODAY() + 3</defaultValue>
    <label>Due Date</label>
    <type>Date</type>
</fields>
<!-- snip -->
<validationRules>
        <fullName>Due_date_in_future</fullName>
        <active>true</active>
        <errorConditionFormula>Due_Date__c - TODAY() < 0</errorConditionFormula>
        <errorMessage>Due date must be in the future</errorMessage>
</validationRules>
</CustomObject>

ファイルには、データベースオブジェクトの内容が記述されており、項目の名前、デフォルト値、ラベル名、データ型のほか、データの入力規則などが定義されています。

以上、メタデータとメタデータ API について説明しました。この後は、組織間でのメタデータの移行とDaaS について順を追って解説し、続いてメタデータ API の具体的な活用例を紹介します。


組織間でのメタデータの移行

Developer Edition は、開発時にアプリケーションやデータを格納する環境であり、「組織」とも呼ばれます。開発では、Web ブラウザを介してこの組織にログインし、[設定] メニューにアクセスしてデータベースオブジェクトを作成します。

なお、Force.com では、ユーザは複数の組織を利用することができます。カスタムアプリケーションを開発して自社内で利用する場合は、通常運用組織への導入を行います。この運用組織では、セールスフォース・ドットコムとの契約内容に応じてライセンスやデータ容量に制限が課されます。アプリケーションをテストする場合はサンドボックス組織を使用できます。この組織には、運用組織のデータの一部がミラーリングされますが、運用組織からは独立しています。

こうした組織は、メタデータのコンテナとみなすことができます。ある組織から別の組織にアプリケーションをコピーするには、コピー元の組織でそのアプリケーションに関するすべてのメタデータをダウンロードし、コピー先の組織にアップロードします。この処理を担うのがメタデータ API です。

メタデータではなくデータを移行する場合は、Force.com Web サービス API を利用します。ブラウザベースの開発環境の [設定] メニューにある データローダ などの関連機能を利用することも可能です。

他のプラットフォームと同様、アプリケーションシステムを組織間で移行するには、通常、Force.com プラットフォーム上のアプリケーションのソースとメタデータに加え、関連データを移行することも必要です。このような処理は、メタデータ API と Web サービス API を組み合わせて実行します。

次の図では、2 つの組織間でこの両 API を使用しています。メタデータ API はアプリケーションコンポーネントのメタデータを取得し、Web サービス API はデータベースのデータを取得します。

Image:meta_cloudyorgs.jpg


DaaS (Development as a Service: サービスとしての開発)

ここまでのセクションでは、メタデータ、メタデータ API、Web サービス API などを、Force.com プラットフォームで開発したアプリケーションを操作するためのツールとして紹介しました。この後は、さらに高度な開発プロセスをサポートするツールを取り上げて説明します。広範なツールや API を備える DaaS では、コードエディタ、ソースコントロールシステム、バッチスクリプトといった、ブラウザベースの開発環境では利用できない機能を提供することによって、より高度な開発プロセスをサポートします。 こうした機能は、DaaS の主要な用途である組織間でのメタデータコンポーネントの移行処理などで活用できます。たとえば、サンドボックス組織で行った変更を運用環境に適用する場合などが該当します。

メタデータ API は DaaS というビジョンの中核となる機能です。この機能は、ブラウザベースの機能に比べてはるかに高度で、クラウド環境においてデータ層を超えた連携を実現する洗練された開発ツールの構築を可能にします。 この後の 2 つのセクションでは、こうしたツールの実例として、Force.com IDE と Force.com 移行ツールを紹介します。


Force.com IDE

Force.com IDE は Eclipse プラットフォームをベースとした統合開発環境です (詳細は An Introduction to the Force.com IDE (Force.com IDE の概要) を参照)。このクライアントアプリケーションにより、Eclipse 統合開発環境で Force.com アプリケーションを開発することが可能になります。

Force.com IDE では、コード補完や構文の強調表示が可能なエディタ、クラスのテスト機能、オブジェクトのスキーマの参照機能、メタデータを別の組織に展開するオプションなどを利用できるほか、多くの IDE でサポートされている高度なコード共有機能もサポートされています。このコード共有機能では、Subversion などのソースコードリポジトリを利用でき、複数の開発者によるアプリケーションの共同開発が可能になります。

こうした Force.com IDE の機能は、すべてメタデータ API によって実現されています。Force.com IDE では、最新のメタデータコンポーネントタイプを完全にサポートします。ユーザが Apex クラスを保存すると、Force.com IDE によりそのクラスはローカルに保存されます。ユーザは必要に応じて、メタデータ API を使用して変更したクラスのコードを Force.com プラットフォームに送信することができます。送信されたクラスは Force.com プラットフォームでコンパイルされ、エラーが発生した場合は Force.com IDE にメッセージが返されます。このように、Force.com IDE では、慣れ親しんだプログラミング環境でクラウド環境と連携した開発を実行できます。

Image:meta_ide.jpg

上の図に示すように、Force.com IDE ではメタデータのディレクトリ構造を参照できます。

Force.com IDE では、プロジェクトを作成する際に、取得や同期の対象にするメタデータオブジェクトを指定できます。

Image:Ide_initialprojectcontents.jpg

この機能は、ファイルベースのメタデータの宣言型呼び出し (詳細は後述) によって実行されます。


Force.com 移行ツール

Force.com 移行ツールは、構成ファイルやコマンドラインインターフェースによるメタデータの移行を可能にする Ant ライブラリです。シンプルなビルド構成ファイルに認証情報を追加すると、メタデータの取得や展開を実行するコマンドを使用できるようになります。次に、簡単なコマンドの例を示します。

ant retrieveUnpackaged

このコマンドにより、ビルドスクリプトの retrieveUnpackaged アクションが起動され、デフォルトの構成ファイル (package.xml) の内容にもとづいて Force.com プラットフォームからメタデータの取得処理が実行されます。デフォルトで、この構成ファイルにはすべてのクラス、トリガ、静的リソースが指定されています (ワイルドカードが使用されています)。取得処理を実行すると、該当のオブジェクトに関連付けられているすべてのメタデータが、[retrieveUnpackaged] というローカルのディレクトリに格納されます。

次に、ディレクトリ構造内で retrieveUnpackaged コマンドを実行した出力結果を示します。これにより、メタデータコンポーネントが取得されます。

classes                      
triggers
package.xml

ここで、[classes] フォルダにはすべての Apex クラスが、[triggers] フォルダにはすべてのトリガが格納されます。package.xml は、XML パッケージ配備記述子という特殊なファイルであり (詳細は Metadata API Developer's Guide (メタデータ API 開発者向けガイド) を参照)、ディレクトリ構造で使用できる一連のメタデータコンポーネントが記述されています。

メタデータの取得後、新しいトリガの追加やクラスのソースコードの変更といった処理を行い、その後同様のコマンドを実行して変更内容を再実装します。

ant deployUnpackaged

パラメータを部分的に変更することでコードを別の組織に実装できるため、組織間でのメタデータの移行作業を省力化できます。

さらに、この移行ツールはコマンドラインユーティリティであるため、スクリプトファイル内で使用することができ、ニーズに応じて機能を強化することが可能です。たとえば、ステージング用の組織から運用組織への移行スクリプトを作成したり、複数フェーズのリリースプロセスを記述したスクリプトを作成したりできます。

これらの呼び出しでは、前に取り上げたファイルベースのメタデータ呼び出しによってテキスト形式のメタデータを取得します。

まとめ

メタデータとメタデータ API は、Force.com プラットフォーム上で開発するアプリケーションのロジック、表示、構成情報を制御する強力なメカニズムを提供します。メタデータにアクセスするには、ブラウザベースの開発環境の [設定] メニューにある GUI ツールを使用するか、メタデータ API をプログラム的に使用します。

DaaS は、コードエディタ、ソースコントロールシステム、バッチスクリプトといったブラウザベースの開発環境では利用できない機能を提供することによって、より高度な開発プロセスをサポートします。DaaS は、メタデータ API によって実現されます。

DaaS ツールの実例である Force.com IDE や Force.com 移行ツールを使用すると、ソースコントロールの統合、タスクの自動化、組織間での移行処理といった標準的な開発プロセスを省力化することができます。

開発者は、メタデータとメタデータ API についての知識を深めることによって、アプリケーションの構造を詳細に理解できるようになるほか、標準的な開発シナリオをサポートすると同時に基本的な機能を超えてプラットフォームを活用することを可能にする強力なツール群を使いこなせるようになり、Force.com プラットフォームからより大きなメリットを得られます。


参考資料

  • Metadata API Developer's Guide (メタデータ API 開発者向けガイド): メタデータ API に関する詳細を学べます。多数の有用なサンプル、XML パッケージ配備記述子 package.xml に関する詳細な説明が掲載されています。
  • Developerforce サイト: このサイトで無料の開発者用エディション Developer Edition を入手して、すぐにプログラミングをスタートできます。ドキュメントやフォーラムなどへのリンクも用意されています。
  • Apex コードの概要 : Apex 言語の概要を学べるテクニカルライブラリです。
  • Force.com IDE: このページには、Force.com IDE インストールのための情報のほか、 Force.com IDE の概要をはじめとする関連ドキュメントへのリンクが用意されています。

執筆者について

Jon Mountjoy は Developerforce コミュニティの管理者および編集長として、新しいテクノロジを意欲的に探求し、コミュニティにフィードバックしています。Jon は Developerforce でブログを執筆しているほか、Twitter、FriendFeed などにも参加しています。以下に Jon 本人からのメッセージをお伝えします。「この場を借りて、素晴らしいコンテンツを作成してくれた Force.com プラットフォームドキュメンテーションチームに対して、執筆者より感謝の意を表したいと思います。また、貴重な助言ならびに誤りのご指摘をいただいた Quinton Wall 氏、Simon Fell 氏、Peter Morelli 氏、および Chris Wall 氏にも厚くお礼申し上げます。このドキュメントに関する皆様からのご意見をお待ちしています」