Sharedプロジェクトについて
これまで異なるプラットフォーム開発においてソースコードを共有する仕組みとしてはポータブルクラスライブラリ(PCL)がありました、Sharedプロジェクトは加えて新たなソースコード共有の手段を提供した形になりますが、この2つにはいくつか違いがあります。
PCLは文字通り、ポータブル=移植可能なライブラリです。そのため対応するプラットフォーム(Windowsストアアプリ、Silverlight、Xamarinなど)で共通して利用可能なコードのみそこに記載することになります。対応させたプラットフォームそれぞれで利用可能なクラスライブラリを生成します。
それとは異なりSharedプロジェクトは単純にコードの共有です。その中ではWindowsストアアプリ固有のコードを記載することもできますが、先に説明したように、条件(#if WINDOWS_PHONE_APPなど)をつけて記述することになります。
Xamarin3ではXamarinプロジェクトもShared対応するなど、WindowsストアアプリとWindows Phone限定というものでもなくなりましたが、それぞれのプラットフォーム依存のコードが増えればどうしても条件を多く書くことになります。言い換えると、PCLとは異なりそこにプラットフォーム共通でないコードを書くことができるという利点があるとも言えます。
また、Sharedプロジェクトは単純にコードを共有すると書いたとおり、それだけをビルドしてdllを作成するということもできません。
これらの特徴を検討した上でPCLかSharedのどちらか(もしくはどちらとも)を利用するのか判断して開発を進めると良いでしょう。
完全に共有化できるわけではない
テンプレートを見ても分かる通り、画面を定義するXAMLファイルは共有化されていません。これは以下に述べるように画面を構成する部品、コントロールが完全に同一ではないなどの要因もありますが、主にタブレットとスマートフォンという画面サイズの問題です
画面に関しては、無理に共有化せずにWindowsストアアプリ、Windows Phoneでそれぞれの画面サイズに合わせたデザインを行うべきだと考えます。
コントロールについてもアプリケーションバーの違いや、フライアウトなど同じフラットなUIとはいえ違いがあります。
また、PCまたはタブレットでの利用を想定しているWindowsストアアプリと、スマートフォンであるWindows Phoneとではハードウェア的な違いがあり、その部分のAPIは共有化できない部分となります。
たとえば、Windowsストアアプリでは手書き入力に対応したInkManegerという機能がありますが、これはWindows Phoneでは利用できないため異なる処理を記述する必要があります。
広がるVisual Studio開発の世界
本記事では新しいユニバーサルWindowsアプリケーションの、WindowsストアアプリとWindows Phoneアプリをコードを共有しながら開発できるという特徴について紹介してきました。
また、Xamarin、Apache Cordovaなど、Visual Studioを利用してiPhoneやAndroidアプリが開発可能になるというツールも登場してきました。今後、Visual Studioというツールはますます開発者に取って、たくさんのプラットフォームに挑戦できるものになっていくでしょう。
本記事でも、Windowsストアアプリ開発を軸にしながら、開発者が自分の力を更に広く発揮できるように、ユニバーサルWindowsアプリケーションや、Xamarinなどの開発について紹介していければと思います。