CodeZine(コードジン)

特集ページ一覧

Windows電卓の中はどうなっているのだろう?(前編)
~オープンソースのコードを見てみよう

UWPアプリ開発の最前線 第13回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2019/07/26 11:00

目次

ビルドしてみよう

 それでは、ソースコードの「src」フォルダーにある「Calculator.sln」ファイルをVisual Studioで開いて、ソリューションをビルドしてみましょう。

 エラーが出るかもしれませんが、そのときはエラーメッセージを頼りに調べてください。Webで検索するときは、エラーメッセージの英文を考えて、それで探すと見つかる可能性が上がります。参考までに、筆者は次のようなエラーに引っかかりました。

  • コンパイラーのバージョン違いで警告が出てビルドエラー:コンパイラーを変えるか(次の画像の①)、warning pragmaで警告を抑止する
  • Windows 10 SDKのバージョン違いでビルドエラー:要求されたSDKをインストールするか、ターゲットプラットフォームのバージョンを変える(次の画像の②)
Calculatorプロジェクトのプロパティ
Calculatorプロジェクトのプロパティ

 ビルドできたら、デバッグ実行していろいろと試してみてください。ストアからインストールした製品版のWindows電卓アプリとほぼ同じ動作をするはずです。前述したように、まったく同じではありません。アイコンやバージョン情報などが違う他に、2019年5月中旬ごろの状況では製品版に残っている不具合がオープンソース版では先に解消していました(次の画像)。

製品版とオープンソース版の違い
製品版(左)とオープンソース版(右)の違い(2019年5月中旬ごろの状況)
Windowsを和暦表示にしていて日付の計算をすると、製品版では改元をまたいだ年の加減算がおかしかった

 ちなみに上の不具合は、UWP APIのCalendarクラス(Windows.Globalization名前空間)のAddYearsメソッドの不具合に起因するものです。オープンソース版では、その不具合を回避するコードが2019年5月1日付でコミットされています。GitHubで公開されていると、こういったことも分かります。なお、製品版の方も、最近リリースされたバージョン10.1904.42.0では解消されています(リリース日付は非公表のため不明)。

ソースコードを覗いてみよう:プロジェクトの構成

 それでは、実際にコードをちょっと覗いてみましょう。

 ソースコードのファイル数が多くて、どこから見ていけばよいのか迷います。そういうときは、まずプロジェクトの構成と依存関係を見てみましょう。ソリューションにプロジェクトは5つあります(次の画像)。

ソリューションに含まれる5プロジェクト(ソリューションエクスプローラー)
ソリューションに含まれる5プロジェクト(ソリューションエクスプローラー)

 そのうち、exeファイルを作るプロジェクトは次の3つです。

デバッグ実行するプロジェクトのドロップダウンにはexeファイルを作るプロジェクトだけが表示される
デバッグ実行するプロジェクトのドロップダウンにはexeファイルを作るプロジェクトだけが表示される
  • 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プロジェクトには、おそらく電卓の計算ロジックといった汎用的なコードが入っているでしょう。


関連リンク

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:UWPアプリ開発の最前線

もっと読む

著者プロフィール

  • biac(ばいあっく)

    HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。 2014/10~2019/6 Microsoft MVP (Windo...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5