Win8用のソース・コードをWin8.1用に変換するには?[Win 8.1]WinRT/Metro TIPS

「ターゲットを変更(Retarget)」機能を使ってWindows 8アプリのプロジェクトをWindows 8.1アプリのプロジェクトに変換する手順を紹介する。

» 2013年08月29日 12時40分 公開
[山本康彦BluewaterSoft]
WinRT/Metro TIPS
業務アプリInsider/Insider.NET

powered by Insider.NET

「WinRT/Metro TIPS」のインデックス

連載目次

 Windows 8.1(以降、Win 8.1)へのアップデートが10月に開始されると発表され、Windowsストア・アプリの開発もいよいよWin 8.1が視野に入ってきた。Windows 8(以降、Win 8)からのアップデートは無償なので、Win 8.1への更新は急速に進むだろう。

 Win 8向けのWindowsストア・アプリ(以降、Win 8アプリ)をWin 8.1にインストールしても動く。動きはするのだが、「特集:次期Windows 8.1&Visual Studio 2013 Preview概説(前編):大きく変わるWindowsストア・アプリ開発 〜 ビュー状態に関連する変更点」で解説したように、ビュー状態に関する問題を抱えてしまう。Win 8.1向けのWindowsストア・アプリ(以降、Win 8.1アプリ)として作り直すべきなのだ。しかし、最初から作り直すのは大変だ。何とかならないだろうか?

 そこで本稿では、前述の特集記事でも簡単に触れたが、「ターゲットを変更*1」(Retarget)機能を使ってWin 8アプリのプロジェクトをWin 8.1アプリのプロジェクトに変換する手順を紹介する。

*1 「Retarget」という用語は、Visual Studio 2013(Preview版)の一部では「再ターゲット」と訳されており、MSDNでは「ターゲットを変更」という訳になっている。本稿では「ターゲットを変更」を使っておく。ただし、この訳語はまだ安定していない可能性があるので、原文の「(Retarget)」を要所に付記する。


事前準備

 Win 8アプリを開発するには、Win 8とVisual Studio 2012(以降、VS 2012)が必要である。これらを準備するには、第1回のTIPSを参考にしてほしい。本稿では64bit版Win 8 ProとVS 2012 Express for Windows 8を使用している。

 Win 8.1アプリを開発するには、Win 8.1とVisual Studio 2013(以降、VS 2013)が必要である。本稿執筆時点ではまだ製品版は一般公開されておらず、本稿ではWindows 8.1 Pro PreviewとVisual Studio Express 2013 Preview for Windowsを使用する。

 今使っているPCにPreview版をインストールして不都合が起きても困るので、Win 8.1は仮想マシンにインストールして試すのがよいだろう。筆者はOracleのVirtualBoxを使ってインストールした*2

 Win 8.1 Previewは「Windows 8.1 Preview のダウンロード」のページから入手できる。64bit版のWin 8.1は、CMPXCHG16Bという命令をサポートしているCPUでないとインストールできないので注意してほしい*3。VS 2013 Previewは「Visual Studio 2013 Preview Downloads」のページからダウンロードできる。なお、Win 8.1 PreviewではMicrosoftアカウントを使う必要があるが、Windowsストア・アプリを開発している皆さんなら、そこは問題にならないだろう。

*2 OracleのVirtualBox: 「Oracle VM VirtualBox」から入手できる。なお、「Guest Additions」をインストールすると画面表示に不都合が出ることもあるようだ。筆者の環境では画面サイズの追加ができなくなり、やむなく「Guest Additions」をアンインストールした。

*3 CMPXCHG16B命令: 64bit CPUがこの命令をサポートしているかは、Windows Sysinternalsの「Coreinfo」というコマンドライン・ツールで確認できる。このツールを実行して、その出力に「Supports CMPXCHG16B instruction」とあれば、サポートされている。サポートされていなければ、32bit版をインストールするしかない。


