JMDC TECH BLOG

JMDCのエンジニアブログです

.NET Community Toolkitを使ったWPFアプリを作成してみた

こんにちは。株式会社JMDC インシュアランス本部ソリューション部の松本です。

今年、JMDCではアドベントカレンダーに参加しています。 qiita.com 本記事は、JMDC Advent Calendar 2024 25日目の記事です。

はじめに

私は2024年の1月にJMDCに入社し、インシュアランス本部ソリューション部に在籍しています。 担当しているシステムの機能の一つにマイナポータルから特定健診情報、薬剤情報、医療費通知情報を取得し、他のシステムのインプット用データを作成する機能があります。 扱う情報が個人情報を含むため、サンプルデータがあまり存在しません。 またデータ構造が複雑な仕様となっているため、テスト用データを作成するのに手間がかかります。 今回はテストデータ作成ツールを開発した時に使用したライブラリについて記事にしたいと思います。

作成したツールについて

テストデータを作成するツールですが、下記の要件が必要と考えました。

  • 必要な情報を簡単に入力できること
  • ツールにバグがあった場合、チームのメンバーが簡単に修正できること

チームメンバーにC#の経験が豊富だったので、ツールはデスクトップアプリをWPFで作成するをことにしました。 WPFで簡単に作成できるライブラリを検討した所、「.NET Community Toolkit 」がいいと思い採用しました。

.NET Community Toolkitとは

.NET Community ToolkitはMicrosoftから提供されているライブラリです。 詳しくは以下を参照ください。 learn.microsoft.com

今回のツールでは.NET Community ToolkitのMVVM Toolkitを利用してツールを作成しました。 learn.microsoft.com

.NET Community Toolkitには様々な機能がありますが、利用して一番便利だと思った点を記載していきます。

ツールの自動生成を行ってくれる

.NET Community ToolkitはMVVM用のコード作成機能があります。 [ObservableProperty]や[RelayCommand]などの属性を設定すると、プロパティのSetter、Getterなど必要な内容のコードを自動生成されます。 例えば、下記のようなコードだと

[ObservableProperty]
public string _InputName = string.Empty;

[RelayCommand]
public void ShowName()
{
 InputName = InputName + "です";
}

下記のようなコードが自動生成されます。

        /// <inheritdoc cref="_InputName"/>
        [global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", "8.3.0.0")]
        [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
        public string InputName
        {
            get => _InputName;
            [global::System.Diagnostics.CodeAnalysis.MemberNotNull("_InputName")]
            set
            {
                if (!global::System.Collections.Generic.EqualityComparer<string>.Default.Equals(_InputName, value))
                {
                    OnInputNameChanging(value);
                    OnInputNameChanging(default, value);
                    OnPropertyChanging(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangingArgs.InputName);
                    _InputName = value;
                    OnInputNameChanged(value);
                    OnInputNameChanged(default, value);
                    OnPropertyChanged(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangedArgs.InputName);
                }
            }
        }

属性はほかに他プロパティが変更されるたびに通知を出す[NotifyPropertyChangedFor]やプロパティの値でコマンドの実行状態を制御する[NotifyCanExecuteChangedFor]などMVVMのアプリケーションを作成するのに必要な機能がそろっていると思いました。

感想、まとめ

私は5年前に業務アプリを作成するためにWPFを利用していました。 久しぶりに使用するとツールやライブラリの変化が大きくキャッチアップするのに時間がかかりました。 今後も使えそうな業務があればWPFを使っていき、知識をアップデートしていきたいと思います。

最後までお読みいただきありがとうございました。

JMDCでは、ヘルスケア領域の課題解決に一緒に取り組んでいただける方を積極採用中です!フロントエンド /バックエンド/ データベースエンジニア等、様々なポジションで募集をしています。詳細は下記の募集一覧からご確認ください。 hrmos.co まずはカジュアルにJMDCメンバーと話してみたい/経験が活かせそうなポジションの話を聞いてみたい等ございましたら、下記よりエントリーいただけますと幸いです。 hrmos.co ★最新記事のお知らせはぜひ X(Twitter)、またはBlueskyをご覧ください! twitter.com bsky.app