February 2016

Volume 31 Number 2

Windows 10 - 公式 OneDrive SDK を使った UWP アプリの実装

Laurent Bugnion | February 2016

本連載の第 1 部 (msdn.com/magazine/mt614268) では、ユニバーサル Windows プラットフォーム (UWP) アプリから HTTP 経由で直接 OneDrive API を使用する方法、つまり HttpClient を使用して呼び出しを行う方法について説明しました。また、REST の基礎を詳しく説明し、async/await キーワードや、最新の Web API を呼び出すための HttpClient ライブラリなど、最新のプログラミング テクニックを .NET アプリケーションから利用する方法も紹介しました。さらに OAuth プロトコルによる認証メカニズムのしくみも取り上げました。この OAuth プロトコルを使用すれば、ホスト アプリは認証サービスとのやり取りを一切意識することなく、アプリがホストする Web ページにユーザーが資格情報を入力すると、ユーザーと認証サービスとの間で認証に関するやり取りが行われるようになります。このとき OAuth プロトコルの実装に XAML ページでホストされる Web ビューを使用しました。

この認証と REST 呼び出しの実装はそれほど難しくはありませんが、手間はかかります。特に、最新の変更や追加機能をすべて備えるようにライブラリを最新状態に保つことを考えると面倒です。このような事情から、マイクロソフトは OneDrive SDK を公開しています。この SDK は (NuGet パッケージ マネージャーを使用して) 簡単に自身のアプリに追加できます。このSDK は非常に役立つコンポーネントで、まさに「新たなマイクロソフト」の取り組みとしてオープン ソース化され、GitHub (bit.ly/1WX0Y03、英語) で公開されています。

今回取り上げるサンプルの完全版は 1drv.ms/1ObySnz にあります。

新しい SDK による認証

前回説明した「低レベル」の実装と、公式 OneDrive SDK との大きな違いの 1 つが認証のメカニズムです。前回は OAuth を手作業で実装し、以下のようなパーツをいくつか作成して連携させなくてはなりませんでした。

  • マイクロソフト認証サービスから送られる Web ページをユーザーに表示する「Web ビュー」。このビューからユーザー名とパスワードが認証サービスに直接送信されるため、アプリはこのやり取りを意識する必要がありません。
  • 上記の Web ビューをホストし、認証プロセスが成功した場合に認証サービスから返される認証トークンを解析するために待機する「XAML ページ」。
  • 認証トークンが利用可能で有効かどうかを判断し、トークンが無効な場合は認証ページを表示する「クライアント側認証サービス」。

新しい OneDrive SDK は、こうした認証のプロセスを、開発者にとってもユーザーにとっても大幅に簡素化します。

開発者にとっての認証

開発者にとっては、認証プロセスに対してほぼ何もする必要がなくなります。認証ワークフロー全体が SDK によって処理されます。そのうえ、SDK はバックグラウンドで OnlineIdAuthenticator という Windows ストア アプリの機能を使用します。このクラスは OS レベルで認証メカニズムを処理するため、認証トークンを解析する必要がなくなります。

Windows 10 用 OneDrive SDK は、OnlineIdAuthenticator に加えて WebAuthenticationBroker クラスもサポートします。このクラスにより、「従来」の方法に近いログインが可能になり、ユーザー名とパスワードの入力だけでなく、認証トークンの解析や、サービスで使用するダイアログもすべて処理されます。この 2 つの認証モードの例については後ほど取り上げます。

ユーザーにとっての認証

エンド ユーザーにとっての主なメリットは、ログインした Windows ユーザーの資格情報が OnlineIdAuthenticator によって処理され、OS レベルで利用されるようになることです。つまり、Windows ユーザーが Windows アカウントに紐付けられた OneDrive アカウントにログインすると、自身のユーザー名とパスワードを再び入力する必要はなくなります (Windows アカウントと OneDrive アカウントの紐付けはよく行われる方法です)。全体的な認証メカニズムは、ユーザーが意識することなく行われます。