VS 2012でWin 8用のサンプル・アプリを作成する

 まず、「ターゲットを変更」する対象になる、簡単なWin 8アプリを作成する。VS 2012で新しいプロジェクトを作る際に、[新しいプロジェクト]ダイアログで[グリッド アプリケーション (XAML)]テンプレートを選んでほしい。そうしたら、ビルドして実行し、動作を確認しておいてもらいたい。このアプリは、3つのビューの間で画面遷移し、どのビューもスナップ状態では画面レイアウトが切り換わる(次の画像)。

サンプル・アプリ(Win 8で実行)
サンプル・アプリ(Win 8で実行) サンプル・アプリ(Win 8で実行)
タイトルの文字と背景色を変えた以外は、[グリッド アプリケーション (XAML)]テンプレートのまま。上はフル・スクリーンで下がスナップ状態。スナップ状態にすると画面のレイアウトが切り替わる。

「ターゲットを変更」する準備

 このまま「ターゲットを変更」してしまうと、元に戻せなくなる。Win 8のサポートを取りやめるならそれでもよいかもしれないが、通常はWin 8アプリとWin 8.1アプリの2つのプロジェクトに分岐させる。

 ここではソリューションのフォルダごとまとめてコピーして、フォルダ名を適当な名前に変更しておこう*4

*4 ソース・コード管理をしている場合は、ソース・コード・リポジトリ側でWin 8.1アプリ用の分岐を作り、それからローカルにソース・コードを取得する。


VS 2013でWin 8アプリ・プロジェクトを開いてみる

 それでは、Win 8アプリのプロジェクトをVS 2013で開いてみよう。VS 2013を起動し、メニューの[ファイル]−[プロジェクトを開く]から、先ほど用意したプロジェクトを開く。すると、次の画像のように、「ターゲットを変更」(Retarget)を促すダイアログが出てくる。

VS 2013でサンプル・アプリを開いたところ(Win 8.1 Previewで実行) VS 2013でサンプル・アプリを開いたところ(Win 8.1 Previewで実行)
「ターゲットを変更」(Retarget)を促すダイアログが出ている。なお、VS 2013 Previewは、あちこちにまだ翻訳されていない部分が残っており、このダイアログも英語で表示されている。

 [OK]ボタンをクリックしてこのダイアログを閉じると、次の画像のようになる。まだ「ターゲットを変更」は実行されておらず、「ターゲットを変更」の手順を説明したWebページが表示されている。

VS 2013で「ターゲットを変更」を促すダイアログを閉じたところ(Win 8.1 Previewで実行) VS 2013で「ターゲットを変更」を促すダイアログを閉じたところ(Win 8.1 Previewで実行)
VS 2013 Expressでは、ソリューション・エクスプローラにソース・ファイルが表示されない(有償版では表示される)。

 このとき、VS 2013 Expressではソリューション・エクスプローラにソース・ファイルが表示されず何もできないので、「ターゲットを変更」を実行するしかない。

 有償版のVS 2013では、ソース・ファイルが表示され、Win 8アプリとしてビルドできるので、ここでビルドしてちゃんと動くか確認しておこう。実際のプロジェクトでは、必要なライブラリがVS 2013の環境に入っていなかったりして、この段階で結構な数のエラーが出る。先に修正してWin 8アプリとして動作することを確認してから、「ターゲットを変更」に進もう。

VS 2013でWin 8.1アプリ・プロジェクトに「ターゲットを変更」する

 いよいよ「ターゲットを変更」(Retarget)を実行する。

 VS 2013のソリューション・エクスプローラで変換したいプロジェクトを選び、右クリックのメニューから「Windows 8.1 にターゲットを変更」(Retarget to Windows 8.1)を選ぶ(次の画像)。

VS 2013のソリューション・エクスプローラで「ターゲットを変更」(Retarget)を実行する(Win 8.1 Previewで実行) VS 2013のソリューション・エクスプローラで「ターゲットを変更」(Retarget)を実行する(Win 8.1 Previewで実行)

 すると、次の画像のようなダイログが出てきて確認を求められるので、[OK]ボタンをクリックすると変換が始まる。

