October 2010

Volume 25 Number 10

モバイル アプリケーション - Windows Phone 開発ツールの概要

Joshua Partlow | October 2010

コード サンプルのダウンロード

皆さんの多くと同様に、私は、ここ 1 年の間に "Droid Does" (Droid ならできる) という終末後風でターミネーターのような宣伝をいやと言うほど目にしました。T-Mobile My Touch のコマーシャルに合わせて鼻歌を歌いました。Apple が販売した iPhone 対応アプリケーションの数に関する記事も読みました。

ですが、皆さんの多くと異なるのは、私が、この 1 年間、何度も友人や家族に「確かに、私は携帯電話の仕事をしているけれど、どれも私が携わっている携帯電話ではない」と伝えてきたことです。

ですから、スペインのバルセロナで開催された Mobile World Congress (MWC) で Steve Ballmer と Joe Belfiore が Windows Phone 7 を発表したとき、私の胸は期待に高鳴りました。このことが発表されたとき、米国ワシントン州レドモンドは 2010 年 2 月 15 日の午前 6 時でしたが、私はマイクロソフトの会議室で数百人の同僚と共に (一部パジャマ姿のままの同僚もいました)、Belfiore が携帯電話のデモンストレーションを行うバルセロナからの生中継が開始されるのを固唾を呑んで見守っていました (microsoft.com/japan/presspass/detail.aspx?newsid=3813)。今後も、多くの製品が発表されるのを目の当たりにすると思いますが、Windows Phone 7 の発表は特に印象的な体験として記憶に残ると確信しています。これまでマイクロソフトで働いてきた中で最も胸を躍らせた瞬間であったことは間違いありません。

Windows Mobile アプリケーション開発の可能性について皆さんにも同じくらい胸を躍らせていただけるよう、この記事では、Windows Phone 7 のアプリケーション プラットフォームを紹介します。具体的には、アプリケーション プラットフォームの基本コンポーネントについて説明し、Windows Phone Developer Tools の概要を紹介し、Web サービスにアクセスする Windows Phone アプリケーションの開発方法を解説します。

過去と決別する

Windows Phone 7 では、マイクロソフトは携帯電話市場に変化が起きたことを認めました。携帯電話は、電子メールやドキュメントを読めるだけではなく、生活に欠かせないものとなることも期待されるようになっています。たとえば、携帯電話では、音楽を聴いたり、写真やビデオを共有したり、友人と連絡を取ったりできることが期待されています。ビジネス ユーザーが Facebook を楽しみ、十代の若者がインターネットを楽しんでいるようです。それほど衝撃的なことではありませんが、生活の中で携帯電話に期待されている役割が進化したことを端的に表しています。

潜在的な Windows 7 ユーザーである皆さんが、Belfiore のデモンストレーションをご覧になって Windows Phone 7 を買う気満々でお帰りになったことを願っています。さらに重要なことですが、開発者である皆さんが、アプリケーションの説明に興味を持ってお帰りになったことを願っています。そもそも、新しい OS の開発は、飽和状態のモバイル市場で勝ち抜く条件の 1 つでしかありません。仕事とプライベートを新しく楽しい方法でつなぐ携帯電話をユーザーが求めていることを前提にすると、そのような携帯電話を実現するには、優れたアプリケーションのエコシステムと OS を組み合わせる必要があります。

携帯電話については、皆さんのお気に入りのブログで解説記事が公開されていると思いますので説明しませんが、ここでは開発者である皆さんにとって比較的重要だと私が考えている話題を 2 つ取り上げます。1 つ目は、Windows Phone 7 向けのマイクロソフトのアプリケーション プラットフォーム、2 つ目はアプリケーションの開発に着手する方法についてです。

開発者の新天地

Windows Phone 7 の実態を公開したトップバッターが MWC だとすると、そのトリを飾ったのは Game Developers Conference (GDC) と MIX10 でした。GDC と MIX では、マイクロソフトは Windows Phone 7 のアプリケーション プラットフォームが Silverlight と XNA Framework を基盤にしていることを発表しました。これまでに Windows Mobile 向けのアプリケーションを開発したことがあれば、これが以前のバージョンの OS からの根本的な変更点であることがおわかりになるでしょう。

では、この変更の理由をご説明しましょう。私個人の意見では、マイクロソフトの強みは製品スイートの幅広さであり、その強みが最大限に発揮されるのは、製品どうしが連携したときです。Windows Phone 7 以前の OS 対応のモバイル アプリケーション開発でもマイクロソフト製品が利用されることはありましたが、現在と比較すると、その利用状況は小規模なものでした。