注: OneDrive SDK は、Outlook.com、Live.com、Hotmail.com の各アドレスなどのコンシューマー向けマイクロソフト アカウント (MSA) に加え、ビジネス ユーザー向け Azure Active Directory (Azure AD) もサポートします。これは、Azure AD で自社のユーザーを管理している企業にとっては最適です。MSA は、Microsoft .NET Framework 4.5.1 アプリ (Windows Presentation Foundation アプリや Windows フォーム アプリなど)、Windows ストア アプリ、および Windows Phone アプリで利用できます。Azure AD は Windows フォーム アプリ、Windows ストア 8.1 アプリ、および UWP アプリで利用できます。

Windows ストアでの新しい UWP アプリの関連付け

OnlineIdAuthenticator を機能させるには、Windows ストアに新しいアプリを登録する必要があります。ただし、OneDrive SDK を使用するために実際にアプリを Windows ストアに申請する必要はありません。Windows ストアに登録することで、アプリの一意 ID が作成されます。この ID をアプリ マニフェスト (Package.appxmanifest) に入力する必要があります。ユーザーが OneDrive サービスに対して認証を試みると、アプリを一意に識別するためにこの ID が使用されます。したがって、前回 OneDrive デペロッパー センターから取得したクライアント ID を、Windows ストアに自身のアプリを登録するプロセスに置き換えることになります。

Windows ストアにアプリを登録するには、Windows デベロッパー センター (dev.windows.com) にアクセスし、Windows デペロッパー アカウントでログインしてダッシュボードにアクセスする必要があります。状況によってはアカウントを登録し、支払情報を提供しなくてはならない場合があります。

ダッシュボードにログインしたら、[アプリの申請] リンクを探します。このリンクをクリックすると概要ページが表示されます。このページで、既存のアプリの表示や新しいアプリの申請、Windows ストアへのアプリの登録が可能です。新しい Windows ストア アプリを作成するには一意のアプリ名が必要です。この名前は [新しいアプリの作成] ボタンをクリック後に入力します。次に [使用可能か確認] をクリックして、指定したアプリ名が他に存在しないことを確認します。指定した名前は予約されるので、公開予定のないテスト アプリでは暫定的な名前を使用することをお勧めします。こうすれば、他の開発者のアプリ名をブロックすることを避けられます。また、ブランド所有者から訴えられないように、予約名を使う権利があることを確認してください。最後に、予約したアプリを 1 年以内に申請しないと、その名前の予約が無効になるので注意が必要です。今回のサンプル アプリではその用途から、たまたま利用可能だった「TestOneDriveSdk_001」という名前を予約しました。

認証の実装とテスト

それでは、アプリを作成して OneDrive SDK を追加しましょう。まず、Visual Studio を使用して Windows 10 用 UWP アプリを新しく作成します。このアプリの名前を Windows ストアで予約したものと同じにする必要はありませんが、同じにしておいた方が便利です。

アプリを作成したら、ソリューション エクスプローラーでプロジェクトを右クリックし、コンテキスト メニューから [NuGet パッケージの管理] をクリックして NuGet パッケージ マネージャーを開きます。パッケージ マネージャー上部の [参照] をクリックし、Microsoft.OneDriveSDK パッケージを検索してアプリに追加します。

次に、以下の手順に従って認証をアプリに追加します。

  • MainPage.xaml を開き、ページにボタンを追加して「AuthenticateButton」という名前を付けます。
  • MainPage.xaml.cs では、図 1 に示すように Click イベント ハンドラーを実装します。

図 1 Click イベント ハンドラーの実装

private IOneDriveClient _client;
public MainPage()
{
  InitializeComponent();
  AuthenticateButton.Click += async (s, e) =>
  {
    var scopes = new[]
    {
      "onedrive.readwrite",
      "onedrive.appfolder",
      "wl.signin"
    };
    _client = OneDriveClientExtensions.GetClientUsingOnlineIdAuthenticator(
      _scopes);
    var session = await client.AuthenticateAsync();
    Debug.WriteLine($"Token: {session.AccessToken}");
  };
}