VS 2013で「ターゲットを変更」(Retarget)の実行を確認するダイアログ(Win 8.1 Previewで実行) VS 2013で「ターゲットを変更」(Retarget)の実行を確認するダイアログ(Win 8.1 Previewで実行)

 Preview版で変換する際には、ここで自動的にWordファイルのダウンロードが始まり、びっくりする。「Optimizing your migrated Windows 8 apps: building better experiences with Windows 8.1 〜 Step-by-step guidance for app builders」というドキュメントであるが、製品版では翻訳されたうえでもう少しスマートな提示方法になっていることを期待したい。

 無事に変換が終わると、次の画像のようになる。エラーが出ていなければ、完了だ。今回は、何もエラーは出ないはずである*5

VS 2013で「ターゲットを変更」(Retarget)が完了した(Win 8.1 Previewで実行) VS 2013で「ターゲットを変更」(Retarget)が完了した(Win 8.1 Previewで実行)
[出力]ペインには「再ターゲットの終了: 完了 1、失敗 0、スキップ 0」と表示されている(ここでは「再ターゲット」と訳されている)。

*5 実際のプロジェクトでは、かなりのエラーが出ると覚悟しておいてほしい。


 それではビルドして実行してみよう。スナップ状態も確認してほしい(次の画像)。

「ターゲットを変更」(Retarget)したWin 8.1アプリ(Win 8.1 Previewで実行) 「ターゲットを変更」(Retarget)したWin 8.1アプリ(Win 8.1 Previewで実行)
2つのアプリを並べて表示し、作ったアプリの幅を最小にした。しかし、画面レイアウトは切り替わらない。

 スナップしてみると、「あれっ!?」と思われるはずだ。上の画像のように、スナップして幅を最小にしても、画面レイアウトが切り替わらないのである。

VS 2013でWin 8.1アプリの最小幅を変更する

 上で述べた現象は、ビューの最小幅のデフォルトが500pxであるために起きる。最小幅を320pxに変更すれば、Win 8アプリのときと同様に画面レイアウトが切り換わるようになる。

 ビューの最小幅を変更するには、マニフェスト・ファイルをダブル・クリックしてマニフェスト・エディタを開いて作業する。その[アプリケーションUI]タブに[最小幅]というドロップダウンがあり、ビューの最小幅を指定する(次の画像)。デフォルトでは[(設定なし)]になっていて、それは500pxなのだが、[320px]を選ぶことでWin 8アプリのスナップと同じ幅になる。

VS 2013のマニフェスト・エディタでビューの最小幅を変更する(Win 8.1 Previewで実行) VS 2013のマニフェスト・エディタでビューの最小幅を変更する(Win 8.1 Previewで実行)

 ビューの最小幅を320pxに変更して実行してみると、次の画像のようになる。

ビューの最小幅を320pxに変更したWin 8.1アプリ(Win 8.1 Previewで実行) ビューの最小幅を320pxに変更したWin 8.1アプリ(Win 8.1 Previewで実行)
ビューの幅が500px未満になると、スナップ状態のレイアウトに切り替わる。

 今度は、ビューの幅を狭くしていくと画面のレイアウトが切り替わるだろう(上の画像)。

 Win 8アプリと違って、Win 8.1アプリはビューの幅を(最小幅以上であれば)自由に変えられる。そして、「ターゲットを変更」(Retarget)して作ったWin 8.1アプリは、ビューの幅を500px未満にすると、最小幅でなくても画面のレイアウトはスナップ状態に切り替わってしまう。これは、Win 8.1アプリでは、Win 8アプリのビュー状態がシミュレートされており、幅が500px未満ならばスナップ状態だとされるためである。

まとめ

 VS 2013の「ターゲットを変更」(Retarget)機能で、Win 8アプリ・プロジェクトをWin 8.1アプリ・プロジェクトに変換できる。できれば、変換前にVS 2013でビルドして動作を確認しておいた方がよい(それにはVS 2013の有償版が必要)。変換後のビューの最小幅は500pxになっているので、スナップ時に画面レイアウトを切り替えたい場合は、ビューの最小幅を320pxに変更する。

 「ターゲットを変更」(Retarget)については、次のドキュメントも参照してほしい。

「WinRT/Metro TIPS」のインデックス

WinRT/Metro TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。