XNA Framework は、デスクトップ、コンソール、およびモバイル環境に拡張可能な、複雑で強力な 2D や 3D のゲームを開発者が作成できるように設計されています。また、Xbox コンソールのグラフィックス機能から Zune HD のセンサー機能やタッチ機能まで、幅広いハードウェアに基づいて設計されています。さらに、オンライン ゲームにも対応することを想定して設計されています。

Silverlight は、Web ベースのメディア アプリケーションや生産性アプリケーションを対象としたマイクロソフトのデスクトップ プラットフォームです。また、Expression Blend と組み合わせた場合には、スタンドアロンでも Web サービスと統合した状態でも、問題なく機能する魅力的な UI を作成できるように設計されたプラットフォームが用意されています。

XNA Framework と Silverlight は、どちらも単独でも強力なプラットフォームです。しかし、携帯電話と組み合わせると、まったく新しい地平が開け、モバイル デバイスの機能を簡単に活用できる美しい UI と魅力的なグラフィックを備えたアプリケーションを開発できるようになります。

Windows Phone 7 の開発サイクルの初期段階で Silverlight アプリケーションと XNA アプリケーションを試してみたとき、私は開発が良い方向に進んでいるとすぐに確信しました。私は、どちらのプラットフォームにも馴染みがなく、マネージ コードにも不案内でしたが、優れた外観のアプリケーションをすばやく開発できたことに感心しました。

新しいアプリケーション プラットフォームで注目に値するもう 1 つの機能は、ハードウェアの標準化とハードウェアにプログラムからアクセスできることです。具体的には、Windows Phone では、開発者が信頼性の高い一貫した方法でアクセスできる中核となる一連のハードウェアがサポートされることが MIX で発表されました。これが重要な理由をご説明しましょう。これまでは、複数の携帯電話で実行するアプリケーションを開発するのは困難で、デバイス固有のアプリケーションを作成する必要がありました。大幅に作り直さない限りアプリケーションが機能しない携帯電話や、アプリケーションに必要な機能がサポートされていないためにアプリケーションがまったく機能しない携帯電話もありました。

Windows Phone 7 では、アプリケーションを実行する携帯電話で位置サービスがサポートされているかどうかは問題になりません。というのも、すべての携帯電話で、サービスがサポートされているからです。携帯電話に加速度計が搭載されているかどうかや加速度計にアクセスできるかどうかも問題になりません。加速度計は、すべての携帯電話に搭載され、一貫した方法でアクセスできます。また、携帯電話がタッチ機能に対応しているかどうかも問題になりません。すべての携帯電話が、この機能に対応し、一貫した方法でアクセスできます。例を挙げればきりがありませんが、どういうことかはおわかりいただけたと思います。

Windows Phone 7 のアプリケーション プラットフォームでは、1 つのアプリケーションを開発すれば良く、手元の携帯電話のテスト結果が他の携帯電話にも適用されることを当てにできます。Windows Phone のハードウェアにも機種による違いは依然として存在しますが、アプリケーションで当てにできる中核となるハードウェア基盤が存在しています。

Windows Phone のハードウェアとアプリケーション プラットフォームのアーキテクチャに関する詳細については、MSDN の「Windows Phone のアプリケーション プラットフォームに関する概要」(msdn.microsoft.com/library/ff402531(v=VS.92)、英語) と「Windows Phone のハードウェア仕様」(msdn.microsoft.com/library/ff637514(v=VS.92)、英語) を参照してください。

カタログ

アプリケーション プラットフォームについて簡単に説明したので、今度はアプリケーションの開発方法について説明しましょう。(この記事の執筆時点ではベータ版ですが) Windows Phone Developer Tools は、Windows Phone デベロッパー ポータル (developer.windowsphone.com、英語) からダウンロードできます。Visual Studio をお持ちでない場合、Windows Phone Developer Tools には Visual Studio 2010 Express for Windows Phone が付属しています。Visual Studio 2010 をお持ちの場合、Visual Studio 2010 に Windows Phone Developer Tools が統合されます。どちらの場合も、Windows Phone 7 向けのアプリケーション開発に必要なすべてのリソースを入手できます。

