本サイトからスピンオフした姉妹サイトです。ユニバーサルアプリ2014年4月10日コードを共有できる新しいプロジェクトタイプ「ユニバーサルアプリ」の概要と、基本的な開発方法を紹介。「UIコントロールで何が共通化でき、できないか」「プラットフォーム個別の実装方法」についても説明する。10時代ではUWPアプリ(ユニバーサルWindowsプラットフォームアプリ)と呼ばれています。全(=ユニバーサル)Windowsプラットフォーム向けアプリの開発」を参照してください。2014」で発表された。Apps」の方を指すこととする。Basic/C++)やHTML/CSS(WinJS)などのUIコードとビジネスロジックを、以下のような各プラットフォーム向けの全アプリで共有しながら開発できる機能だ(※全プラットフォーム共通のアプリを作るわけではなく、あくまで全プラットフォーム間の「コード共有」であることに注意してほしい)。対応時期などは未発表。Xboxのアプリ審査により、かなり厳選されたアプリのみになるとのうわさもある(※最終的にどうなるかは不明)。Studioで開発する(最新版で対応済み)。Studioは4~5週間後の次期アップデートで対応予定。Xamarinは「UIはプラットフォームごとに最適解が異なる」という考えに基づき設計されている。そのため、Xamarinのユニバーサルアプリでできるコード共有には、XAMLやWinJSのUIが含まれない(今後もXAMLなどは対応されないと考えられる)。Xamarinにおけるユニバーサルアプリは、PCL(ポータブル・クラス・ライブラリ)よりも手軽で便利なコード共有の仕組みと認識しておくとよいだろう(もちろんPCLにも引き続き対応している)。Runtime(WinRT)」というほぼ共通のWindowsコアを採用することによって実現している(次の図)。ちなみにこのWinRTベースのアプリは、エンドユーザーがいずれかのWindowsプラットフォームで購入すれば、どのプラットフォームでも使えるようになるとのことだ(実際に試したわけではないので詳細不明)。8.1向けユニバーサルアプリの開発について説明しよう。RC(リリース候補)版をインストールしておく必要がある。アプリ]カテゴリのテンプレートを選択する(以下の画面を参照)。Basic用のプロジェクトテンプレートが提供されていない。正式版では追加されると思われる。C#]と[JavaScript]のプロジェクトを作成してみた。すると、生成された初期ファイルは次の画面のようになった。初期ファイルの内容(左:C#、右:JavaScript)UIコードだけでなく、画像リソースなども含めた各種コードを共有できることが分かる。上の画面を見ると、以下の3つのプロジェクトが作成されたことが分かる。8.1アプリ用のコード。8.1アプリ用のコード。「<プロジェクト名>.Shared」プロジェクト(緑枠。上記の2つのプロジェクト間で共有するコード。共有プロジェクトは、PCLのようなライブラリではなく、従来からある「ファイル参照」機能をプロジェクトレベルでより使いやすくしたような機能だ。説明すると、拍子抜けしてしまうかもしれないが、ユニバーサルアプリの最大の利点は、XAMLやWinJSのUIコードをこの共有プロジェクト上で共有できる点にある。共有プロジェクトによるUIコードの共有それでは実際に、先ほど作成したプロジェクトのXAML/WinJSのUIコードを共有化してみよう。ここでは、C#の方のプロジェクトで例を示す。UIコードの共有化は、驚くほど簡単だ。「*.Windows」もしくは「*.WindowsPhone」プロジェクト内から、共有したいファイルを「*.Shared」プロジェクト内にドラッグ&ドロップして、「*.Windows」および「*.WindowsPhone」プロジェクト内の同名ファイルを削除するだけでよい。次の画面は、「HubPage.xaml」「ItemPage.xaml」「SectionPage.xaml」ファイルをドラッグ&ドロップした例だ(※XAMLファイルにひも付くコードビハインド・ファイルも同時にコピーされているのが分かる)。8.1アプリで切り替えるには、次の画面に示すようにXAMLエディター上部の左端のプロジェクト切り替えを選択し直せばよい。8.1アプリが作成される。共有プロジェクト自体は(参照にすぎないので)何のファイルも作成されない。プロジェクト]を切り替えればよい(次の画面)。8.1でUIコントロールやその挙動が完全一致しているわけではないということだ。「Windows.UI.Xaml.*」名前空間のクラス数を比較すると、次の表のような違いがある。共通かそうでないかは、下記の3種類のパターンに分類できる。1同じAPI2同じAPIだが、異なる挙動3デバイス独自のAPIそれぞれについて説明しよう。1同じAPI下記のような“プリミティブ”なUIコントロールは、同じAPIとなる。Phoneアプリで異なる。9」から引用)下記のような“プリミティブ”なUIコントロールは、同じAPIだが、異なる挙動となる。Picker系(ComboBoxなど)ListView(複数選択時など)Flyout系Media3デバイス独自のAPI下記のUIコントロールは「Windows専用」となる。Phone専用」となる。PivotAutoSuggestBoxContentDialogMaps共有プロジェクト内のプラットフォーム個別の実装について共有プロジェクトで、完全にコードを共通化できるのであれば問題ないが、ほんの数行だけコードが異なるために、コードを共有できないという場面もあるだろう。いった場合、いったん共有プロジェクトにそのファイルを入れてしまい、そのファイル内で異なる数行を、#ifディレクティブを使って、それぞれ記述すればよい。これにより、その部分だけプラットフォームごとに処理を切り分けられる。具体的にはC#(「WINDOWS_APP」や「WINDOWS_PHONE_APP」)とC++(「WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP」)では、次のようなコードになる。ユニバーサルアプリの基本を開発者向けに紹介した。ライブラリ化する必要がない場面では、PCLではなく、このユニバーサルアプリによるコード共有が広く使われるようになるだろう。PhoneアプリでUIコードを共通化させたいときには、ユニバーサルアプリが便利だ(......WPFやWindowsフォームとUIコードを共有できないのは残念だが)。8.1でコードを共有する意義が見い出しにくいのも確かだ。ここは日本の携帯電話キャリアに期待するしかない。8.1/iOS/Androidプラットフォーム間のコード共有の方が積極的に活用され始めるかもしれない。ユニバーサルアプリを解説する大規模カンファレンスのご紹介5月29日(木)~5月30日(金)、マイクロソフトの最新技術情報(例えば本稿で解説したような内容)を日本語で日本人向けに提供するカンファレンス「de:code」が日本マイクロソフト主催で開催される。2014」の内容をベースに、さらに日本向けのプラスアルファを含めたものになる。詳しい内容は(セッション内容は開催日までに決定していくとのこと)、リンク先を参照されたい。機械学習エンジニアを目指す人~初中級者のための技術情報サイトです。「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。開発者のためのSlackチーム、作りました:「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。2020最適なビューへの切り替えを推奨します:スマートフォン用表示に。