図 1 のコードには、前回のサンプルで使用したスコープがあります。このスコープにより、ファイルにもアプリ フォルダーにも読み取りと書き込みのアクセスが可能になります。念のため、この特別なフォルダーはルート直下の [アプリ] フォルダー内に作成され、アプリと同じ名前になります。ローミングの設定やオンライン ドキュメントなどはここに保存するのが適切です。

テストのためにアプリを実行する前に、Windows ストアで予約した名前とアプリとを関連付ける必要があります。これを行うには、次の手順を実行します。

  • ソリューション エクスプローラーでプロジェクトを右クリックし、[ストア]、[アプリケーションとストアを関連付ける] の順にクリックします。これは UWP アプリを Windows ストアに公開する前に行う必要があります。今回の場合、この手順で生成される情報が必要なため、開発のかなり早い段階で行っています。
  • [アプリケーションを Windows ストアと関連付ける] ダイアログ ボックスで、[次へ] ボタンをクリックし、Windows ストアにサインインします。アプリ名を予約するときに使った資格情報と同じものを必ず使用します。
  • サインインすると予約したアプリ名が表示されます。Web ベースのダッシュボードを使用しない場合、このダイアログ ボックスから直接名前を予約することもできます。
  • アプリ名を選択し、[次へ]、[関連付け] の順にクリックします。

これで、認証メカニズムをテストする準備は完了です。デバッグ モードでアプリを実行し、[Authenticate] ボタンをクリックします。アプリに重なるようにダイアログ ボックスが表示され、同意を求められます。ただし、マイクロソフト資格情報を入力する必要はありません。代わりに、Windows ログイン資格情報が自動的に使用されます。

図 1 のコードを実行後、[出力] ウィンドウに SessionToken (認証トークン) が表示されます。第 1 部と同様、このトークンをこれ以降の API 呼び出しで使用します。先ほどの同意はサインオフするまでキャッシュされるため、後でアプリを再び実行して [Authenticate] をクリックしても、再度同意を求められることはありません。これにより、ユーザーにとってはサインイン操作がシームレスになります。

アカウントの切り替えについて

図 1 のサンプルでは OneDrive SDK の GetClientUsingOnlineIdAuthenticator 拡張メソッドを使用しています。この拡張メソッドは、内部で OnlineIdAuthenticator クラスを使用します。前述のとおり、このオブジェクトはログインしたユーザーの資格情報を利用するため、大半のユーザーにとってはログイン操作がきわめて簡単になります。

ただし、このアプローチにはデメリットがあり、ユーザーはログイン時に別のアカウントを選択する方法がありません。したがって、この認証方式は Microsoft アカウントに OneDrive アカウントを 1 つしか紐付けしていない一般的なユーザーには最適ですが、複数の OneDrive アカウントを使い分けているパワー ユーザーにとっては、OnlineIdAuthenticator の制限は厳しすぎるかもしれません。さいわい、他の方式に切り替えるのは非常に簡単です。

WebAuthenticationBroker の使用

ユーザーが明示的に自身の資格情報を使用してサインインする必要がある (たとえば、Windows のログインに使用したものではないアカウントに切り替える) 場合、WebAuthenticationBroker クラスを使用する方が適しています。このクラスでも、OneDrive SDK はその複雑さを意識する必要性をほぼなくし、次のコードを使用して OneDrive クライアントを作成できます。

var client = OneDriveClientExtensions.GetClientUsingWebAuthenticationBroker(
  "[CLIENT ID]",
  _scopes);

図 1 に示したコードでは、上記の [CLIENT ID] 文字列をアプリのクライアント ID に置き換える必要があります。念のため、これは Windows デベロッパー センターのアプリの詳細で取得できる一意 ID です。