Windows Phone Developer Tools には、Windows Phone Emulator と Microsoft Expression Blend for Windows Phone が付属しています。ベータ版を見ると最終版で提供される機能がよくわかります。ベータ版で作成したアプリケーションを最終版に移行する際には、コードを変更する必要が発生する可能性もありますが、わずかな変更で済むか、少なくとも変更についての詳細なドキュメントが公開される予定です。

私はベータ版をインストールして、Visual Studio 2010 Express for Windows Phone を使用しています。この記事の例では、このツールを使用します。もう少し簡単なチュートリアルから始めたい場合は、MSDN の「Windows Phone 入門ガイド」(msdn.microsoft.com/library/ff402529(v=VS.92)、英語) を参照してください。

どのようなアプリケーションを作成するのかと言うと、ここでは、皆さんが知りたくてたまらないに違いないお馴染みの hello world アプリケーションや懐中電灯を点灯するアプリケーションではなく、私が取り組んでいるちょっとしたおもしろいプロジェクトの一部を紹介することにしました。

私は MIX で Windows Azure プロジェクトの 1 つ、Microsoft コードネーム "Dallas" (microsoft.com/japan/windowsazure/dallas) についてのセッションに参加しました。基本的に、Dallas は、データの販売を目的とした Web サービスから、アプリケーションのデータを入手することに関心がある開発者を対象としたマーケットプレースです。現在 Dallas のバージョンは Community Technology Preview 2 (CTP2) ですが、オンライン ポータルだけでなく、サービスで提供されているコンテンツを試してみるために試用版として提供されている多数の無償データ ソースも利用できます。現在利用できるプロバイダーの数は多くありませんが、試せるコンテンツは多数あります。個人的に NASA が提供している火星探査ミッションのイメージ データに興味があるので、火星探査車の写真を閲覧できる Windows Phone アプリケーションを作成することにしました。

この記事で使用しているダウンロード可能なコードは実用的なサンプルですが、コードを実行するには Dallas CTP に登録してアカウント キーとユーザー ID (この記事のコードでは空白のまま) を入手する必要があるのでご注意ください (microsoft.com/japan/windowsazure/developers/dallas)。

プロジェクトを作成する

火星探査車のイメージ ビューアーを作成するには、まず、Windows Phone アプリケーション プロジェクトを作成します。Visual Studio 2010 Express for Windows Phone を起動すると、標準的な Visual Studio のスタート ページが表示されます。スタート ページで [New Project] (新しいプロジェクト) を選択すると、多数のさまざまなプロジェクト テンプレートの中からテンプレートを選択できます。Windows Phone Developer Tools しかインストールしていない場合は、[Silverlight for Windows Phone] (Windows Phone 向け Silverlight) と [XNA Game Studio 4.0] (XNA Game Studio 4.0) だけが表示されます。

ここでは Silverlight 向けテンプレートの [Windows Phone Application] (Windows Phone アプリケーション) を選択して、MarsImageViewer という名前を付けました。テンプレートを選択して名前を指定すると、Visual Studio で自動的にプロジェクトが生成されます。

これまでに Windows Presentation Foundation (WPF) または Silverlight で作業したことがあれば、表示される画面に驚くことはないでしょう。洗練された携帯電話のスキンが表示されたデザイン サーフェイス、基本的なコントロールが用意されたツールボックス、および多数の XAML ファイルと各 XAML ファイルに関連付けられている C# の分離コード ファイルが表示されます (図 1 参照)。Windows の Silverlight や XNA と、Windows Phone の Silverlight や XNA の厳密な違いについては、MSDN の「Windows Phone の Silverlight と XNA のフレームワークの概要」(msdn.microsoft.com/library/ff402528(v=VS.92)、英語) を参照してください。

Visual Studio で作成した最初の Windows Phone プロジェクト

図 1 Visual Studio で作成した最初の Windows Phone プロジェクト

XAML を理解する

Silverlight と同様に、Windows Phone アプリケーションのテンプレートには App.xaml ファイルと MainPage.xaml ファイルが用意されています。これらのファイルはアプリケーションの中核となるものです。この 2 つのファイルの機能は、基本的に Silverlight の場合と同じなので、ここでは詳しく説明しません。ただし、アプリケーションの作成について説明する前に主な違いを 2 つ紹介しておきます。

1 つ目は、既定の App.xaml ファイルについてです。自動生成コードの大部分はデスクトップ向け Silverlight プロジェクトのコードと同じですが、既定の App.xaml ファイルにには、PhoneApplicationService オブジェクトを含む次のようなセクションが追加されています。

