ビルドしてみよう
それでは、ソースコードの「src」フォルダーにある「Calculator.sln」ファイルをVisual Studioで開いて、ソリューションをビルドしてみましょう。
エラーが出るかもしれませんが、そのときはエラーメッセージを頼りに調べてください。Webで検索するときは、エラーメッセージの英文を考えて、それで探すと見つかる可能性が上がります。参考までに、筆者は次のようなエラーに引っかかりました。
- コンパイラーのバージョン違いで警告が出てビルドエラー:コンパイラーを変えるか(次の画像の①)、warning pragmaで警告を抑止する
- Windows 10 SDKのバージョン違いでビルドエラー:要求されたSDKをインストールするか、ターゲットプラットフォームのバージョンを変える(次の画像の②)
ビルドできたら、デバッグ実行していろいろと試してみてください。ストアからインストールした製品版のWindows電卓アプリとほぼ同じ動作をするはずです。前述したように、まったく同じではありません。アイコンやバージョン情報などが違う他に、2019年5月中旬ごろの状況では製品版に残っている不具合がオープンソース版では先に解消していました(次の画像)。
Windowsを和暦表示にしていて日付の計算をすると、製品版では改元をまたいだ年の加減算がおかしかった
ちなみに上の不具合は、UWP APIのCalendarクラス(Windows.Globalization名前空間)のAddYearsメソッドの不具合に起因するものです。オープンソース版では、その不具合を回避するコードが2019年5月1日付でコミットされています。GitHubで公開されていると、こういったことも分かります。なお、製品版の方も、最近リリースされたバージョン10.1904.42.0では解消されています(リリース日付は非公表のため不明)。
ソースコードを覗いてみよう:プロジェクトの構成
それでは、実際にコードをちょっと覗いてみましょう。
ソースコードのファイル数が多くて、どこから見ていけばよいのか迷います。そういうときは、まずプロジェクトの構成と依存関係を見てみましょう。ソリューションにプロジェクトは5つあります(次の画像)。
そのうち、exeファイルを作るプロジェクトは次の3つです。
- Calculator
- CalculatorUITests
- CalculatorUnitTests
3プロジェクトの内、2つには「~Tests」という名前が付けられています。名前から、この2つは自動実行テストのプロジェクトだと分かります。残りの1つ、Calculatorプロジェクトが、電卓アプリのexeファイルを作るプロジェクトです。アプリを起動したときのコードは、必ずここにあります。
以下に示す残り2つのプロジェクトは、libファイル(スタティックリンクライブラリ)を作るプロジェクトです。この2つは、Calculatorプロジェクトの中間出力とリンクされて、exeファイルの一部になります。
- CalcManager
- CalcViewModel
次に、プロジェクト間の依存関係を見てみましょう。それには、ソリューションエクスプローラーでプロジェクトごとに参照先プロジェクトを見るか、あるいは[プロジェクトの依存関係]ダイアログ(メニューの[プロジェクト]-[プロジェクトの依存関係])を見て、調べます。分かった依存関係を図にすると、次のようになっていました。
ここでCalculatorUITestsプロジェクトだけ孤立していますが、UWPアプリのUI自動実行テストはシステムにインストールされたアプリを起動してテストするものだからです。
図の左側、アプリの内部はきれいな三層構造になっています。参照関係の先の方(図では上の方)に行くほど、汎用的なロジックが多く収められているのが一般的です。三層構造の真ん中にあるCalcViewModelプロジェクトは、名前からするとMVVMパターンのView Modelだと想像できます。一番上のCalcManagerプロジェクトには、おそらく電卓の計算ロジックといった汎用的なコードが入っているでしょう。