この小さな変更を加えてアプリを実行すると、別のダイアログ ボックスが表示されるようになります。このダイアログ ボックスで、ユーザーは別のアカウントに切り替えることができます。簡単でしょう。とは言え、ユーザーはパスワードを手作業で入力しなければなりません。前のワークフローに比べるとあまりシームレスではなくなります。エンジニアリングではいつものことですが、解決を目指すユース ケースに最適なメソッドを選択できるかどうかは開発者しだいです。

OneDrive SDK を使用したフォルダーとファイルへのアクセス

クライアントを用意し、認証が済んだら、OneDrive SDK が提供するメソッドをいくつか使って、ドライブ、フォルダー、およびファイルに関する情報を取得します。前回は、アイテム、フォルダー、ファイル、オーディオ、画像、写真、および動画で構成されるファイル構造のしくみに触れました。そこでは、サービスから JSON 応答を受け取り、この応答を対応する C# クラスに手動でシリアル化解除しました。OneDrive SDK では、この手順が必要なくなります。こうした手順はすべて OneDrive SDK が対応します。これを示すために、今回は公式 OneDrive SDK を使用して、前回と同じサンプル アプリを作り直します。

要求の作成

要求を OneDrive REST API に送信するために、OneDrive SDK ではいわゆる「リクエスト ビルダー」で構成されるオブジェクト階層を使用します。たとえば、ユーザーのドライブを取得する場合は _client.Drive を、ルート フォルダーを取得する場合は _client.Drive.Root を指定します。ごく一般的なリクエスト ビルダーは後ほど一覧します。

もちろん、実現可能な組み合わせは数多く存在します。リクエスト ビルダーを取得したら、実際の要求は Request メソッドを使用して作成し、GetAsync や PostAsync など、HTTP メソッドの 1 つを使用して送信します。たとえば、図 2 のコードでは、パス Public/Test/MyFile.txt のファイル メタ情報を取得し、そのコンテンツをストリームとして取得しています。

図 2 テキスト ファイルのコンテンツのダウンロード

var builder = _client.Drive.Root
  .ItemWithPath("Public/Test/MyFile.txt");
var file = await builder
  .Request()
  .GetAsync();
var contentStream = await builder.Content
  .Request()
  .GetAsync();
Debug.WriteLine($"Content for file {file.Name}:");
using (var reader = new StreamReader(contentStream))
{
  Debug.WriteLine(reader.ReadToEnd());
}

ごく一般的な要求の一部

ごく一般的な要求をリクエスト ビルダーとして以下に一覧します。

  • _client.Drive: OneDrive 自体にアクセスし、そのプロパティを取得する要求を作成 (IDriveRequestBuilder)。ドライブが複数ある場合、_client.Drives (IDrivesCollectionRequestBuilder) も使用できます。
  • _client.Drive.Root: OneDrive のルート フォルダーにアクセスする要求を作成 (IItemRequestBuilder)。
  • _client.Drive.Root.Children: ルート フォルダーの子を取得する要求を作成 (IChildrenCollectionRequestBuilder)。この要求を (Request().GetAsync() を使用して) 実行すると、IChildrenCollectionPage が返ります。ここに NextPageRequest というプロパティがあります。子の数が多く、ページに収まらない場合、この NextPageRequest プロパティを使用して次のページのアイテムにアクセスします。
  • _client.Drive.Root.ItemWithPath("Public/Test"): ルート フォルダー内のパス Public/Test のアイテムを取得する要求を作成 (IItemRequestBuilder)。
  • _client.Drive.Root.ItemWithPath("Public/Test/MyFile.txt").Content: MyFile.txt というファイルのコンテンツを取得する要求を作成 (IItemContentRequestBuilder)。
  • _client.Drive.Special.AppRoot: アプリ フォルダーにアクセスする要求を作成 (IItemRequestBuilder)。
  • _client.Drive.Items[SomeId]: ID によってアイテムにアクセスする要求を作成。

