プロジェクトの共通設定⚓︎
.NET SDKの設定⚓︎
AlesInfiny Maris OSS Edition (以降、 AlesInfiny Maris )では、 global.json ファイルを用いて、ビルドに利用する .NET SDK のバージョンを設定します。 ソリューションファイルの配置されているフォルダーに、「global.json」という名前のファイルを作成します。 ファイル名は、大文字/小文字まで一致するように作成してください。
global.json ファイルには、ビルドに利用する .NET SDK のバージョンと、指定された .NET SDK バージョンが存在しない場合のロールフォワードポリシーを設定します。
global.json ファイル設定例 | |
---|---|
1 2 3 4 5 6 |
|
設定値の詳細は、 global.json の概要 を参照してください。
rollForward の設定について
.NET SDK のバージョンが固定されていればいるほど環境差異は少なくなり、アプリケーションの安定化につながります。 その反面、 .NET SDK のバージョン更新にあわせて、開発環境を更新する手間が発生します。 この例では、 .NET SDK のメジャーバージョンのみを固定し、最新のマイナーバージョンにロールフォワードする設定としています。 どの程度厳密に管理するかは、プロジェクトの特性に応じて決定してください。
プロジェクトファイルの設定⚓︎
前節 で作成したプロジェクトの設定作業を行います。 AlesInfiny Maris では、各プロジェクトの設定差分がなるべく発生しないよう、 Directory.Build.props ファイルを用いてプロジェクト設定の集約を推奨します。 Directory.Build.props ファイルを用いたプロジェクト設定は、アプリケーション全体に対して適用する設定と、プロダクションコード全体に対して適用する設定、テストコード全体に対して適用する設定の 3 種類を原則用意します。
アプリケーション全体に対するプロジェクト設定⚓︎
ソリューションファイルの配置されているフォルダーに、 「 Directory.Build.props 」という名前のファイルを作成します。 ファイル名は、大文字/小文字まで一致するように作成してください。 以下の設定が有効になるよう、 Directory.Build.props を設定します。
また利用するフレームワークのバージョンも設定します。 以下に上記設定を有効にしたプロジェクトファイルの設定例を示します。
アプリケーション全体の Directory.Build.props ファイル設定例 | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
著作権表記など、全プロジェクトに対して有効にしたい設定がある場合は、上記に加えて設定してください。
プロダクションコード用のプロジェクト設定⚓︎
プロダクションコードを配置する src フォルダーに、「 Directory.Build.props 」という名前のファイルを作成します。 ルートフォルダーに配置した Directory.Build.props ファイルを上書き設定できるよう、 <import>
要素を定義して、親フォルダーにある Directory.Build.props を読み込んでください。 また以下の設定が有効になるように、プロジェクトファイルを設定します。
また NeutralLanguage の設定1 もあわせて行っておくことを推奨します。 上記設定を有効にしたプロジェクトファイルの設定例を示します。
プロダクションコード用の Directory.Build.props ファイル設定例 | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
テストコード用のプロジェクト設定⚓︎
テストコードを配置する tests フォルダーに、「 Directory.Build.props 」という名前のファイルを作成します。 プロダクションコード用のプロジェクト設定 でも解説した通り、ルートフォルダーに配置した Directory.Build.props ファイルを上書き設定できるよう、 <import>
要素の追加を推奨します。 特に設定する項目がなければ、 tests フォルダーに Directory.Build.props ファイルを追加する必要ありません。
プロジェクトファイルの設定値削除⚓︎
プロジェクトを新規作成したとき、 csproj ファイルには、ここまでに解説した設定と重複するものが自動的に追加されます。 このままでは、 csproj ファイルの設定値が有効になり、せっかく作成した Directory.Build.props ファイルが利用されません。 これまでの手順で行った設定値を参照しながら、 csproj ファイルに個別に設定されている値を削除します。
例えば、コンソールアプリケーションのプロジェクトを作成した場合、 csproj ファイルから削除すべき設定は以下の通りです。 csproj ファイルから設定を削除しても、 Directory.Build.props ファイルの設定が有効になります。
csproj ファイルから削除するべき設定値の例 | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
パッケージ集中管理の導入⚓︎
.NET アプリケーションでは、NuGet を用いて、様々なパッケージの参照や管理をします。 既定のまま NuGet を用いると、 csproj ファイルに参照する NuGet パッケージのバージョンを設定しなければなりません。 プロジェクト数が少ないうちは、この管理方法でも問題ありませんが、プロジェクト数が増えるにしたがって、管理は煩雑になっていきます。 こういった問題を解消するため、 NuGet 6.2 から パッケージ集中管理 機能が追加されました。 参照するパッケージのバージョンを 1 つのファイルで管理できるため、積極的な活用を推奨します。
パッケージ集中管理の機能を利用するには、アプリケーション全体に対するプロジェクト設定 で解説した ManagePackageVersionsCentrally
プロパティを有効にします。 ルートフォルダーの Directory.Build.props ファイルに設定すれば、すべてのプロジェクトに対してこの設定を反映できます。
続いて、ルートフォルダーに「 Directory.Packages.props 」という名前のファイルを作成します。 ファイル名は、大文字/小文字まで一致するように作成してください。 ソリューションをゼロから作成する場合は、以下のように <Project>
要素だけを定義します。
最初の Directory.Packages.props ファイル | |
---|---|
1 2 |
|
開発に Visual Studio を利用している場合は、ソリューションを開きなおして、パッケージ集中管理の機能を有効化してください。 Directory.Packages.props ファイルは、 NuGet を用いて外部のパッケージを参照したとき、自動的に設定が書きこまれます。
静的コード解析用パッケージと設定ファイルの導入⚓︎
コードの品質を一定以上に保つため、静的コード解析ツールを導入します。
.editorconfig⚓︎
複数の開発者で、一貫したコーディングスタイルを維持するために利用します。 また .NET 開発においては、静的コード解析ルールを調整するためにも利用します。
.editorconfig ファイルの配置⚓︎
.editorconfig ファイルを追加すると、ファイルを配置したフォルダーと、その配下のフォルダーすべての該当ファイルに設定値が適用されます。 .editorconfig の設定を下位フォルダーでオーバーライドできます。 オーバーライド設定を記述した .editorconfig ファイルを適用したいフォルダーに配置すると、それ以下のフォルダーでオーバーライドした設定が有効になります。
AlesInfiny Maris の標準的な構成では、ソリューションルートのフォルダーに、アプリケーション全体のコーディングスタイルを設定した .editorconfig ファイルを配置します。 tests フォルダーには、テストコード専用の設定をするための .editorconfig ファイルを作成して全体の設定をオーバーライドします。
.editorconfig ファイルについての詳細は「 EditorConfig で移植可能なカスタム エディター設定を作成する 」を参照してください。
.editorconfig のルール設定⚓︎
ソリューションルートに配置する .editorconfig ファイルは、 Visual Studio を用いて生成したファイルを使用します。 ルールの設定も Visual Studio を用いると、 GUI 上で設定変更できます。 詳細な手順は「 EditorConfig ファイルの追加と削除 」を参照してください。
tests フォルダーに配置するテストコード専用の設定は、原則コード分析ルールの設定のみ行います。 以下に設定例を示します。
tests フォルダーに配置する .editorconfig の例 | |
---|---|
1 2 3 4 5 |
|
設定値の解説
上記の .editorconfig では、主に XML コメントの記述制限緩和と、テストコード記述でよく利用する記法に対する制限を緩和しています。 詳細は以下の通りです。
ID | 緩和する理由 |
---|---|
SA0001 | テストプロジェクトの XML ドキュメントは不要なため。 |
SA1123 | テストコード内で #region を使ったコード整理を多用するため。 |
SA1600 | テストプロジェクトの XML ドキュメントは不要なため。 |
自動生成コードの静的コード解析
Visual Studio や .NET CLI など、コード自動生成機能が生成したコードに対する静的コード解析は原則実施しません。 .editorconfig ファイルはフォルダー単位でのルール設定が可能であるため、自動生成するコードと自分で実装するコードのフォルダーを分割しておくことを推奨します。 自動生成したコードを配置するフォルダーには、以下のようにすべての解析ルールを無効に設定した .editorconfig を配置します。
1 2 3 |
|
プロジェクト設定の都合によって、上記の設定では対処しきれない警告がある場合は、個別にルールの重大度を none
に設定します。 設定方法の詳細は「コード分析の構成オプション - Scope 」を参照してください。
StyleCop Analyzers⚓︎
複数の開発者で、一貫したコーディングスタイルを維持するために利用します。 .editorconfig では統一しきれない細かなコーディングルールを定義する目的に使用します。
StyleCop Analyzers のインストール⚓︎
StyleCop Analyzers は NuGet パッケージ として提供されています。 StyleCop Analyzers を用いて静的コード解析したいプロジェクトから参照設定を行ってください。 通常はすべてのプロジェクトから参照するように設定します。
StyleCop Analyzers のバージョンに注意
.NET 6 以降利用できるようになったファイルスコープ名前空間 を利用する場合、 StyleCop Analyzers 1.2.0 以降を使用してください。 1.1.118 では正常に解析が行われません。
stylecop.json ファイルの配置⚓︎
StyleCop Analyzers は、 stylecop.json ファイルを用いてコーディングルールを設定します。 stylecop.json にはソリューション内のすべてのコードに対して適用すべきコーディングルールを設定します。 stylecop.json ファイルはソリューション内にひとつだけ作成し、ソリューションファイルと同じフォルダーに配置します。 stylecop.json の設定方法については 公式ドキュメント を参照してください。
stylecop.json の設定例
StyleCop Analyzers 1.2.0-beta.435 に対応した stylecop.json の設定例を以下に示します。 特にこだわりがなければ、コピーしてそのまま利用可能です。
stylecop.json | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|
プロジェクトから stylecop.json を参照する⚓︎
stylecop.json は、各プロジェクトのルートフォルダーにあるかのように設定しなければなりません。 同時にコーディングルールの管理負荷軽減のため、 stylecop.json を各プロジェクトに分散配置せず、ソリューション内にひとつだけ配置することが望まれます。 これらを両立するため、各プロジェクトからは、ソリューションルートに配置した stylecop.json をリンクとしてプロジェクトに追加しましょう。 Visual Studio のソリューションエクスプローラーを利用して、 stylecop.json ファイルの [ビルドアクション] プロパティを [C# アナライザー追加ファイル] に設定します。 これにより、 StyleCop Analyzers の設定ファイルであることをコンパイラーに通知できます。
ここまで解説した内容を実施すると、最終的にプロジェクトファイルの設定は以下のようになります。
プロジェクトファイルの設定例 | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Directory.Build.props ファイルを利用して設定の統合を検討する
stylecop.json ファイルを各プロジェクトからリンクとして追加する操作は、煩雑なうえに間違いやすく、間違いに気付きにくい作業です。 設定誤りを起こさないために、 Directory.Build.props ファイルを用いて、設定の統合を検討してください。
AlesInfiny Maris の推奨するプロジェクト構成をとる場合、 csproj ファイルはソリューションルートから見て同じ深さのフォルダーに配置されます。 この前提をすべてのプロジェクトが満たす場合、 Directory.Build.props ファイルに stylecop.json ファイルを追加する設定が記述できます。 具体的には以下のように Directory.Build.props ファイルを設定します。
stylecop.json ファイルをリンクとして追加する Directory.Build.props ファイルの設定例 | |
---|---|
1 2 3 4 5 6 |
|
ソリューションルートの Directory.Build.props ファイルを上記のように設定したら、各プロジェクトファイルからは、 stylecop.json ファイルのへのリンク設定を削除できます。
メッセージリソースの追加⚓︎
プロダクションコード用のプロジェクト内で使用するメッセージを管理するために、リソースファイルを追加しましょう。 プロダクションコード用のプロジェクトに [Resources] フォルダーを追加し、その中に [Messages.resx] ファイルを追加します。 例外メッセージやログメッセージなど、プロジェクト内で使用するメッセージは、すべてこのリソースファイルに集約して管理します。
リソースファイルの作成は、 Visual Studio を用いるのが最も簡単です。 詳細な手順は「 .NET アプリ用のリソース ファイルを作成する 」を参照してください。
Visual Studio を用いてリソースファイルを作成すると、リソースファイルに定義したメッセージを取得するコードが自動生成されます。 また Visual Studio の GUI 上で、リソースの公開範囲を指定できます。 リソースの公開範囲は internal
にすることを推奨します。 同じメッセージが複数のプロジェクトで使われる場合も、プロジェクトごとにリソースを管理しましょう。
同じメッセージが複数のプロジェクトで必要になるパターン
同じようなメッセージが複数のプロジェクトで必要になった場合は、そのメッセージを使用する処理を共通処理として抽出できないか検討しましょう。 通常メッセージは何かの事象に対して 1 つ設定されます。 仮に同じメッセージを複数の場所で使うことになるのであれば、同じ処理が複数の場所にコピーされている可能性が考えられます。
また同じメッセージであっても、異なる事象を表すのであれば異なるメッセージとして定義することを検討しましょう。 メッセージが本当に同じで良いか、見直してみる価値があります。
-
アプリケーションの既定のカルチャを設定します。日本語を既定値に用いるシステムの場合は
ja-JP
を設定してください。 ↩