tmytのらくがき

個人の日記レベルです

ゆるやかにUWPに移行したい

Mimosaくらいの規模ならえいやーって新しくプロジェクト作ってコピペしたらいいんですけど、Aristeaぐらいになるとやっぱし8.1向けの保守も考えるとコードは共有したいし…とか考えてみるとわりとめんどくさい。でもこれからはUWPにしていきたい、さてどうしよう。っていまAristeaの開発で使ってるプロジェクト構成を紹介してみます。

まず一番最初の状態はこれ。いたって普通のWindows 8.1専用のプロジェクトでした。

f:id:tmyt:20151022000528p:plain

さてある時ここにWindows Phone 8.1向けのプロジェクトが増えます。8.1向けUniversalはSharedにソースを突っ込んで共有するスタイルなのでプロジェクト構成はこうなりました。

f:id:tmyt:20151022000643p:plain

Shared部分には、App.xaml.csや、リソース、カスタムコントロールなど、アプリの半分以上が含まれています。しばらくこのまま続きます。しかし時代はWindows 10。UWPの開発の必要性が出てきます。 まず考えるのが、これ。

f:id:tmyt:20151022000914p:plain

とりあえずUWPを増やす。でもこれだと、8.1向けとUWP向けで同じバグを修正する必要が出てきていまいち。じゃぁこれはどうか。

f:id:tmyt:20151022001016p:plain

これだと共有部分のコードは同じ。だけどもUIの部分が結局複数もたないといけないことに。Aristeaの開発ではいまのところUWPはPC向けをベースとしているのでもっとPCとコードを共有したい。となった結果がこれ。

f:id:tmyt:20151022001151p:plain

ダブルSharedプロジェクト。一番下のSharedプロジェクトには全部のパッケージに共通するリソース、コード、コントロールすべてを配置。次に真ん中のSharedプロジェクトには最初にPC版のコードを全部移動。必要に応じて、Windows 8.1向けとUWP向けでプロジェクトごとに管理。Phoneは今まで通り独自路線。

こうすることで、現在リリースしている8.1向けアプリへの新機能の投入や、不具合の修正はしつつ、同じ内容をUWP版に投入しながらUWP版として開発を進めることができるやん!ということで今はこの形で落ち着いています。なので、あまりお見せしたことはないですが、ソリューション構成はこうなっています。

f:id:tmyt:20151022001528p:plain