<shell:PhoneApplicationService 
  Launching="Application_Launching" Closing="Application_Closing" 
  Activated="Application_Activated" Deactivated="Application_Deactivated"/>

Windows Phone Developer Tools のベータ版には、アプリケーションの動作を指定する新しい実行モデルがあります。このセクションは App.xaml.cs の分離コードと連動し、実行モデルが公開される一元的な場所です。Windows Phone アプリケーションとこのオブジェクトの動作の詳細については、MSDN の「Windows Phone の実行モデル」(msdn.microsoft.com/library/ff769557(VS.92)、英語) を参照してください。

2 つ目は、MainPage.xaml ファイルについてです。このファイルは、今回のアプリケーションの作成を開始する場所です。よく見ると、ファイルの大半は Silverlight と同じですが、コメント アウトされた Application Bar (アプリケーション バー) のセクションがあります。アプリケーション バーは、ボタンやメニュー項目の公開に使用できるシステム コントロールです。手動で作成する手間が省けるだけでなく、携帯電話で使用する主なアプリケーションのアプリケーション バーの外観および動作とまったく同じなので、アプリケーション バーを使用すると携帯電話操作の一貫性を確保できます。この記事では、このテンプレートのマークアップを変更して独自のアプリケーション バーを作成しますが、C# を使用するページに対応したアプリケーション バーを作成することもできます (詳細については、msdn.microsoft.com/library/ff431786(VS.92) (英語) を参照してください)。

アプリケーション バーを作成する

アプリケーション バーを作成するには、まず、使用するアイコンを決める必要があります。独自のアイコンを作成することも、開発ツールに付属しているアイコンを使用することもできます。既定では、64 ビット版の Windows の場合、付属のアイコンは、C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Icons\、32 ビット版の Windows の場合は C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Icons\ にあります。付属のアイコンは携帯電話の外観に合っているので、確認してみることをお勧めします。

お好みのイメージを選択したら、プロジェクトに Images フォルダーを作成し、このフォルダーにアイコンを追加します。続いて、各アイコンのプロパティを設定します。[Build Action] (ビルド アクション) プロパティを [Content] (コンテンツ) に、[Copy to Output Directory] (出力ディレクトリにコピー) を [Copy always] (常にコピーする) に設定します (図 2 参照)。

プロジェクトへのイメージ リソースの追加

図 2 プロジェクトへのイメージ リソースの追加

次に、アプリケーション バーのセクションのコメント解除し、アプリケーションに合わせて変更します。ここでは、2 つのボタンとボタンに関連付けられたイベント ハンドラーを作成する必要があります。具体的には、次の写真を取得するボタンと、前の写真を取得するボタンを作成しました。また、XAML にクリック イベントを追加し、Visual Studio でイベント ハンドラーを生成できるようにしました。アプリケーション バーの XAML は、図 3 のコードのようになります。

図 3 アプリケーション バーの構成

<phone:PhoneApplicationPage.ApplicationBar>
  <shell:ApplicationBar 
    IsVisible="True" IsMenuEnabled="False">
    <shell:ApplicationBarIconButton 
      x:Name="appbar_BackButton" 
      IconUri="/Images/appbar.back.rest.png" 
      Text="Back" 
      Click="appbar_BackButton_Click">
    </shell:ApplicationBarIconButton>
    <shell:ApplicationBarIconButton 
      x:Name="appbar_ForwardButton" 
      IconUri="/Images/appbar.next.rest.png" 
      Text="Next" 
      Click="appbar_ForwardButton_Click">
    </shell:ApplicationBarIconButton>
  </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

また、分離コードの作業に取り掛かる前に、アプリケーションのタイトルとページ名を指定し、MainPage.xaml のルート グリッドにイメージ コントロールを追加しました (図 4 参照)。この結果、デザイン サーフェイスは 図 5 のようになります。デザイン サーフェイスには、4 つの円が表示された空のアプリケーション バーが表示されています。

図 4 MainPage.xaml

<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="24,24,0,12">
  <TextBlock x:Name="ApplicationTitle" 
    Text="MarsImageViewer" 
    Style="{StaticResource PhoneTextNormalStyle}"/>
  <TextBlock x:Name="PageTitle" 
    Text="Images" 
    Margin="-3,-8,0,0" 
    Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>

<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentGrid" Grid.Row="1">
  <Image Height="300" 
    HorizontalAlignment="Left" 
    Margin="36,104,0,0" 
    Name="MarsImage" 
    Stretch="Fill" 
    VerticalAlignment="Top" 
    Width="400" />
