Salesforce.comは.NET開発者がオープンソースのツールキットを使って簡単にウェブサービスを利用できるようにしようとしている。これらのツールキットはForce.comのREST APIとChatter APIをターゲットにしており、Salesforce Platform AdvocateのWade Wegner氏が手がけている。氏がInfoQにこれらのコンポーネントの目的に話してくれた。
Salesforce.comプラットフォームには140万人の開発者が参画しており、SOAPとRESTのエンドポイントを通じてAPIを提供している。同社はJavaScript、PHP、モバイル(iOSとAndroid)開発者向けにSDK経由で簡単にAPIにアクセスできるようにしている。しかし、.NET開発者向けのリソースサイトは提供されているが、.NET開発者には開発を簡単にしてくれるライブラリはなかった。新しく登場したForce.com Toolkits for .NETはソースコードとGitHubにホストされたサンプルが付属している、Windows 8、Windows Phone 8、Silverlight 5などの複数のMicrosoftプラットフォームで動作するネイティブなライブラリだ。
InfoQはこのツールキットについて話を聞いた。
InfoQ: .NET向けのツールキットをリリースしましたね。このツールキットは何を提供してくれるのでしょうか。どうすれば入手できますか。
Wegner: Salesforce1プラットフォームは開発者向けの強力でシンプルでセキュアなAPIを提供します。.NET開発者向けに素晴らしい利用経験を提供するために、オープンソースのForce.com Toolkit for .NETとChatter Toolkit for .NETをリリースしました。これらのツールキットを使うことで、.NET開発者はとても簡単にすでに持っているスキルとツールを使ってAPIを利用できます。NuGetパッケケージとして利用できますので、.NET開発者はSalesforce1を活用したアプリケーションを簡単に構築でき、既存のアプリケーションにSalesforce1プラットフォームのパワーを組み込むことができます。
このツールキットには次のリソースが含まれています。
- Microsoft .NET Framework向けネイティブライブラリ
- デプロイとバージョニングを簡単にするNuGetパッケージ
- サンプルのアプリケーション
ソースコードはすべてGithubにホストされています。
https://github.com/developerforce/Force.com-Toolkit-for-NET
https://github.com/developerforce/Chatter-Toolkit-for-NET
https://github.com/developerforce/Common-Libraries-for-NET
NuGetパッケージは下記にあります。
http://www.nuget.org/packages/DeveloperForce.Force/
InfoQ: MicrosoftとSalesforceの関係は親密とは言えません。このツールキットを開発するにあたってどのような需要を見込んでいたのでしょうか。
Wegner: 私たちにはたくさんの顧客を抱えており、最も優先順位が高いのは顧客に成功をもたらすことです。私たちの実施した調査によれば、私たちの開発者エコシステムの中で最も大きいのが.NET開発者の大陸です。.NET開発者を生産的にし、Salesforce1の中で顧客やシステムとしっかりとつながれるようにすることで、彼らがビジネスと顧客に価値を素早く提供できるようになると思います。
InfoQ: このツールキットはどのような設計方針に基づいて作られたのでしょうか。このようなツールキットを作るときは開発者は何に気をつけるべきでしょうか。
Wegner: いくつか鍵になる設計方針がありました。
- 同じコアライブラリで可能な限り多くのMicrosoftプラットフォームをサポートすること。これを実現するために、このツールキットはPortable Class Librariesを使って、Windows 7 (.NET 4, .NET 4.5)、Windows 8、Windows Phone 8、Silverlight 5で利用できるようにしています。
- 性能上のボトルネックとアプリケーションのブロッキングを避けること。これを実現するために、AsyncアンドAwaitパターンを使っています。
- 開発者が動的オブジェクトを活用できるようにして、Salesforce1のオブジェクトを表すクラスを作る必要がないようにしました。
- 主要な操作をサポートし、ツールキットの開発に積極的にコミュニティを巻き込むこと。コントリビューションに対するポリシーを見ていただければわかる通り、とても寛容です。参加をお待ちしています!
- デリバリの仕組みとしてNuGetパッケージを使い、ソースコードにもアクセスできるようにすること。さらに、開発者が最新の開発/テストパッケージにアクセスできるようにすること。
自分で開発者向けのリソースを作るときは、これらの設計方針をふまえるといいと思います。
これらの設計方針が成功の基礎になっていると感じています。Githubのプルリクエスト経由ですでにコミュニティからの貢献も得ています。NuGetパッケージもたくさん使われています。
InfoQ: ソースコントロールからツールキットの配布までのパイプラインを説明していただけますか。
Wegner: よく聞いてくれました。私はこの仕組みとても満足しています。始まりはGitHub上のリポジトリです。3つのリポジトリがあります。
https://github.com/developerforce/Force.com-Toolkit-for-NET
https://github.com/developerforce/Chatter-Toolkit-for-NET
https://github.com/developerforce/Common-Libraries-for-NET
各リポジトリでFork & Pull開発モデルを利用しています。これで内部や外部とのコラボレーションがとても楽になります。
各リポジトリは同じようなフォルダ構造をしています。
/nugets
/samples
/src
/<ProjectName>
/<ProjectName>.FunctionalTests
/<ProjectName>.UnitTests
/nugetsフォルダにNuGetパッケージを作るためのすべてのファイルが含まれています。package.bat <version>を実行するだけでNuspecファイルに基づいたNuGetパッケージを作成して、NuGet Galleryに発行されます。NuGetパッケージの中に参照を含めることでさまざまなプロジェクトの依存関係を維持しています。これによって開発者が簡単に依存関係とバージョンを管理できます。独自のプロジェクトを始めてこれらのツールキットを使い始めた後でも簡単に管理できます。
/samplesフォルダにはふたつのツールキットのサンプルアプリケーションが含まれています。Windows Phone 8、Windows 8、.NET 4、4.5アプリケーションのサンプルが含まれています。
/srcにはツールキットのソースコードが含まれています。機能テストやユニットテストが含まれています。機能テストはSalesforce1 APIを直接、呼び出し、コードの健全性を担保します。単体テストはさまざまなHTTPコールのモックで、リクエストを作成し、レスポンスを適切に処理することを担保します。
コミットするといつもTeamCityが動きビルドが実行されます。次のようなビルドタスクを実行する“Debug CI Build”テンプレートを使っています。
- チェックを実行しソリューションがコンパイルできることを確認する。サンプルアプリケーションも確認する。
- 機能テストをすべて実行する。本物のSalesforce1 Developer Editionの組織を使う。
- 単体テストをすべて実行する。
- “最新の開発バージョン”を作成して発行する。NuGetが作成される。これは非公開のNuGetギャラリーとなる。
これらの処理はツールキットが壊れていないことを担保するために行われています。処理のどれかが失敗すると、1)メールが管理者に送信され、2)リポジトリREADME.mdファイルのグラフィックが緑から赤になります。
これらのステップによってツールキットの進化と強化をし続けるのが楽になります。特に開発者コミュニティからのプルリクエストを受け入れるのが楽になります。
InfoQ: 最初のリリースが終わり、このようなツールキットをビルド/ライセンス/デプロイしようとしている人にアドバイスをお願いします。
Wegner: 第一にアドバイスできることは、サポートしてくれる人、フィードバックをくれる人のグループを見つけることです。私は.NETの素晴らしい専門家グループとSalesforce1のコミュニティとともに働けたので幸運でした。