はじめに
ここ最近のForce.comに関する最もホットな話題の一つは、「Salesforce Platform Mobile Services」です。これは、スマートフォンやタブレットといったモバイル機器向けのアプリケーションを、より短期間で開発するための道具集です。ネイティブやHTML5、ハイブリッドのアプリケーションのためのフレームワークや、jQuery Mobile、AngularJS、Backbone.JSを利用するためのライブラリとサンプルなどが含まれます。ここでも「一般消費者向けに発展してきた汎用的な文化をエンタープライズの領域に取り入れる」というSalesforce.comが実践してきた考え方が活かされています。もちろん中心となるのは、これまでモバイル機器と分断されることの多かった、企業が扱う顧客データです。
「モバイルファースト」という言葉に表されるように、モバイル機器向けのアプリケーションへの関心は、ここにきて一気に明確になってきました。今やモバイル機器はパソコンよりも多く使われており、これからはモバイル機器の特性を活かした新しい体験をユーザに提供することから考えるべきというものです。こうした常に最新化され続ける技術トピックはForce.comにおける開発のメリットの一つです。本稿で解説するApexは、こうした新しい開発においても重要な役割を占めます。
対象読者
Javaや.NETなどのオブジェクト指向言語でのコーディング経験がある開発者。
必要な環境
- Windows、Mac OS、Linuxなど、WebブラウザとJava VMが動作する環境(本稿ではWindows 8とFirefox、Java 6で動作を確認)
- Force.com IDE(Spring '13 Generally Available 27.0 以上)
Force.comで扱う要素の種類
Force.comのアプリケーションは、ApexやVisualforceだけでなく、JavaScriptや数式、各種設定といったいくつかの種類の要素で構成されます。次の表は、主な構成要素をメタデータ型の名前順に抜粋したものです。経験的に利用頻度が少ないものや、短い説明では誤解をまねきそうなものは除外しています。
№ | コンポーネント | メタデータ型 | 説明 |
---|---|---|---|
1 | Apexクラス | ApexClass | Apex言語における1つの(入れ子クラスではない)クラスの単位を表す。 |
2 | Apexトリガ | ApexTrigger |
オブジェクトの挿入/更新/削除/復元の際に呼び出される Apex言語によって記述された処理。RDBにおけるトリガと同等の役割を果たす。 |
3 |
カスタム アプリケーション |
CustomApplication | タブのセットを表す。 |
4 |
カスタム 表示ラベル |
CustomLabels | エラーメッセージ等の固定文字列。 |
5 |
カスタムオブジェクト (または 標準オブジェクト) |
CustomObject |
RDBにおけるテーブルに相当する、 データを格納するための要素。 Force.comでは、データの格納だけではなく、 カスタムタブやワークフローなどが関連し、 中心的な役割を担う。 |
6 | カスタムタブ | CustomTab |
Force.comの画面要素の一つであるタブを表す。 オブジェクトごとのタブやVisualforceページ、 任意のURLなどを表示する。 |
7 | ダッシュボード | Dashboard |
一画面でいくつもの統計値を 確認することができる特殊なレポート。 |
8 | ドキュメント | Document |
アプリケーションのロゴ画像や、任意のOffice文書など、 Force.comに格納するファイルを表す。 |
9 |
メール テンプレート |
EmailTemplate |
ワークフローのメールアラートの際等に使用する メールのテンプレート。 |
10 | グループ | Group |
ユーザやロールをひとくくりにした、 情報共有の単位。 |
11 |
ホームページの コンポーネント |
HomePageComponent |
ユーザがログイン後に最初に表示する画面である ホームページの画面部品。 |
12 |
ホームページの レイアウト |
HomePageLayout | ホームページのコンポーネントの配置。 |
13 |
ページ レイアウト |
Layout |
オブジェクトのレコードを表示する際の 項目やボタン、関連リスト等の配置。 |
14 | プロファイル | Profile | ユーザの権限をひとくくりにしたもの。 |
15 | レポート | Report |
表形式/サマリー/マトリックスといった形式で、 データを一覧するための定義。 |
16 | ロール | Role |
部署による組織構造など、 オブジェクトのレコードへの アクセス権を階層関係として表す。 |
17 | 静的リソース | StaticResource |
画像やスタイルシート、jQueryのような JavaScriptのライブラリ等や、 これらのアーカイブ(.zipや.jarなど)。 |
18 |
トランスレーション ワークベンチ |
Translations |
多言語対応する際に利用する、 ロケールごとの翻訳文字列。 ユーザインターフェースの要素だけではなく、 選択リストに表示される文字列も設定できる。 |
19 | 入力規則 | ValidationRule |
数式による入力規則を オブジェクトレベルで設定する。 |
20 |
Visualforce コンポーネント |
ApexComponent |
Visualforceページに配置される画面部品。 Visualforce言語で記述される。 |
21 |
Visualforce ページ |
ApexPage | Visualforce言語で記述される画面の定義。 |
22 | ワークフロー | Workflow |
条件や時間によるアクション (メールアラートや項目の更新)の実行。 |
Force.comが面白いのは、これらの構成要素をSOAPによるWeb APIから操作できるという点です。その気になれば、開発効率を良くするための開発ツールを自作することもできます。詳しくは「メタデータAPI開発者ガイド」などを参照してください。また、「エンタープライズのクラウドにはどのような要素が必要とされるのか」といった、設計実装情報のモデルとしても大変興味深いものがあります。
これらのメタデータのほとんどは、XMLのデータとして表されます。コードとして扱うのは、Apexクラス、Apexトリガ、Visualforceコンポーネント、Visualforceページ、および静的リソースとしてのJavaScriptなどです。一般的な多くのフレームワークでの開発は、プラットフォームの上にアプリケーションを構築していくイメージでした。これに対しForce.comでは、どちらかというとプラットフォームをカスタマイズする範囲を少しずつ広げていくような進め方になります。Apexは、プログラミング言語というよりもスクリプト言語と表現されることが多い言語です。
よくあるForce.comを批判する声としては、「Apexがオープンではない独自言語である」というものがあります。しかし、クラウド上のプラットフォームで効率的に開発することに特化したDSL(Domain Specific Language:ドメイン特化言語)としてApexを捉えれば、クラウドの開発者にとって、これほど好ましいものはありません。