今回示しているサンプルで、上記の各リクエスト ビルダーの動作がわかります。

ファイルのアップロード

ファイルのコンテンツのアップロードは、REST API の原則に従って、PUT 要求を使用して行います。要求の違いを除けば、PUT 要求を作成するメカニズムは前回の GET 要求の作成メカニズムとほぼ同じです。実際、必要な作業のほとんどは Stream の取得です。たとえば UWP アプリの場合、アップロードを行うには FileOpenPicker を使用して選択したファイルを Windows ファイル システムから読み込みます。図 3 のコードは、選択したファイルをアプリ フォルダーにアップロードする簡単な例を示しています (エラー処理は省略)。完全な例は、コード ダウンロードにあります。今回の例では、PutAsync メソッドから返されたメタ情報にアクセスし、アイテムの ID を保存します。これは、そのアイテムへのリンクを取得するなど、そのアイテムに後から簡単にアクセスするためです。

図 3 ファイル コンテンツの選択とアップロード

var picker = new FileOpenPicker
{
  SuggestedStartLocation = PickerLocationId.DocumentsLibrary
};
picker.FileTypeFilter.Add("*");
var file = await picker.PickSingleFileAsync();
using (var stream = await file.OpenStreamForReadAsync())
{
  var item = await _client.Drive.Special.AppRoot
    .ItemWithPath(file.Name)
    .Content.Request()
    .PutAsync<Item>(stream);
  // Save for the GetLink demo
  _savedId = item.Id;
}

共有リンクの取得

アイテムの要求を作成したら、CreateLink メソッドを使用してこのアイテムへの一意リンクを OneDrive クライアントから取得します。CreateLink メソッドは IItemCreateLinkRequestBuilder を返します。以下のコードは、ファイルを OneDrive にアップロードする際に、保存しておいた _savedId を使用してリンクを取得する方法を示しています。

link = await _client.Drive
  .Items[_savedId]
  .CreateLink("view")
  .Request().PostAsync();

もちろん、(フォルダーへのリンクを取得するなど) 任意のアイテム要求に CreateLink メソッドを呼び出すことができます。CreateLink で作成した要求はサービスに POST (ポスト) する必要があります。CreateLink メソッドには "view" または "edit" のいずれかのパラメーターが必要です。このパラメーターの値に応じて、読み取り専用リンクまたは読み取りと書き込みが可能なリンクが作成されます。

アイテムの更新

アイテムのメタ情報の更新は、リクエスト ビルダーと UpdateAsync メソッドを使用して行います。たとえば、上記のファイルのアップロード後に、そのファイルの ID (_savedId 属性に保存) を使用して、ファイルの名前を変更できます。このコードを以下に示します。

var updateItem = new Item
{
  Name = "[NewNameHere]"
};
var itemWithUpdates = await _client
  .Drive
  .Items[_savedId]
  .Request()
  .UpdateAsync(updateItem);

アイテムの移動

新しい場所へのアイテムの移動は、プロパティの更新の特殊なケースです。この場合、アイテムの ParentReference プロパティを更新します。このプロパティは OneDrive 内でのアイテムの場所に関する情報を保持します。このプロパティを新しい場所に変更して OneDrive アイテムを更新すると、アイテムが移動します。

次のサンプルでは、先ほどアップロードしたファイル (ID は _savedId 属性に保存) を取得し、最初にアップロードした場所からルート フォルダーに移動します (もちろん、実際のアプリでは、なんらかのエラー処理の追加が必要です)。

var newLocation = await _client.Drive.Root.Request().GetAsync();
var updateItem = new Item
{
  ParentReference = new ItemReference
  {
    Id = newLocation.Id
  }
};
var itemWithUpdates = await _client
  .Drive
  .Items[_savedId]
  .Request()
  .UpdateAsync(updateItem);

アイテムのコピー