</Grid>

構成したデザイン サーフェイス

図 5 構成したデザイン サーフェイス

アプリケーション インターフェイスを定義したので、今度は火星探査車のイメージを取得します。Dallas のポータルは使いやすさを重視して設計されており、クエリを試すことができます。また、適切な Web サービスの URL が提供され、パラメーターの追加方法が提示され、クエリの適切なヘッダー情報が提供されます。

このポータルを通じて、NASA の Web サービスでは、パラメーターに基づいてイメージ情報をクエリしたり、イメージ ID を指定して特定の JPEG イメージを取得できることがわかりました。つまり、このプログラムでは、2 つの操作が必要になります。1 つ目は、イメージ ID を含むイメージ情報をクエリすることです。2 つ目は、返された XML を解析してイメージ ID を取り出すことです。イメージ ID を使用すると、特定のイメージを取得できます。

Dallas に問い合わせる

では、始めましょう。既定の MainPage.xaml.cs ファイルでは、次のように 3 つの名前空間の using ステートメントを追加しました。

using System.Xml.Linq;
using System.IO;
using System.Windows.Media.Imaging;

次に、System.Xml.Linq DLL への参照を追加しました。これを行うには、Solution Explorer (ソリューション エクスプローラー) の [References] (参照設定) を右クリックして [Add Reference] (参照の追加) をクリックし、System.Xml.Linq を選択して、[OK] をクリックします。System.Xml.Linq を使用すると、ストリームから XML を読み込んで LINQ 経由でその XML をクエリするのに役立つクラスにアクセスできます。LINQ に詳しくない場合でも心配しないでください。この例では、最小限の LINQ to XML しか使用しておらず、LINQ に関する詳細情報は、いつでも MSDN で参照できます。

このページには、次のような 2 つのプライベート変数も作成しました。XElement オブジェクトの IEnumerable 列挙型の entries 変数は LINQ to XML クエリ結果の格納に使用し、integer 型の index 変数は表示している写真の追跡に使用します。続いて、MainPage コンストラクターを変更して、index 変数を 0 で初期化し、getImageIDs 関数を呼び出しました。

private IEnumerable<XElement> entries;
  private int index;

  // Constructor
  public MainPage() {
    InitializeComponent();

    index = 0;
    getImageIDs();
  }

getImageIDs 関数は、Web サービスからイメージ情報の取得を開始することを目的としています。この関数では、Web サービスの URL と WebClient オブジェクトを使用して、イメージ情報の非同期要求を開始します。

private void getImageIDs() {
  Uri serviceUri = new Uri("https://api.sqlazureservices.com/NasaService.svc/MER/Images?missionId=1&$format=raw");
  WebClient recDownloader = new WebClient();
  recDownloader.Headers["$accountKey"] = "<Your account key>";
  recDownloader.Headers["$uniqueUserID"] = "<Your user ID>";
  recDownloader.OpenReadCompleted += 
    new OpenReadCompletedEventHandler(recDownloader_OpenReadCompleted);
  recDownloader.OpenReadAsync(serviceUri);
}

わかりやすくするために、ここでは missionId パラメーターを 1 に設定しています。この 1 という値は "オポチュニティ" ミッションに対応しています。ですが、このようなパラメーターは、ユーザーが動的に定義できるのが理想的です。

非同期要求にはハンドラーが必要です。このハンドラーは、データの要求が完了したときに呼び出されます。呼び出されたハンドラーでは、返されたストリームと基本的な LINQ to XML を使用して、返された XML に含まれるすべての entry タグにアクセスします。entry タグは、各イメージ レコードの開始タグです。

private void recDownloader_OpenReadCompleted(
  object sender, OpenReadCompletedEventArgs e) {
  if (e.Error == null) {
    Stream responseStream = e.Result;
    XNamespace ns = "http://www.w3.org/2005/Atom";
    XElement marsStuff = XElement.Load(responseStream);
    entries = marsStuff.Elements(ns + "entry");
    string imageID = 
      (string)entries.ElementAt<XElement>(index).Element(
      ns + "title").Value;
    getImage(imageID);
  }
}

返されたコレクションを、先ほど宣言した XElement オブジェクトの IEnumerable 列挙型の entries 変数に格納します。最後の LINQ to XML を使用して、ハンドラーでは entries 変数の最初の XElement オブジェクトに設定された title タグの値を取得します。この XML スキーマの title タグの値はイメージ ID に対応しているので、この値を getImage 関数に渡します。

