はじめに
開発者なら誰しも、繰り返し登場する処理やデザインパターンをフレームワークとして再利用できるようにするだけではなく、ユーザ自身がカスタマイズできる汎用的なプラットフォームを作れたらどんなにステキだろう、と思ったことがあるはずです。私がForce.comを使い始めたのはそんな理由でした。
人生の貴重な時間の多くをかけて、ユーザに直接的には届かないプラットフォーム部分を自作しなくとも、Salesforce CRM(Customer Relationship Management:顧客関係管理)ソリューションの実績が活かされ、クラウド上で利用できるものがすでにあるのです。しかも、アジャイルプロセスの一つであるScrumによって、継続的にフィードバックが反映されていれば、開発者にとっても、もちろんユーザにとっても、悪いものであるはずがありません。
ユーザ企業の要件がForce.comにフィットする場合、比較的短期間でユーザに喜んでもらえるアプリケーションを提供できます。多くの機能を標準で備わっている部品で構成することで、ユーザ企業固有のビジネスロジックに集中することができるからです。こうしたプロジェクトを何回か経験しているうちに、微力ながら日本全体のビジネスアジリティが高まることに繋がっているのではないかとさえ感じられるようになります。
一方、Force.com以外のプラットフォームを採用するプロジェクトや、プラットフォーム部分を新たに開発するプロジェクトにおいても、Force.comが持つモデルはおおいに参考になるに違いありません。
対象読者
Javaや.NETなどのオブジェクト指向言語でのコーディング経験がある開発者。
必要な環境
今回は特になし。
Force.comとは
Force.comは、Salesforce.com社が提供しているPaaS(Platform as a Service)です。基幹業務システムやポータルサイトなど、ビジネスを中心としたアプリケーションを開発するのに必要な、認証やアクセス制御、メール送受信、Webサービス連携、レポート、承認ワークフローといった強力な部品群を利用できます。
また、同じくSalesforce.com社からSaaS(Software as a Service)として提供されているCRMソリューションだけでなく、AmazonやGoogle、Facebookなどの他のサービスとの連携にも積極的です。さらには、AppExchangeと呼ばれるサードパーティ製のアプリを気軽に公開できるエコシステムも形成されています。
分類\ベンダー | Amazon | Salesforce | |
---|---|---|---|
SaaS (Software as a Service) |
― | Google Apps | Salesforce.com |
PaaS (Platform as a Service) |
― | GAE (Google App Engine) |
Force.com、 Heroku |
IaaS (Infrastructure as a Service) |
AWS (Amazon Web Services) |
GCE (Google Compute Engine) |
― |
クラウドサービスの分類、IaaS、PaaS、SaaSについては、過去に掲載されている記事『クラウド・コンピューティングの基本とWindows Azure』が参考になります。また、各クラウドサービスのより具体的で詳細な比較は、Appirio’s Cloud Ecosystem Mapを参考にしてください。
GAEやHerokuをはじめとする他のPaaSと比較した際の、Force.comの代表的な特徴はつぎのようなものです。
- Salesforce CRMソリューションで提供されているたくさんの機能を利用できる
- データモデルや基本的なページなど、システムの多くの部分をマウスクリック中心の操作だけで設定できる
- Apex、Visualforce、SOQL(Salesforce Object Query Language)という、Javaや.NET、SQLに似た独自言語でコーディングする
- マルチテナント型サービス特有の注意点がある
1番や2番については、Salesforce.com社から公開されている情報に説明をゆずり、ここでは3番と4番にフォーカスしていきます。
Javaや.NETに似ているApex、Visualforce
Force.comでは、Javaや.NETの言語の構文をもとに作られた、ApexおよびVisualforceという言語でコーディングします。
Java | .NET | Force.com | |
---|---|---|---|
ビジネスロジック | Java、Groovy… | C#、VB(.NET)… | Apex |
ユーザーインターフェース | JSP、JSF… | ASP.NET | Visualforce |
データアクセス | SQL、EJB… | SQL、LINQ… | SOQL、SOSL |
開発環境 | Eclipse、NetBeans… | Visual Studio | Eclipse Force.com IDE |
ユニットテスト | JUnit、TestNG… | Visual Studio、NUnit… | Apex |
ビルド/デプロイツール | Eclipse、NetBeans、 Ant、Maven、 Jenkins… |
Visual Studio、MSBuild、 Visual Studio Team System、 Jenkins… |
Eclipse Force.com IDE、 Ant、 Jenkins… |
JavaやC#などのプログラミング言語に対応するものがApexで、JSPやASP.NETのようなページ記述言語に対応するものがVisualforceです。Apexにおけるお約束のHello Worldは、例えば次のようなコードになります。
class HelloWorld { public String greet() { return 'Hello World!'; } } System.debug((new HelloWorld()).greet());
JavaやC#の構文にそっくりです。Groovyのようなシンタックスシュガーや、C#のプロパティのように、コーディングする上での便利な構文も一部採用されています。
次のコードはVisualforceによるもので、Webブラウザに「Hello World!」という文字列を表示します。
<apex:page > <h1>Hello World!</h1> <p><apex:outputText value="{! 'Hello World!' }"/></p> </apex:page>
こちらも先ほどと同様にJSPやASP.NETと構文が似ており、これまでと同じような感覚で記述できる言語です。もちろん、ページの中にJavaScriptやAjaxも含めることができます。また、データのクエリやDML(Data Manipulation Language)は、SQLの構文によく似たSOQLという言語で行います。次の例は、すべてのAccount(取引先)をApexコードからクエリするコードの断片を表しています。
Account[] accounts = [SELECT Id, Name FROM Account];
他にも、JUnitのようなユニットテストや、Eclipseに統合された開発環境のForce.com IDE、Antによるデプロイといったように、Javaや.NETの開発者なら手足のように使える道具と同等のものを、Force.comにおける開発でも同じように利用できます。これまで培ってきた経験やノウハウを十分に活かすことができるのです。