Salesforce(force.com)とmixiアプリ(OpenSocial)連携

巷ではmixiアプリ(OpenSocial)をGAE(Google App Engine)にホスティングする方法が流行っているそうですが、私のほうでは日本の技術者の間ではあまり有名でないSalesforce(force.com)とmixiアプリ(OpenSocial)連携させる方法をご紹介します。

Salesforce(force.com)はMicrosoftやOracleのようにエンタープライズ向け=有料(高額)というイメージがありますが、結構Googleのようなスタンスへの憧れを感じられるような部分があります。技術者向けにfree force.comというエディションもあり登録は必要ですが登録後はエンタープライズ系とほぼ同等の機能を試すことができます。

さてmixiアプリ(OpenSocial)はその実体であるガジェットXMLファイルをどこかにホスティングしてmixi側に読み込んでもらわないといけないわけですが、Salesforce側でホスティングする方法としては二つ考えられます。それは静的ファイルとしてホスティングする方法とVisualforceページを作成してForce.com Sites機能を利用する方法です。

Salesforceにログインしていただくと解りますが上部メニューの「設定」→左メニューの「開発」→「静的リソース」で静的なファイルをアップロードできます。ここにアップロードしたファイルは任意のアドレスが振られ外部サーバからもアクセスできます。これを利用してガジェットXMLファイルをアップロードしてmixiから読み込んでもらうのがひとつ目の方法です。

もうひとつの方法は上部メニューの「設定」→左メニューの「開発」→「ページ」で作成できるVisualforceページを作成し上部メニューの「設定」→左メニューの「開発」→「サイト」で設定できるForce.com Sites機能を使って作成したVisualforceページを外部に公開しmixiから読み込んでもらう方法です。

お勧めはふたつめのVisualforceページを作成してForce.com Sites機能を利用する方法です。ガジェットXMLファイルだけで考えればどちらでも良いのですが、恐らくほとんどのSocialアプリはコンテナ側(mixiなど)の機能だけで完結することはないと思います。サーバ側と連携してXMLやJSONなどのデータ形式でデータを出し入れする必要が出てきます。

そういった場合にガジェットXMLファイルもデータ連携されるXMLやJSONファイルも同じVisualforceページで作成されていた方が開発も管理もしやすいと思います。もちろんガジェットXMLファイル用Visualforceページとデータ出し入れ用Visualforceページは別ページとして作成します。コンテナ側(mixiなど)と連携するデータの種類が増えれば自ずとその入り口となるVisualforceページも増えていく格好になります。

したがって静的リソースだけで動的なデータ連携まで行うことは不可能だということです。Salesforceでは「オブジェクト」と言われるデータベースのテーブルのようなものを中心にアプリケーションを構築するのですが、よりロジック的な動きをつけたい場合はApexと言われるSalesforce特有のJavaに似た言語を使ってApexクラスを作成し一般的に言われるビジネスロジック層やデータアクセス層の役割を担うことができます。

つまりオブジェクト(データ・エンティティレイヤー)をApexクラス(ビジネスロジック・データアクセスレイヤー)で扱いVisualforceページ(プレゼンテーションレイヤー)で表示部分の処理を書きForce.com Sites機能で外部に公開するわけです。そうすればガジェットXMLファイルをホスティングする役割だけでなくWebAPIのインターフェイスのような役割も担うことができます。つまりGAE(Google App Engine)等と同等の役割を担うことが可能なのです。