getImage 関数は getImageIDs 関数に似ています。違いは、使用する Web サービスの URL だけです。getImage 関数では、ID パラメーターで特定したイメージのストリームを非同期に取得します。このストリームを関数のハンドラーで使用して、MainPage.xaml で定義した写真用コントロールのソースを設定します (図 6 参照)。

図 6 イメージの取得

private void getImage(string ID) {
  Uri serviceUri = new Uri(
    "https://api.sqlazureservices.com/NasaService.svc/MER/Images/" + 
    ID + "?$format=raw");
  WebClient imgDownloader = new WebClient();
  imgDownloader.Headers["$accountKey"] = "<Your account key>";
  imgDownloader.Headers["$uniqueUserID"] = "<Your user ID>";
  imgDownloader.OpenReadCompleted += 
    new OpenReadCompletedEventHandler(imgDownloader_OpenReadCompleted);
  imgDownloader.OpenReadAsync(serviceUri);
}

private void imgDownloader_OpenReadCompleted(
  object sender, OpenReadCompletedEventArgs e) {
  if (e.Error == null) {
    Stream imageStream = e.Result;
    BitmapImage imgsrc = new BitmapImage();
    imgsrc.SetSource(imageStream);
    MarsImage.Source = imgsrc;
  }
}

ボタンを完成する

ここまで来れば、アプリケーションを作成する残りの作業は非常に簡単で、アプリケーション バーのボタン用に自動生成されたイベント ハンドラーを実装するだけです。これらのボタンは、火星探査車の次の写真や前の写真に切り替えるのに使用します。ご覧のとおり、基本的には getImage 関数を再利用し、entries コレクションに含まれている現在のレコードのインデックスを変更するロジックを追加しただけです。[Back] ボタンのハンドラーは次のとおりです。

private void appbar_BackButton_Click(
  object sender, EventArgs e) {
  if (index > 0) {
    index--;
    XNamespace ns = "http://www.w3.org/2005/Atom";
    string imageID = (string)entries.ElementAt<
      XElement>(index).Element(ns + "title").Value;
    getImage(imageID);
  }
}

[Next] ボタンのハンドラーもほとんど同じですが、次に示すインデックスの処理が異なります。

if ((index + 1) < entries.Count<XElement>()) {
  index++;
  ...

これで、付属の Windows エミュレーターを使用してプログラムを実行できるようになりました。[Standard] (標準) ツールバーの対象デバイスを選択するメニューで、[Windows Phone 7 Emulator] (Windows Phone 7 Emulator) を選択します。F5 キーを押すと、プログラムがビルドされてエミュレーターに配置されます (図 7 参照)。

エミュレーターでのアプリケーションの実行

図 7 エミュレーターでのアプリケーションの実行

最終版の公開に向けて

このサンプルはかなり単純なものでしたが、Windows Phone Developer Tools がどのようなもので、Windows Phone で実行するアプリケーションの開発がどれほど簡単であるのかを、おおまかに理解していただければさいわいです。Windows Phone 7 は大きな可能性を秘めているので、ぜひ、詳しく調べる時間を作ることをお勧めします。

この記事では、アプリケーション プラットフォオームに備わっている機能の概要を簡単に紹介したに過ぎません。この記事で説明した単純なアプリケーションを考えてみてください。このアプリケーションに 1 つのボタンと約 12 行のコードを追加すると、Microsoft.Xna.Framework.Media 名前空間の MediaLibrary クラスを使用して、特定の写真をメディア ライブラリに保存できます (詳細については、msdn.microsoft.com/library/ff769549(v=VS.92) (英語) を参照してください)。

もちろん、Windows Phone の Silverlight ベースのアプリケーションでは、XNA API を使用することが可能です。ただし、アプリケーションで Silverlight と XNA API を組み合わせる方法については、その他の手法と共に、今後の記事で説明する予定です。特定の分野に的を絞った詳細な記事をお待ちください。また、MSDN のドキュメントとサンプル (msdn.microsoft.com/library/ff402535(v=VS.92)、英語) もご確認ください。

Joshua Partlow は、Windows Phone 7 チーム所属のプログラミング関連のライターです。Windows Phone を製作する OEM を対象とした、携帯電話の製作工程、デバイス ドライバーの開発、およびアプリケーション開発に関するドキュメントの執筆に携わっています。

この記事のレビューに協力してくれた Windows Phone 7 チームの技術スタッフに心より感謝いたします。