こんにちは、医療ソリューション事業部のakiniwaです。
今回は、MicrosoftのWPF技術のご紹介をします。

公開されてから既に10年以上たっていますが、Microsoftが開発したUI開発システムWPF(Windows Presentation Foundation)を私が本格的に使用したのは一年ほど前でした。

これまでも存在は知っていていましたが、C#やJAVA等の言語でのアプリケーション開発・保守をしていると、WPFは関わりのない開発手法でした。
特にWPFでのクライアントアプリケーションを開発するための知識というのはあまり学習する機会がありませんでした。

長い間、マイクロソフトWindowsのクライアントアプリケーションのUI開発手法は、NET Frameworkに含まれるWindowsFormsを使用してきていました。
一般的な開発は、アプリケーションのUIが決定すると、開発途中やバージョンアップ等では、なかなか一から別の開発手法に変更するという事はほとんどありません。あるとすると、OSの転換期の時などで技術が利用できなくなるような場面くらいだと思います。

特に、入力項目が多い画面や、表示する情報が多い画面を持つアプリケーションになると、それまでの入力処理の蓄積や、表示する一覧の段組みを表示する処理を独自に開発している場合などは、新しい開発手法で表現できなくなる事も想定されます。
技術変更により、オペレーションの変化があると敏感な利用者に受け入れられるのかという点も大きなリスクになります。

現在、私が携わっているプロジェクトでは、既存のアプリケーションを完全に刷新して新規のアプリケーションとして開発するという事になり、前バージョンではWindowsFormsであったものをWPFにUI開発システムを変更するということになりました。
前述の通り、通例では、バージョンアップが妥当なのですが、既存のシステムが古くなり、メンテナンス面、機能アップ面でも新しい技術の投入ができず、システムの刷新を行うというプロジェクトが発足されました。
これに伴い、WPFを学習することになりました。

◇Windows FormsとWPFの違い

WindowsFormsとWPFの大きな違いというのは、UIの記載をするのにXAMLというマークアップ言語を使用する事です。
XMLのようなフォーマットのファイルで、タグにUIコントロールの要素と属性を記述し、UIの表示の仕方などを指定します。

UIを作成したら、そのコントロールに表示・編集するためのデータを「Binding」します。
「Binding」というのは、画面に表示する情報がプログラム上のどの変数に設定するかを指定すると、その内容を画面に自動的に展開してくれる機能です。
今までの開発言語のようにプログラムで画面上のどのコントロールに表示するという方法ではないので、最初は、このイメージに違和感を持ちました。

また、WPFを使用するコーディング手法には、MVVM(Model-View-ViewModel)というものがあります。
これは、WPFにはUIのコード(View)のみ記述し、各業務などに関する機能は別のソースファイルに記述します。
MVVMは、表示とデータ処理を完全に分離する事で保守性・開発生産性を向上させる目的があります。

これを突き詰めると、WPFには処理をほとんど記述せず、分離したコードでデータの処理を行い、処理結果が入る変数をBindingすることで画面に表示されるので、ほとんどUIと業務コードの関連性をなくすことができ、画面表示とデータ処理が関連づいている既存の開発言語よりも“機能ごとの個別に処理をコーディングできるメリット”があり、保守性も高くUIを意識せずに処理をコーディングできるので、効率良い開発できます。

そして、更にWPFの良い点は、解像度に依存しないUIを実現できることにあります。
最近は、ディスプレイの解像度が4k対応などになり、単純に表示すると文字が小さくて見えないなどの弊害が起こりますが、Windows10では、このような場合にディスプレイへのアプリケーションの表示倍率を変更して、アプリケーションを大きく表示することができます。

今までの技術のWindowsFormsアプリケーションでは、各コントロールのレイアウトが追従できずに位置がずれてしまう現象や画面からコントロールが表示できなくなるなどの問題が出てしまいます。そのため表示上のレイアウトが正しく表示されていても、そのコードを独自に記述変更する必要がありました。

WPFでは、各コントロールがそのアプリケーションの中に自動的にレイアウトされるように対応をすることができます。

Windows10や、高解像度ディスプレイの利用に伴うアプリケーション対応において、Windowsアプリケーションを作成するのであれば、WPFで作成するという時代になってきたのだと感じます。
WPFはこれから必要な技術となっているので、「みなさーん。Bindingしようぜー!」って言いふらしていきましょう!

トゥモローネットでは新しい技術に注目し、お客様によりご満足いただけるよう、サービスレベルの向上に取組みます!!
◇医療向けソリューション
https://www.tomorrow-net.co.jp/medical_solution/