アイテムのコピーはアイテムの移動とやや異なります。興味深いことに、アイテムの移動や名前の変更を行うと、その非同期処理の結果は即座に反映され、新しいメタ情報 (新しい場所や新しい名前など) がその Item インスタンスに設定されます。ただし、アイテムのコピーにはある程度の時間が掛かるため、SDK は処理の完了を待たずに、コピー処理の開始直後に IItemCopyAsyncMonitor のインスタンスを返します。

このインスタンスには CompleteOperationAsync というメソッドが 1 つあります。このメソッドは、OneDrive のコピー処理の結果をポーリングし、オプションで進行状況の表示を更新し、コピー処理の完了時にのみ Item インスタンスを返します。そのため、UX としては非常に優れたものになり、コピー処理に並行して別の操作を実行でき、コピー処理の終了をユーザーに通知できます。当然、時間がかかる操作すべてと同様に、ポーリングはキャンセルできます (コピー処理自体はキャンセルされません)。図 4 のコードは、アプリ フォルダーにアップロードしたファイルをルート フォルダーにコピーする方法を示しています。まず、ルート フォルダー自体を取得します。次に、(競合を避ける目的で) 新しい一意名を作成するためにファイルを取得します。最後に、Copy 要求を作成し、サーバーに POST することで実行します。CompleteOperationAsync メソッドを使用して待機する方法と、コピー処理が完了した時点でユーザーに通知する方法に注目してください。

図 4 新しくアップロードした アイテムのルート フォルダーへのコピー

var newLocation = await _client.Drive.Root.Request().GetAsync();
// Get the file to access its meta info
var file = await _client.Drive.Items[_savedId].Request().GetAsync();
var newName = Path.GetFileNameWithoutExtension(file.Name)
  + "-"
  + DateTime.Now.Ticks
  + Path.GetExtension(file.Name);
var itemStatus = await _client
  .Drive
  .Items[_savedId]
  .Copy(
    newName,
    new ItemReference
    {
      Id = newLocation.Id
    })
  .Request()
  .PostAsync();
var newItem = await itemStatus.CompleteOperationAsync(
  null,
  CancellationToken.None);
var successDialog = new MessageDialog(
  $"The item has been copied with ID {newItem.Id}",
  "Done!");
await successDialog.ShowAsync();

新しいフォルダーの作成

OneDrive SDK で可能な処理はたくさんあります。ですが、次に進む前に、もう 1 つ興味深い機能に触れておきます。それは、新しいフォルダーの作成です。この機能が興味深いのは、アイテムを追加してから、要求を OneDrive に送信することによって、コレクション (親フォルダーの子) に作用する点です (図 5 参照)。この場合、使用するメソッド (AddAsync) は HTTP メソッド (GET、POST、PUT など) と直接対応しません。フォルダーを作成すると、newFolderCreated 変数が必要な情報、特にフォルダーの ID を保持します。

図 5 新しいフォルダーの作成

var newFolder = new Item
{
  Name = NewFolderNameText.Text,
  Folder = new Folder()
};
var newFolderCreated = _client.Drive
  .Special.AppRoot
  .Children
  .Request()
  .AddAsync(newFolder);
var successDialog = new MessageDialog(
  $"The folder has been created with ID {newFolderCreated.Id}",
  "Done!");
await successDialog.ShowAsync();

サインオフなど

最後に、クライアントとの連携が完了すると、ユーザーはサインオフを選択できます。これを行うのは簡単で、OneDrive クライアントの SignOutAsync メソッドを使用します。

今回取り上げたメソッドやプロパティ以外にも、SDK にはいくつか機能があります。最新かつ優れたドキュメントを確認するには、以下の 2 つの異なるドキュメント ソースを参照してください。

  • GitHub の C# 用 OneDrive SDK に、多くのドキュメントが掲載されています。bit.ly/1k0V2AL (英語) を参照してください。
  • OneDrive API 自体のドキュメントについては bit.ly/1QniW84 (英語) を参照してください。

