Windows Phone
Windows Phone 7.1 アプリを Windows Phone 8 にアップグレードする
Michael Crump
Windows Phone 7.1 のプロジェクトをアップグレードして Windows Phone 8 の新機能を活用している開発者もいますが、何をアップグレードするかや、アップグレードして使用できるようになる新たなツールや機能について疑問を抱いている開発者もいます。今回は、Windows Phone 7.1 から Windows Phone 8 への移行が、想像以上に簡単なことを示します。
新しいテンプレート
テンプレートを見ていく前に、まずアップグレードしてどのような現実問題を解決しようとしているかを自分自身に問いかけてください。主に XNA に取り組んでいるゲーム開発者は、マイクロソフトがもはや XNA を積極的に開発していないことから、Direct3D への移行を考えているでしょう。XNA アプリを作成するオプションも残っていますが、Windows Phone 8 の新機能は利用できません。
Windows Phone 8 に Internet Explorer 10 がプレインストールされることから、ネイティブ Web 開発者もついに仲間に加われるようになります。しかし、ゲームと Web 開発はさておき、Windows Phone 8 には XAML と C# や Visual Basic を使用する開発者向けに多くの新機能が用意されています。
以下は Windows Phone 8 SDK に付属する新しいテンプレートです。
- Windows Phone XAML および Direct3D アプリ: ネイティブ コンポーネントを使って Windows Phone マネージ アプリを作成するためのプロジェクトです。初めて起動すると、Windows Phone 8 プロジェクトと C++ の Windows ランタイム (WinRT) コンポーネントの 2 つのプロジェクトが用意されているのがわかります。
- Windows Phone HTML5 アプリ: HTML コンテンツを主に使用する Windows Phone アプリを作成するためのプロジェクトです。このテンプレートは、Windows Phone の JavaScript 用 Windows ライブラリ (WinJS) バージョンと混同されがちですが、WinJS バージョンではありません。単純に WebBrowser コントロールを使用して HTML5 コンテンツを表示します。
- Windows Phone 単体テスト: このプロジェクトには Windows Phone アプリをテストするために使用できる単体テストが含まれています。このテンプレートは Visual Studio Update 2 RTM 版リリースをインストールすると追加されます。
既存のプロジェクトのアップグレード
もちろん、上記の新しいプロジェクト テンプレートは新しいアプリの開発に役立ちますが、既に Windows Phone 7.1 でビルドされている既存の XAML ベース アプリはどうでしょう。さいわい、Visual Studio 2012 で Windows Phone 7.1 プロジェクトを右クリックして [Windows Phone 8.0 にアップグレード] をクリックすれば、Windows Phone 7.1 アプリを Windows Phone 8 向けにアップグレードできます。このとき、いったんアップグレードすると元に戻せないことと、参照先のプロジェクトは更新されないことを警告するメッセージが表示されます。アップグレードする前に必ずバックアップしておくことをお勧めします。また、[プロジェクトのプロパティ]、[アプリケーション] の順にクリックし、ドロップダウン リストの [Windows Phone OS 8.0] を選択して、行った変更を保存する方法でも Windows Phone 8 にアップグレードできます。
まだ Windows Phone 7 プロジェクトが残っている場合は、Windows Phone 8 にアップグレードする前に Windows Phone 7.1 にアップグレードすることを促すメッセージが表示されます。ここでも、プロジェクトをバックアップしておくことをお勧めします。
アプリを Windows Phone 8 にアップグレードしたら、新しいツールや SDK の機能を使用できるようになります。ここで、Windows Phone 8 の新しいエミュレーター オプションをすべて見ておくことにします。
新しいエミュレーター オプション
Windows Phone 7.1 で配置できるのは、対象画面サイズが 480 x 800 (WVGA) の 2 種類のエミュレーターのみでした。2 つのエミュレーター イメージの唯一の違いは RAM の容量 (512 MB または 256 BM) です。Windows Phone 8 では 768 x 1280 (WXGA) と 720 x 1280 (720 ピクセル) という 2 つの新しい画像サイズが追加されています。また、Windows Phone 7.8 向け Windows Phone SDK 更新プログラムをダウンロードして (詳細については、https://www.microsoft.com/ja-jp/download/details.aspx?id=36474を参照してください)、Windows Phone 7.8 デバイスでアプリの動作をテストするために新たなエミュレーターを追加することもできます。"Windows Phone XAML および XNA アプリ" テンプレートは Windows Phone OS 7.1 を対象とするため、このテンプレートで作成したアプリも Windows Phone 8 エミュレーターでテストできます。図 1で、利用可能な従来のエミュレーターと新しいエミュレーターをすべて確認できます。
図 1 Windows Phone 8 のエミュレーター オプション
さまざまなエミュレーターを利用できるため、物理ハードウェアの入手にこだわらなくても、Windows Phone7 や 8 の多数のデバイスでアプリの動作を確認できます。Windows Phone 8 の新しいエミュレーターは実際の仮想マシン (VM) で、Windows Phone 8 SDK に追加された最大の強化点の 1 つです。
注: これらの新しいエミュレーターを使用するには、Windows 8 Pro または Enterprise にのみ搭載される Hyper-V が必要です。詳細については、「Windows 電話エミュレーターのシステム要件」(https://msdn.microsoft.com/ja-jp/library/windowsphone/develop/ff626524(v=vs.105).aspx) を参照してください。
強力なプロセッサを備えた最新 PC を使用している場合、実際のパフォーマンスを正しく測るため、Marketplace に公開する前に物理デバイスでアプリをテストするようにします。
新しいテンプレートがさまざまな開発者にどのように役立つかを説明し、新しいエミュレーター オプションを紹介しました。また、既存のプロジェクトを簡単に Windows Phone 8 にアップグレードできることも確認しました。ここからは Windows Phone 7 の開発者が直面していた他の重要な問題に取りかかることにしましょう。
シミュレーション ダッシュボード
Windows Phone アプリの実行中に、応答速度の低下、インターネットの接続障害、通話呼び出しの着信、電話がロックされた後アプリが状態の復元に失敗するなど、さまざまな事象によりアプリのユーザー エクスペリエンス (UX) が中断します。Windows Phone 7.1 ではおそらく、このような状況のシミュレーションを行うコードを記述する必要がありました。これからは、まったく新しいシミュレーション ダッシュボードを使用してこのような状況に対処できるようになります (図 2 参照)。
図 2 Windows Phone 8 SDK に含まれるシミュレーション ダッシュボード
シミュレーション ダッシュボードにアクセスするには、Visual Studio 2012 で [ツール]、[シミュレーション ダッシュボード] の順にクリックします。シミュレーション ダッシュボードを使用することで、アプリを Marketplace に公開する前に、さまざまな状況下でどのようなパフォーマンスを発揮するかをテストできます。
ネットワーク シミュレーションを有効にしてネットワーク速度を選択すると、Wi-Fi はもちろん、さまざまな移動体データ ネットワークをテストしたり、ネットワークを利用できないシナリオをテストできます。特に興味深いのが、パケット損失率とネットワーク待機時間に影響を与える [シグナルの強度] オプションです。このようなオプションを利用して、さまざまなシナリオで高いパフォーマンスを発揮する Windows Phone 8 アプリを作成できるようになります。
Windows Phone 7.1 または 8 を対象とするアプリは、ロック画面が有効になると非アクティブになり、デバイスのロックが解除されると再度アクティブになります。シミュレーション ダッシュボード内には、簡単に画面をロックしたり、解除したりする機能があり、アプリでどのようにアクティブ化や非アクティブ化が処理されるかをテストできます。オプションで、F12 キーを押してもロック画面は表示されます。
最後に、アラーム、電話、テキストメッセージ、トースト通知のシミュレーションを行う [アラームのトリガー] を使用してみてください。ここでも、この機能を利用して、アプリでどのようにアクティブ化や非アクティブ化が処理されるかをテストできます。
Windows Phone アプリの分析
シミュレーション ダッシュボードは、携帯電話でアプリが実行された後現実に起こり得るシナリオを再現するのに役立ちますが、アプリのパフォーマンスの再現には役立ちません。こういった場面では [デバッグ]、[Windows Phone アプリケーション分析の開始] の順にクリックして Windows Phone のアプリ分析を利用します。
このツールではアプリを監視し、起動時間、応答性を評価し、プロファイリングを行うことができます。また、アプリの実行関連の問題とメモリ関連の問題をそれぞれ評価するのにも有効です。プロファイリングの実行オプションには、ビジュアル プロファイリングやコード サンプリングなどを実行できる詳細設定があります。プロファイリングのメモリ オプションでは、メモリ アロケーション スタックやオブジェクト参照を収集できます。これらのオプションを使用すると、タイムスタンプが設定された .sap ファイルがプロジェクトに追加されるだけでなく、Visual Studio 2012 にグラフが表示されます。生成されたグラフにより、特定の開始時刻や停止時刻の状態を詳しく調べ、Visual Studio 2012 が生成した監視結果を確認することができます。Windows Phone のアプリ分析ツールは、品質保証プロセスに不可欠な機能です。
ストア テスト キット
さまざまなユーザー シナリオでアプリをテストし、Windows Phone のアプリ分析キットの助けを借りてパフォーマンスをテストしたら、そのアプリが Windows Phone ストアで認定を受けられるかどうかを確めるテストを行う必要があります。このキットを使ってアプリのエラーが見つかれば、たった 30 分間で数日の損失を補えるので、これは重要な手順です。
アプリを右クリックして [ストア テスト キットを開く] をクリックすると、簡単にこのキットにアクセスできます。Windows Phone 7.1 にも Marketplace Test Kit というの同じ機能が含まれていますが、Windows Phone 8 を対象とした新しいテストが追加され、既存のテストも強化されています。
初回起動時、画面下部に「ストアのテスト ケースが更新されました。更新されたテスト ケースをインストールしますか?」というメッセージが青い背景に表示されることがありますが、[更新] をクリックすることで、新しいテストや強化されたテストをダウンロードできます。これは、扱っているのが常に利用可能な最新のテストとわかるため便利です。
画面の左側に、[アプリケーションの詳細]、[自動テスト]、および [手動テスト] という 3 つのタブがあります。[アプリケーションの詳細] では、画像リソースが Windows Phone ストアのガイドラインに従っていることを確認します。確認できる画像には、ストア タイルをはじめとして、WVGA、WXGA、および 720 ピクセルのスクリーンショット (プロジェクトがその解像度をサポートする場合) などがあります。[自動テスト] では XAP パッケージの要件、アイコン、およびスクリーンショットのチェックを行います。この自動テストは [テストの実行] ボタンをクリックするだけで起動します。一番下のタブは複数の手動テストが含まれ、このコラムの執筆時点では実行可能な 61 個の手動テストが存在します。テストに合格したかどうかは手動で指定する必要がありますが、充実したドキュメントに指定方法が示されています。複数デバイスのサポート、アプリの終了処理、応答性なども手動テストで行います。
容易なローカライズ
Windows Phone 7 では、多くのアプリ開発者が自分のアプリをローカライズするチャンスを逃していました。これは、ある言語を別の言語に翻訳する助けとなる機能がほとんど、またはまったくなかったことが原因です。最近リリースされた多言語アプリ ツールキットと新しいプロジェクト テンプレートにより、この問題が解消されます。
既定の Windows Phone 8 テンプレートでは、ローカライズのガイドが MainPage.xaml ファイルにコメントとして組み込まれ、このテンプレートを使用するアプリはヘルパー クラスと Resources フォルダーを持つ構造になります。マイクロソフトが追加したこの多言語アプリ ツールキットは、もともと Windows 8 に入っていたキットです。Visual Studio 2012 用多言語アプリ ツールキットは (https://msdn.microsoft.com/ja-jp/windows/apps/hh848309.aspx) からインストールできます。インストールも簡単ですが、有効にするのも簡単で [ツール]、[多言語アプリ ツールキットの有効化] の順にクリックするだけです。プロジェクトで多言語アプリ ツールキットを有効にすると、[プロジェクト]、[翻訳言語の追加] の順にクリックして、使用できる言語を表示できます (図 3 参照)。
図 3 多言語アプリ ツールキットの [翻訳言語] ダイアログ ボックス
使用する言語のチェック ボックスをオンにして [OK] をクリックします。[Resources] フォルダーに該当する言語ファイルが自動的に追加されます。特に留意する必要のあるファイルは、.xlf 拡張子が付いたファイルです。.xlf ファイルは、業界標準の XML ローカライズ インターチェンジ ファイル形式 (XLIFF: XML Localization Interchange File Format) のファイルです。このファイル形式により、あらゆる擬似翻訳を細かく管理できます。.xlf ファイルをダブルクリックすると、Multilingual Editor が起動します。Multilingual Editor では、単純に [翻訳] ボタンをクリックするだけで、別の言語に翻訳できます。この例は図 4 で確認できます。
図 4 言語間の翻訳
図 4を見ると、あらかじめいくつかの単語が自動翻訳されています。翻訳が完了したら、サイン オフしたり、翻訳者にレビューを依頼することができます。この例では、レビューが必要なのは MEINE TELERIK APP だけでした。レビューが必要な理由は Telerik という単語が翻訳リソースに含まれていなかったためです。翻訳者であれば Telerik のスペルがドイツ語と英語で同じだとわかるので、この翻訳には変更を加える必要がないとわかり、言語のサポートを追加して、ファイルを保存できます。
別の言語サポートが追加されたことを簡単にテストするには、MainPage.xaml ファイルで次のコード行を使用してアプリ タイトルを変更します。
変更したら、電話の言語をその言語に設定します。今回の例でドイツ語を選択したところ、アプリのタイトルが MEINE TELERIK APP と表示されました。
共通コアの利用
Windows 8 のリリースにより、Windows Phone 8 開発者も共通に使用できるコアが登場しました。Mirosoft .NET Framework 4.5 で async と await がサポートされ、分離ストレージが簡単に利用できるようになったことは大きな進化です。
Windows Phone 7.1 で分離ストレージにファイルを書き込むには、一般に図 5 に示すコードを記述していました。
図 5 Windows Phone 7.1 での分離ストレージへのファイルの書き込み
private void WriteFileToIsolatedStorage(string fileName,
string fileContent)
{
using (IsolatedStorageFile isolatedStorageFile =
IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isolatedStorageFileStream =
isolatedStorageFile.CreateFile(fileName))
{
using (StreamWriter streamWriter =
new StreamWriter(isolatedStorageFileStream))
{
streamWriter.Write(fileContent);
}
}
}
}
図 5 のコードでは、Windows 8 にはない System.IO.IsolatedStorage 名前空間を使用しています。Windows 8 と Windows Phone 8 では、パフォーマンス ボトルネックを防ぎ、アプリの全体的な応答性を高めるため、System.IO.IsolatedStorage 名前空間の代わりに Windows.Storage と async/await パターンを使用します。下記は、共通コアを利用して Windows Phone 8 でまったく同じ呼び出しを記述する方法の例です。
public async Task WriteFileToIsolatedStorage(
string fileName, string fileContent)
{
IStorageFolder applicationFolder =
ApplicationData.Current.LocalFolder;
IStorageFile storageFile = await applicationFolder.CreateFileAsync(
fileName, CreationCollisionOption.ReplaceExisting);
using (Stream stream = await storageFile.OpenStreamForWriteAsync())
{
byte[] content = Encoding.UTF8.GetBytes(fileContent);
await stream.WriteAsync(content, 0, content.Length);
}
}
Windows 8 で頻繁に使用するもう 1 つの名前空間が HttpClient です。Windows Phone 8 SDK では、依然として既定で WebClient クラスが使用されますが、マイクロソフトは NuGet 経由で HttpClient クラスを提供しています。単純に Microsoft.Net.Http を検索して、NuGet パッケージをインストールすれば、Windows Phone 8 はもちろん Windows 8 でも動作する次のスニペットのようなコードを記述できます。
private async void Button_Click(object sender, RoutedEventArgs e)
{
var httpClient = new HttpClient();
var request = await httpClient.GetAsync(new Uri(
"https://www.microsoft.com/", UriKind.RelativeOrAbsolute));
var txt = await request.Content.ReadAsStringAsync();
// Do something with txt, such as MessageBox.Show(txt)
}
重要な新機能
ここまでは、Windows Phone 8 への移行を容易にするのに役立つさまざまな方法を説明してきました。ここからは Windows Phone 8 アプリに不可欠ないくつかの新機能を見ていきます。
タイルの新しい種類: Windows Phone 7.1 に備えられているのはフリップ タイル 1 種類だけで、サイズも 173 x 173 (普通サイズのタイルとも呼ばれる) の 1 種類だけです。Windows Phone 8 では、タイルに新たな種類とサイズが導入されます。
- フリップ タイル: これは前後に反転するタイルで、新しいタイル サイズが追加されたこと以外は Windows Phone 7.1 とまったく同じものです。
- アイコン タイル: 主に Windows Phone の現代的外観のデザイン原理に基づいています。
- サイクル タイル: 最大 9 つの画像が順番に表示されます。
タイル サイズの比較を図 6に示します。
図 6 さまざまな種類のタイルのファイル サイズの比較
タイル サイズ | フリップとサイクルのサイズ (ピクセル) | アイコンのサイズ (ピクセル) |
小 | 159 x 159 | 110 x 110 |
中 | 336 x 336 | 202 x 202 |
大 | 691 x 336 | なし |
タイルは、[WMAppManifest.xml] ファイルの [タイル テンプレート] ボックスから選択し、適切な画像を追加すれば簡単に設定できます。また分離コードファイルでタイルを設定することもできます。Windows Phone 8 用のフリップ タイル テンプレートの詳細については、デベロッパー センター (https://msdn.microsoft.com/ja-jp/library/windowsphone/develop/jj206971(v=vs.105).aspx) を参照してください。
ロック画面と通知: Windows Phone 7.1 で表示できる通知は、電子メール、テキスト メッセージ、電話の着信などの通知だけでした。今後ユーザーは、ロック画面の背景画像にサードパーティ製のアプリを使用でき、上記の通知に似たカスタム通知も使用できます。背景画像を設定するには、画像を画像コンテンツ タイプのフォルダーに追加し、WMAppManifest.xml ファイルを改訂してアプリを背景として宣言します。WMAppManifest.xml ファイルを右クリックし、[ファイルを開くアプリケーションの選択] をクリックして [XML (テキスト) エディター] を選択し、下記の拡張を追加します。
次に、図 7 に示すコード スニペットを呼び出します。
図 7 電話のロック画面の背景画像の設定
private async void btnLockScreenImage_Click_1(
object sender, RoutedEventArgs e)
{
if (!LockScreenManager.IsProvidedByCurrentApplication)
{
await LockScreenManager.RequestAccessAsync();
}
if (LockScreenManager.IsProvidedByCurrentApplication)
{
Uri imageUri=new Uri(
"ms-appx:///LockScreen.jpg", UriKind.RelativeOrAbsolute);
Windows.Phone.System.UserProfile.LockScreen.SetImageUri(imageUri);
}
}
最初にそのユーザーに背景を変更するアクセス許可があるかどうかをチェックします。アクセス許可がなければアクセス許可を要求する GUI を表示してから、画像パスの URI を作成し、Windows.Phone.System.UserProfile.LockScreen を使用してその URI をセットします。
また、通知を追加して、Windows Phone 8 デバイスの通知領域にメッセージや着信などのアイコンや件数を表示することもできます。この機能の詳細については、「Windows Phone 8 のロック画面の通知」(https://msdn.microsoft.com/ja-jp/library/windowsphone/develop/jj207048(v=vs.105).aspx) を参照してください。
音声認識: 最も魅力的な新機能の 1 つが音声認識です。Windows Phone 8 SDK には複数の音声認識コンポーネントが含まれています。
- 音声合成: テキストを音声に変換して、電話のスピーカー、ヘッドホン、または Bluetooth 接続経由でユーザーに伝えることができます。
- 音声認識: ユーザーが電話でコマンドを発話することでタスクが実行されます。
- 音声コマンド: ユーザーがスタート ボタンを長押しながら、"Open (起動)" または "Start (開始)" と発話し、その後にアプリ名を続け、アプリ外部からコマンドを発話するとそのタスクが実行されます。
これらの機能はすべて、Speech.Synthesis API と Speech.Recognition API で利用できます。音声合成を実装する場合は、イベント ハンドラーで 2 行のコードを使用するだけです。
private async void Button_Click(object sender, RoutedEventArgs e)
{
SpeechSynthesizer synth = new SpeechSynthesizer();
await synth.SpeakTextAsync("The latest MSDN issue has arrived!");
}
上のメソッドには async 演算子と await 演算子も追加されています。
Windows Phone 8 への移行を最大限に高める
新しいツールとテンプレートから Windows Phone 8 SDK に含まれるいくつかの新機能まですべて取り上げました。また、ローカライズの容易さを示し、Windows 8 と共通で使用できるコード ベースも紹介しました。これで、Windows Phone 7 から Windows Phone 8 への移行を最大限に高める知識が備わったことになります。
Michael Crump は、マイクロソフト MVP、INETA チャンピオンであり、.NET Framework についての複数の電子書籍の著者です。彼は Telerik で主に XAML コントロール スイート関連の仕事をしています。彼の連絡先は、Twitter (twitter.com/mbcrump、英語) です。最新の彼のブログについては (michaelcrump.net、英語) を参照してください。
この記事のレビューに協力してくれた技術スタッフの Jeff Blankenburg (マイクロソフト) と Lance McCarthy (Telerik) に心より感謝いたします。
Jeff Blankenburg (Jeffrey.Blankenburg@microsoft.com) は、マイクロソフトの開発者エバンジェリスト、書籍『Migrating to Windows Phone』(Apress、2011 年) の共著者、および複数の技術カンファレンスの主催者です。
Lance McCarthy は、Nokia の特派員であり、Telerik の XAML サポート スペシャリストです。