TL;DR
-
かごんま .NET 2020.06 便利なツール・ライブラリたち
2020年6月17日
https://kagoshima-dotnet.connpass.com/event/178521/ -
内容
1. 紹介されたツール、モジュール
1.1. Winget
Microsoft公式のコマンドラインパッケージマネージャーがリリース(2020年6月2日現在プレビュー版)
ソフトウェアの必要な場所からのダウンロードとインストールを自動化できる。最新バージョン(または指定した正確なバージョン)を検索してインストール
1.2. Chocolatey
Windowsでもコマンドラインでパッケージ管理可能なツール。
- コマンドでソフトウェアインストール・アンインストール・更新
- ソフトウェアインストール時に依存解決
- 複数のソフトウェアをまとめて更新
- インストール済みソフトウェアのリストをエクスポートして別マシンにインポート
1.3. Ansible(Azure環境構築の自動化)
Ansible を使用すると、仮想マシン、コンテナー、およびネットワークをプロビジョニングし、クラウド インフラストラクチャを完成させることができます。 また、Ansible を使用すると、環境でのリソースの展開と構成を自動化することもできます。
Azureの構築はansibleでコマンドを作成しておいたほうがよい。手順書を作成した場合に比べ、間違いを減らし同一環境の作成を自動化できる。
1.4. CSVHelper
C# > CSV取り込みを劇的に簡単にするCsvHelper
CSV取り込みしたのち、クラスにマッピングしてくれるライブラリ「CsvHelper」
改行の扱いだけであればMicrosoft.VisualBasic.FileIO.TextFieldParserでもよいが、TextFieldParserと比べるとクラスマッピングまでしてくれるのが素晴らしい!
クラスメンバーの属性で取り込み対象の列、インデックスを指定する。
1.5. CSVHelper.Excel
Excel読み込み時に使用する(旧版から移行後精力的に更新されている)
❌旧版 christophano/CsvHelper.Excel
1.5.1. npoi
.NET Standard 対応のWord / Excel読み込みライブラリ。POI Java プロジェクトの .NET 版。 Apache-2.0 License
1.6. Open XML SDK
Microsoft公式のOfficeで読み書きできるOffice Open XML ファイル形式を扱うことができるSDKです。
1.7. Moq
テストダブル(=単体テスト用の代役オブジェクト)を簡単に作るためのライブラリ。
テスト対象の依存オブジェクトが、ネットワーク通信が必要・データベースアクセスが必要など、外部に依存する場合、そのままでは単体テストを作りにくいです。
これを解決するために、実際のオブジェクトの代わりを用意できる。
1.8. Castle
【連載】ASP.NET Web API を使おう:第6回 Castle.Core DynamicProxy で AOP
例えばWeb APIを作成する場合、提供する(ほとんど)全てのAPIに、ほぼ同じ要求が求めらるでしょう。
ユーザー認証
トランザクション管理
ロギング処理
例外処理
などです。これらを地道に実装すると、全てのAPIのメソッドが、共通のコードとtry-catchの山になってしまいます。当然全てのメソッドで上にあげた共通処理をすべてテストする必要もあります。AOPを利用することでこれらの問題を解決する事ができるます。具体的には、メソッド呼び出しをインターセプトしてメソッドの呼び出し前後に共通処理を編み込む感じです。
1.9. AsyncEX
モニター系・カーネルオブジェクト系の同期処理を模倣し、非同期対応にしたライブラリです。await可能なlockとして使える AsyncSemaphoreを使えば、 同時進行するタスク数を制御可能
1.10. Hangfire
Hangfireで実現する.NETアプリのバックグランドジョブ
.NET環境で利用できるバックグラウンドジョブのライブラリ。
ASP.NETでウエブアプリを作成した場合に、処理をある程度の粒度で切り出して、応答を返すプロセスとは別のプロセスで処理したい場合に使用する。例えば、予約完了処理の中でメール送信部分だけを別のプロセスで処理する、など。
1.10.1. Hangfire Dashboard
Using Dashboard — Hangfire Documentation
バックグラウンド ジョブに関するすべての情報を確認できる。
基本的には開発時に使用する。
動作環境では別の方法を検討したほうが良い。
1.11. Bogus
【.NET】BogusとCsvHelperでダミーデータのCSVを生成する
ダミーデータを生成するライブラリ。
日本語にも対応しており、名前、住所、電話番号など様々なデータを作成することができる。
1.12. Fluent Validation
検証コードをFluent(流れるように、連続して)で.でつなげて書くことができる。
public class CustomerValidator : AbstractValidator<Customer> {
public CustomerValidator() {
RuleFor(x => x.Surname).NotEmpty();
RuleFor(x => x.Forename).NotEmpty().WithMessage("Please specify a first name");
RuleFor(x => x.Discount).NotEqual(0).When(x => x.HasDiscount);
RuleFor(x => x.Address).Length(20, 250);
RuleFor(x => x.Postcode).Must(BeAValidPostcode).WithMessage("Please specify a valid postcode");
}
private bool BeAValidPostcode(string postcode) {
// custom postcode validating logic goes here
}
}
1.13. CommandLine Parser
コンソールアプリを作成する際に使用する、コマンドライン引数の処理を扱いやすくすることができるツール
1.14. PostSharp
C#のAOPライブラリ(PostSharp) - Status Code 303 - See Other
AOP(Aspect Oriented Programming)?
ログ出力や例外処理など、メソッド全体に共有な処理を重複定義せず一か所に定義したいことがある。もし、全部それぞれにコピペなどで定義しまった場合。
その部分に修正が入った場合、全てのメソッドを直さないといけなくなり、保守性が低下する。
さらに、本来クラスにさせたい処理でないため、コードの見通しや可読性が低下する。このような共有処理を側面(Aspect)として定義した後、メソッドに適用する手法。
PostSharpはC#では有名なAOPライブラリ。本来は有料だが、Expressエディションを使えば適用数が制限されるが、無料で実行できる。(プロジェクト単位:最大10個、ソリューション:最大50個)
どんなとき使うの?
- プロパティ値が変更されたときの通知
- UndoとRedo
- 契約プログラミング(事前条件/事後条件確認)
- ログ・監視・プロファイリング
- 例外発生時の制御
- トランザクション制御
- マルチスレッド時の挙動制御(バックグランド・フォアグランド制御、不変性・同期など)
- セキュリティ(入力チェック、認証など)
1.15. ReSharperコマンドラインツール
Visual Studioの外部で多数のReSharperコードインスペクションを実行し、さらに、コードの重複を発見する、無料のスタンドアロン型コマンドラインツールセットです。 このツールはReSharperをインストールしなくても使用でき、継続的インテグレーションまたはコード品質管理サーバーと統合できます。
1.15.1. ReSharperReports
ReSharperのレポートを作成するためのツール
2. その他
2.1. コードメトリックス
2.2. ソフトウェア開発の原則
2.2.1. SOLIDの原則
- S:SRP、単一責任の原則
- O:OCP、解放閉鎖の原則
- L:LSP、リスコフの置換原則
- I:ISP、インタフェース分離の原則
- D:DIP、依存性逆転の原則
2.2.2. KISSの原則
2.2.3. DRYの原則