メインコンテンツまでスキップ

【C#】 名前空間の命名方針


私の C# プロジェクトにおける名前空間の命名方針について記載します。

注意

この記事は、私個人の技術利用方針であり、推奨事項やベストプラクティスの主張ではございません。
個人的なアプローチ例の紹介であり、すべてのプロジェクトや環境に最適とは限りませんが、参考にしていただけると幸いです。


1. 基本的な考え方

基本的に、MicrosoftのC#における名前空間の命名方針に従います。

参考: 📤Microsoft - 名前付けのガイドライン - 名前空間の名前

上記に従い、私のC#の名前空間は、以下のように命名します。

Ateliers.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

2. 名前空間の命名方針の概要

  • Ateliers は、私のプロジェクトの全てにおいて、名前空間のルートとします。
  • 英単語を組み合わせて構成します。テクノロジー名やサービス名、国際的に通用する明瞭な英語を使用します。
  • パスカルケースを使用し、必ず先頭は大文字で始めます。途中に大文字を含めるのも可能とします。
  • 数字は使用可能です。(システム的に先頭には使用できません)
  • 適切に略語を使用します。略語の意味を明確にし、一般的ではない略語とプロジェクト固有の略語は、極力避けます。
  • ハイフン("-")やアンダースコア("_")および特殊文字は使用しません。

その他の方針については、Microsoftのガイドラインに従うため、省略します。
LogText などの競合しやすい名前は使わない、など)

次に、これらの命名方針の理由を具体化します。

2.1. 命名方針:推奨事項の具体的理由

  • Ateliers は、私のプロジェクトの全てにおいて、名前空間のルートとします。

ateliers.dev が私の保有ドメインであるため Ateliers を名前空間のルートとすることで、他のプロジェクトとの競合を避けます。

  • 英単語を組み合わせて構成します。テクノロジー名やサービス名、国際的に通用する明瞭な英語を使用します。

英単語を組み合わせることで、名前空間の理解を容易にします。

  • パスカルケースを使用し、必ず先頭は大文字で始めます。途中に大文字を含めるのも可能とします。

C#の標準的な命名規則です。パスカルケースを使用します。

  • 数字は使用可能です。(システム的に先頭には使用できません)

特別な特記事項となる項目はありませんが、C#では先頭に数字を使用することはできません。

2.2. 命名方針:注意事項の具体的理由

  • 適切に略語を使用します。略語の意味を明確にし、一般的ではない略語とプロジェクト固有の略語は、極力避けます。

略語を適切に使うことで、冗長な名前空間を避けます。
これにより、名前空間の素早い理解ができるようにすることが目的です。

しかし、略語は一般的では無かったりプロジェクト固有のものを使うと、理解が難しくなる可能性があるため、極力避けるようにします。
(極力であり、使ってはならない、というわけではありません)

例えば、ユーザー管理機能 (User Management) を UM と略すと、他の開発者が理解するのに時間がかかる可能性があります。
このような場合は、略語を使わずに UserManagement とすることで、他の開発者が理解しやすくなります。

2.3. 命名方針:禁止事項の具体的理由

  • ハイフン("-")やアンダースコア("_")および特殊文字は使用しません。

ハイフン("-")およびアンダースコア("_")は、どちらも仕様上は利用が可能ですが
C#の名前空間においての利用はあまり一般的ではないため、使用しないようにします。

特殊文字は異常に繋がる可能性があるため、使用しないようにします。


3. リポジトリへの名前空間適用

リポジトリ作成の際は、名前空間を使用してリポジトリを作成します。

例えばソリューション Ateliers.Functions.GPTAPI からリポジトリを作成する場合
リポジトリ名は ateliers-functions-gptapi となります。

より詳しいリポジトリの命名方針については、以下の内部ドキュメントを参照してください。

参考: 📄GitHub ガイドライン - リポジトリの命名方針↩️

3.1. ソリューションが複数プロジェクトを持つ場合

以下のように、ソリューションが複数プロジェクトを持ち、どれをリポジトリ名とするか、あいまいなケースがあります。

  • Ateliers.Training.PresentationLayer.BlazorWebApp
  • Ateliers.Training.PresentationLayer.MAUIApps
  • Ateliers.Training.PresentationLayer.WebAPI

この場合、ソリューション名は各プロジェクト共通のルート Ateliers.Training.PresentationLayer とします。
リポジトリ名は ateliers-training-presentationlayer とします。


4. テストプロジェクトの名前空間

テストプロジェクトの名前空間は、以下のように命名します。

Ateliers.Functions.GPTAPI のテストプロジェクトを作成する場合:

テスト種別名前空間
単体テストAteliers.Functions.GPTAPI.UnitTests
結合テストAteliers.Functions.GPTAPI.IntegrationTests
テストリソースAteliers.Functions.GPTAPI.TestResources
StabAteliers.Functions.GPTAPI.Stubs

単体テストは Mock を使用し、結合テストは Stub を使用します。
より詳しいテストについては、テスト戦略のドキュメントを参照してください。
(作成中)


5. 命名規則の例外ケース

 現在のところ、例外ケースの追加は、特にありません。


6. 使用中の名前空間

プロダクト以外の名前空間は、以下のように命名して使用中です。
随時更新します。

名前空間利用目的
Ateliers.Core全プロジェクトの中核となるコアライブラリ
Ateliers.Functions.【機能名】単体機能の NuGet を提供するソリューション
Ateliers.Training.【学習名】個人の学習や研究用のソリューション
Ateliers.Lectures.【教材名】講義や機能説明用のソリューション

6.1. 使用不可の名前空間

以下は C# 以外で使っているため、使用しないでください。

リポジトリ名利用目的
ateliers-dev当WEBサイトのリポジトリ
ateliers-shared-resources共有リソース用のリポジトリ
ateliers-ai-assistantsAIサポート機能用のリポジトリ

フィードバックの提供方法や連絡先

連絡先

この記事に関するフィードバックやご質問、ご意見がございましたら プロフィールページの連絡先 からお気軽にご連絡ください。
貴重なディスカッションをお待ちしております。