C# + WPF(Windows Presentation Foundation) の開発に関わる便利ツール、情報のまとめ

この記事について

個人的なツールの作成向けに調査した内容のまとめになります。
Windowsだけ見ても業務への採用はいまだWinFormが強いらしいうえに、XamarinやUWPなどもありいまさらWPFはどうなんだろうというところもありますが、ある程度は枯れてますし、WinFormよりは画面を柔軟に作れるところもあるのでクロスプラットフォームを意識しないならWPFでもありなのではという印象です。(クロスプラットフォームを意識したデスクトップアプリ開発なら、Xamarin, JavaFX, Electronあたりになるんでしょうか?)
またWPF/Silverlight発のMVVMの考え方は他のGUIにも適用できるので、学習にもそれほど悪くはないのではないかと思います。(個人的にはVue.jsと合わせて学習するとわかりやすかったです)

C#の基本

文法

C# によるプログラミング入門 | ++C++; // 未確認飛行 C

C#7も含めて網羅されているため、ネット上の情報なら上のサイトが詳しかったです。

LINQ

LINQの拡張メソッド一覧と、ほぼ全部のサンプルを作ってみました。 - 地平線に行く
Modern C# 入門の備忘録 - Linq入門編 - Qiita
[C#][LINQ] nullを除外する - Qiita

例外

Exception クラス (System)
頻繁に使用する例外の一覧 - プログラマーな日々

WPF

概要

XAML

基本

Binding

RelativeSource関連

Style

Converter

MVVMフレームワークでViewModelを実装する場合は責務的に微妙ですが、Converterという機能もあります。

Behavior

デザインツールキット

Material Design

Google の Material Design を利用するためのツールキットと、同作者のドラッグ可能コントロールライブラリ。

Metro / Modern UI

マイクロソフトの Modern UI を利用するためのツールキット。
MetroWindowが使いやすいため、部分的に上記のマテリアルデザインと組み合わせて利用されることもあるようです。

WindowsAPICodePack

ディレクトリ選択用ダイアログなどを拡張する。

参考

パフォーマンス

WPFのデータバインディングは便利ですが、速度が要求される部分になるとチューニングが必要になります。
特にItemControlなどで大量にオブジェクトを再描画したりなどで劇的に遅くなったりします。
WPFではUIの仮想化が一部の標準のコントロール(WrapPanel,Canvas等)だとできないので注意が必要です。

公式ドキュメント

関連ブログ記事

MVVMフレームワーク

MVVM Light Toolkit

ViewModelLocaterとMessanger機能が使いたい人向けMVVMフレームワーク。
今だとReactivePropertyと組み合わせて使うのをおすすめします。

機能

  • ViewModelLocaterを利用した View <=> ViewModel の紐付け (Prismと違って自動紐付け機能はない簡易版)
  • Messanger 機能のサポート (ViewModelBaseを継承したオブジェクト同士のみ)
  • RelayCommandによるコマンド実装補助(これはReactiveProperyのReactiveCommandのほうがよい)

使用感としては小規模なC#プロダクトでは十分かとは思いますが、ある程度大きくなるとViewModelLocaterが肥大化してきて困るかもしれません。その場合はPrismの方に乗り換えたほうが良いかもです。

ドキュメント

日本語ドキュメントはあんまり無いですが、機能も最低限なのであまり困らないかとは思います。

Prism

マイクロソフトの中の人が作ってるMVVMフレームワーク。

PrismLibrary/Prism: Prism is a framework for building loosely coupled, maintainable, and testable XAML applications in WPF, Windows 10 UWP, and Xamarin Forms.

機能

  • 名前付けルールによる View <=> ViewModel の自動紐付け
  • DIコンテナとの連携 (Unity等)

ドキュメント

Rx

Reactive Extention

ReactiveX
Reactive-Extensions/Rx.NET: The Reactive Extensions for .NET

解説記事

Reactive Extensionsのはじめかた - かずきのBlog@hatena
今更ですがRx再入門の記事をPDF化したやつをSlideShareに入れました - かずきのBlog@hatena

Reactive Property

WPFのViewModelを記述する際にReactivePropertyはとても便利なので使える環境ならぜひ使いましょう。

作者の方々の解説記事

使用例

テンプレートエンジン

T4 (Text Template Transformation Toolkit)

C#でテンプレートからテキスト生成が可能な機能。文法としてはJavaのJSPに似ている?
VisualStudioと標準で統合されており、ビルド前に任意のC#のコードを生成したりとメタプログラミング的な利用も可能。

コード生成と T4 テキスト テンプレート

参考

Visual Studio搭載のT4テンプレートエンジンの3通りの活用方法 - seraphyの日記
Visual Studio × T4 × 属性で Entity コード大量生成 - Qiita
[C#][Visual Studio] T4テキストテンプレート 内でJSON.NET(3rd Party製ライブラリ)を利用する - Qiita

テスト

ChainingAssertion

neuecc/ChainingAssertion: Method Chaining base UnitTesting Extension Methods and Dynamic Private Accessor for MSTest, NUnit, xUnit.net.

テスト時にいろいろと便利な拡張メソッドを定義してくれるパッケージ。

  • MSTest, NUnit, MbUnit, xUnitに対応。
  • 一般的な Assert.AreEqual(A, B) などの代わりに、A.Is(B) などのアサートを追加することが出来る。
  • MSTestでxUnitのようにParameterized Testを実行できる拡張を提供

概要

neue cc - テストを簡単にするほんの少しの拡張メソッド
neue cc - Chaining Assertion for MSTest

使用時の注意点

Parameterized Test, TestCaseSource使用時には public TestContext TestContext { get; set; } の定義が必須になります。
(こちらを定義しないとTextContext.Run()が存在しないというエラーで散々悩む羽目に・・・)
https://github.com/neuecc/ChainingAssertion#parameterized-test-for-mstest

[TestClass]
public class UnitTest
{
    public TestContext TestContext { get; set; } //必須

    [TestMethod]
    [TestCase(1, 2, 3)]
    [TestCase(10, 20, 30)]
    [TestCase(100, 200, 300)]
    public void TestMethod2()
    {
        TestContext.Run((int x, int y, int z) =>
        {
            (x + y).Is(z);
            (x + y + z).Is(i => i < 1000);
        });
    }
}

参考

JUnit実践入門 MSTest用パッチ #TddAdventJp - 亀岡的プログラマ日記

テストカバレッジ

OpenCover

OpenCover/opencover: A code coverage tool for .NET 2 and above (WINDOWS OS only), support for 32 and 64 processes with both branch and sequence points
NuGet Gallery | OpenCover - an open source code coverage tool for .NET 4.6.519
※注意:Nugetでリリースされているものはv4.6.519 時点ではVS2017(C#7.0)に未対応。対応版を現在開発中の様子

使用例記事

AppVeyorとCodecovを使ってC#のコードカバレッジを計測する - YoshinoriN's Memento

dotCover

こちらは有料のプラグインになりますが、EnterpriseのVisual Studioを買うよりは安いので検討してもいいかもしれないです。
dotCover: A Code Coverage Tool for .NET by JetBrains

CI サービス

Appveyor

Windowsの.NET環境のビルドができるCIサービス。VS2017にもすでに対応済みです。
publicなオープンソースプロジェクトなら無料で使用できます。

Continuous Integration and Deployment service for Windows developers | AppVeyor

TODO: 使用方法をまとめるか、いい記事があればリンクする。

その他

ReSharper

こちらは有料のプラグインになりますが、WPF(XAML) の編集も含めてだいぶIDEが賢くなるためおすすめです。
企業向けライセンスと、個人向けライセンスの2つがあります。個人向けライセンスでは US$129/year 程度です。
(その他のIDEも一緒に含んだ All Products Pack で買ったほうがお買い得かもしれないです。)
ReSharper for Visual Studio: JetBrains Toolbox subscription

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.