.NETおよびWindows Runtime向けWindows Azureストレージ クライアント ライブラリ 2.0の紹介

本日、Windows Azureストレージ クライアントライブラリのバージョン2.0をリリースします。これは、新機能、幅広いプラットフォーム互換性、これまで皆さんから頂いた素晴らしいフィードバックを解決する修正を含む、.NETライブラリに対する過去最大の更新です。ソース コードはGitHubで入手可能になっています。また、このライブラリはNuGetを介しても入手可能であり、Windows Azure SDK for .NET (2012年10月版) にも含まれています。より詳しい情報とリンクについては、以下を参照してください。.NET 4.0ライブラリに加えて、Windows Runtimeプラットフォームを完全にサポートし、Windowsストア アプリがサポートする任意の言語 (JavaScript、C++、C#、Visual Basic) で書かれた、(ARMベースのシステムをサポートする) Windows RTとWindows 8の両方向けのモダンなWindowsストア アプリを構築するために使える、Windowsストア アプリ向けの2つのライブラリを、コミュニティ テクノロジー プレビュー (CTP) としてリリースします。このブログ ポストはこれらのライブラリの概要であり、プラットフォームに関係なく.NETでクラウド アプリケーションを開発する際に理解に役立つ実装の詳細を扱います。

新機能

ストレージ クライアント ライブラリの今回のリリースでは、次のような多数の新機能を追加しました。

  • 簡素化と使いやすさ – Windows Azureストレージを初めて使う開発者でも迅速に使いこなすことができる一方で、既定の実装を越えてアプリケーションの動作をカスタマイズしたい開発者に引き続き拡張性を提供する、大きく簡素化されたAPI。
  • 新しいテーブル実装 – 低遅延/高パフォーマンスのワークロードに最適化された簡素化されたインタフェースを提供し、開発者がデータをより制御可能にする、より拡張可能なシリアル化モデルを提供する、完全に新しいテーブル サービス実装。
  • 高度なデバッグ/構成機能 – みなさんから頂いた共通のフィードバックの1つは、ストレージ サービスへの呼び出しをしているときに、「水面下で」何が起こっているか知ることが非常に難しいということでした。何回リトライが行われたのでしょうか? エラー コードは何でしょうか?OperationContextオブジェクトは、高度なデバッグ情報、並列で複雑なアクションに対するリアルタイムのステータス イベント、ユーザーがリクエストをカスタマイズしたりエンド ツー エンドのクライアント トレースを有効化することを可能にする拡張点を提供します。
  • Windows Runtimeのサポート – JavaScript、C++、C#、Visual Basicを使ったWindowsストア アプリの開発をのサポートと、C++、C#、Visual Basic向けの強く型付けされたテーブル拡張ライブラリを含む、Windows Runtimeコンポーネント。
  • 完全な同期プログラミング モデル/非同期プログラミング モデル (APM) 実装 – .NET 4.0向けの完全な同期API。クライアント ライブラリの旧リリースでは、単に対応するAPMメソッドを囲みManualResetEventを使うことで、同期メソッドを実装してました。実行中に追加のスレッドがブロックされたままになるので、これは理想的ではありませんでした。今回のリリースでは、すべての同期メソッドは、そのスレッド上で作業を完了します。Cloud[Page|Block]Blob.Open[Read|Write] メソッドを介して利用可能な並列性のためのストリーム実装を例外として、そのスレッド内でメソッドが呼び出されます。
  • 簡素化されたRetryPolicy – 簡単で再利用可能なRetryPolicy。
  • .NET Client Profile – ライブラリが、.NET Client Profileをサポートするようになりました。.NET Client Profileに関する詳細については、こちらをご覧ください。
  • 合理化された認証モデル – 匿名、共有アクセス署名、アカウント/キー認証スキームをサポートする、単一のStorageCredentials型を提供するようになりました。
  • 一貫性のある例外処理 – ライブラリは、サーバーへのリクエストを行う前に発生した任意の例外を、即座にスローします。リクエスト実行中に発生した任意の例外は、(他のすべての例外をラップし、リクエスト実行に関する高度な情報を提供するする) 単一のStorageException型にラップされます。
  • APIの明瞭さ – サーバーにリクエストを行うすべてのメソッドが、[DoesServiceRequest] 属性で明確にマークされるようになりました。
  • BLOB APIの拡張 – BLOBのDownloadRangeで、ストリーム実装に依存することなく、ユーザーがダウンロードする特定のバイト範囲を指定可能になりました。
  • BLOBダウンロードの再開 – 接続が失われた際に受け取っていないバイトだけをダウンロードするための、後続範囲リクエストを発行できる機能。
  • MD5の改善 – すべてのクライアントAPIにわたって一貫性のある、簡素化されたMD5の動作。
  • ページBLOB実装の更新 – ストリームの読み書きを含む、完全なページBLOB実装。
  • キャンセル – ICancellableAsyncResultを介した、非同期キャンセルのサポート。注: これは、CancellationToken.Register() メソッドを介して、.NETのCancellationTokenとともに使えます。
  • タイムアウト – エンド ツー エンドのタイムアウトのシナリオをサポートする、クライアント、サーバーで別個のタイムアウト。
  • Windows Azureストレージ機能サポートの拡張BLOB/コンテナのリース (英語 / 日本語 (機械翻訳))、BLOB/テーブル/キューの共有アクセス署名 (英語 / 日本語 (機械翻訳))、非同期アカウント間BLOBコピー (英語 / 日本語 (機械翻訳)) の実装とともに、2012-02-12 REST APIバージョンをサポートするようになりました。

設計

.NETとWindows Runtime向けの新しいストレージ クライアントを設計する際、我々は、開発プロセスを通して従う一連の設計ガイドラインを定めました。これらのガイドラインに加えて、Windows Runtime向けに開発する際には、特に、いくつかの主要なアーキテクチャ上の決定を後押しするJavaScriptでは、いくつかの固有の要件があります。

たとえば、これまでのRetryPolicyは、ユーザーが構成可能なデリゲートを基にしていました。しかし、すべてのプラットフォームでこれをサポートできないので、どこでも簡単で一貫性のある実装になるように、RetryPolicyを再設計しました。また、この変更によって、これまでの実装の複雑性に関するユーザーからのフィードバックを解決するために、インタフェースを簡素化できました。

Windows Runtime

今回のリリースを主に推進したのは、特にWindows 8、Windows RT、Windows Server 2012を対象にした、プラットフォーム サポートの拡大でした。そのため、コミュニティ テクノロジー プレビュー (CTP) としてWindows Runtimeをサポートする、次の2つのWindows Runtimeコンポーネントをリリースします。

  • Microsoft.WindowsAzure.Storage.winmd – JavaScript、C++、C#、VBをサポートする、完全なストレージ クライアント。このライブラリにはすべてのコア オブジェクトが含まれ、JavaScriptで利用可能なBLOB、キュー、基本的なテーブル実装がサポートされています。
  • Microsoft.WindowsAzure.Storage.Table.dll – 汎用的なクエリのサポートと強く型付けされたエンティティを提供する、テーブル拡張ライブラリ。これは、強く型付けされたエンティティとリフレクションを基にしたPOCOオブジェクトのシリアル化を提供するために、JavaScript以外のアプリケーションによって使われます。

仕様変更

Windows 8、Windows RT、Windows Server2012の登場とともに、我々は現行のライブラリのプラットフォーム サポートを広げる必要がありました。この要件を満たすため、プラットフォーム サポートを広げ、新機能と重要なパフォーマンス改善 (詳細は後述) を提供するための既存のストレージ クライアントのコードベースの改訂に、我々は多大な労力を投資してきました。クライアント ライブラリの今回のバージョンの主要な目的の1つは、開発者の知識とコードをあるプラットフォームから別のプラットフォームに自然に移行できるように、プラットフォームにわたって一貫性のあるAPIを維持することでした。そのため、この共通のインタフェースをサポートするために、ライブラリのこれまでのバージョンから、いくつかの仕様変更を行いました。また、この機会を使って、.NETライブラリと最近リリースされたJava向けのWindows Azureストレージ クライアント ライブラリ (英語 / 日本語 (機械翻訳)) の両方に対する、フォーラムなどで頂いた皆さんからのフィードバックに対応しました。既存ユーザー向けに、それぞれの変更をより詳しく説明した仕様変更のアップグレード ガイドを、このブログに投稿する予定です。

新しいクライアントがこれまでの1.xリリースと同じNuGetパッケージの基で公開されていることに、注意してください。そのため、自動アップグレードが仕様変更を引き起こすので、既存プロジェクトを確認してください。

追加の依存性

新しいテーブル実装は、(まとめてODataLibと呼ばれる) 3つのライブラリに依存しています。これらは、NuGetを介して入手可能なODataLib (バージョン5.0.2) パッケージで解決可能ですが、現在5.0.0バージョンを含んでいるWCFデータ サービスのインストーラーでは解決できません。ODataLibライブラリは直接ダウンロード可能であり、また、NuGetを介してコード プロジェクトから参照可能です。ODataLibパッケージは、次の通りです。

名前空間

注目すべき仕様変更は、アセンブリ名とルート名前空間が、Microsoft.WindowsAzure.StorageClientからMicrosoft.WindowsAzure.Storageに変更されたことです。他のWindows Azureサービスのライブラリとより合致することに加えて、今回の変更によって、アプリケーション移行時に、開発者はライブラリの古い1.Xバージョンと2.0リリースを同時に使うことができます。さらに、より的を絞った開発者のエクスペリエンスとより巧みなIntelliSenseのエクスペリエンスを提供するために、それぞれのストレージ抽象化 (BLOB、テーブル、キュー) がサブ名前空間に移動しました。たとえば、BLOB実装はMicrosoft.WindowsAzure.Storage.Blobにあり、関連するプロトコル構成要素はMicrosoft.WindowsAzure.Storage.Blob.Protocolにあります。

テスト、安定性、オープン ソース コミュニティとの連携

我々は、一貫性、安定性、信頼性がある堅牢なAPIを提供することを約束しています。今回のリリースでは、テスト カバレッジを広げ、巨大なテスト シナリオを (一般に利用可能な) より的を絞ったものに分割する点において、大きく進展しました。

マイクロソフトとWindows Azureは、我々のサービスのクライアント ライブラリに関して、できる限りオープンで透明性があるように努力しています。すべてのライブラリのソース コードは、Apache 2.0ライセンスの基でGitHubを介してダウンロード可能です。加えて、我々は、.NET 4.0ライブラリ向けだけでも、450以上の新しい単体テスト提供しました。コードベースを修正したいユーザーは、変更を検証するための簡単で軽量な方法を持つようになりました。これらのテストのほとんどは、Widnows Azure SDK for .NETを介して出荷されているストレージ エミュレーターに対して実行できることに注目することも重要です。これによって、ユーザーは、ストレージ アカウントの使用料を発生させることなくテストを実行可能になります。また、我々は、ユーザーがWindows Azureストレージに関連する簡単な、あるいは高度なトピックの両方を使いこなせるように、一連のより高レベルなシナリオとハウツーを提供する予定です。

まとめ

我々は、.NETコミュニティにWindows Azureストレージを扱う真に一級の開発エクスペリエンスを提供することに、多大な労力を注いてきました。このブログ ポストで提供されている内容に加えて、我々は、多様な機能とシナリオをより詳しく扱う、一連の追加のブログ ポストの公開を続ける予定ですので、後で確認してください。願わくは、あなたの過去のフィードバックが今回の新しいライブラリに反映されていればいいのですが。コミュニティからのフィードバックには本当に感謝しているので、ブログ ポストへのコメントやフォーラムへn参加によって、フィードバックを続けてください。

リソース

Windows Azure SDK for .Netを入手してください。

 

 

関連情報

 

 

 

 

One thought on “.NETおよびWindows Runtime向けWindows Azureストレージ クライアント ライブラリ 2.0の紹介

  1. Pingback: .NET Clips

Leave a comment