エラー処理

サービス呼び出しでなんらかの問題が発生すると、OneDriveException がスローされます。ただし、例外メッセージに実際のエラーに関する情報は含まれていません。代わりに、OneDriveException の (Microsoft.OneDrive.Sdk.Error 型の) Error プロパティにエラーの詳細が格納されています。ここから、エラー メッセージと、この問題の解決に役立つ詳細データを確認できます。

エラーは入れ子になることがあるため、IsMatch メソッドを使用すればエラーの階層のどこかに存在する特定のエラー コードを簡単に見つけ出せます。たとえば、以下のようにします。

theException.IsMatch(OneDriveErrorCode.InvalidRequest.ToString());

SDK ソースの入手とビルド

OneDrive SDK は NuGet パッケージ マネージャーを使用して追加できますが、OneDrive SDK ソース コードを入手するのも役に立ちます。入手した SDK コードに変更や機能を加えることもできます。これを行うのは簡単で、GitHub からソース コードをダウンロードするか、GitHub のソース コードを分岐して取り込み、その分岐コードを修正します (こちらがお勧めです)。

OneDrive SDK ソース コードは、bit.ly/1WX0Y03 (英語) で入手できます。コードを取得して分岐を作成するために、GitHub Desktop (desktop.github.com、英語) など、お好みの GitHub クライアントを使用できます。ローカル コンピューターに OneDrive SDK ソース コードを取得したら、Visual Studio でそのコードをビルドして、たとえばプロジェクト参照としてアプリに追加できます。追加してしまえば、NudGet を使用して OneDrive SDK を追加した場合と同じことが可能です。

まとめ

本連載の第 1 部では、HttpClient、async/await キーワード、JSON シリアライザーを使用して、REST API を呼び出す強力なライブラリをビルドする方法を取り上げました。このような作業も最近は以前に比べてずっと簡単になりましたが、それでもやることは多く、新しい機能を備えるようにライブラリを最新状態に維持しようとするとかなり面倒です。

今回は、別のアプローチを採用しています。つまり、マイクロソフトがビルドした OneDrive SDK を使用する方法です。UWP アプリにライブラリを追加する方法や、ログイン ユーザーの資格情報をユーザーに意識させないで使用する方法、WebAuthenticationBroker を使用することでユーザーが他のアカウントを選択できるようにする方法など、認証のしくみを確認しました。また、非常に便利なアイテムの操作についても触れました。たとえば、パスまたは ID によるアイテム情報の取得、フォルダーの子の取得、ファイルのダウンロード、名前の変更、移動、コピー、アイテムの一意共有リンクの取得などです。

GitHub では OneDrive SDK がオープン ソースとして利用できるようになっており、マイクロソフトが積極的に新しい機能を開発し、問題を解決しています。そのため、UWP アプリから OneDrive にアクセスするのがかつてないほどに簡単になっています。これにより、デバイス間での設定のローミングや、ドキュメントの共有など、さまざまな機能の可能性が開かれます。


Laurent Bugnion は、マイクロソフト テクノロジーの大手企業の 1 つで、ゴールド パートナーでもある IdentityMine のシニア ディレクターです。スイスのチューリッヒを拠点に活動しています。2010 年に Sams から出版された彼の本『Silverlight 4 Unleashed』は、『Silverlight 2 Unleashed』(Sams、2008 年) の進歩した続編に当たります。複数の出版物に記事を書いており、Microsoft MVP としては 9 年目、Microsoft Regional Director としては 2 年目です。また、有名なオープン ソース フレームワークの Windows、WPF、Xamarin 用 MVVM Light の開発者で、MVVM Light に関する人気の Pluralsight リファレンス コースの作成者でもあります。連絡先については、彼のブログ (galasoft.ch、英語) を参照してください。

この記事のレビューに協力してくれたマイクロソフト技術スタッフの Gina Chernoby に心より感謝いたします。