Skip to content

MS_PackageNameVsNamespace

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

パッケージ名と名前空間の違い

パッケージ名と名前空間の違い

「Java のパッケージ名」と「.NET の名前空間」の違いについて

補足(そもそも別の概念である): 名前が似ているが、
担っている役割の範囲が違う点を先に押さえるとよい。

Java のパッケージ .NET の名前空間
名前の衝突回避
ディレクトリ構造との一致 必須(強制される) 任意(一致させなくてよい)
アクセス制御の単位 (package-private がある) ×(名前空間に可視性の概念は無い)
配置の単位 jar(パッケージとは独立) アセンブリ(名前空間とは独立)

つまり **Java のパッケージは「物理と論理を兼ねる」**が、
**.NET の名前空間は純粋に「論理的な名前の入れ物」**である。
.NET では

  • 1 つの名前空間が複数のアセンブリにまたがってよい
  • 1 つのアセンブリが複数の名前空間を含んでよい
  • フォルダ名と名前空間が一致しなくてよい(規約としては一致させる)、

という自由度がある。
可視性の制御は名前空間ではなく **internal(アセンブリ内)**が担う。

Java のパッケージ名

パッケージ名は、

  • 製品:「jp.co.hitachi_solutions.(ファミリ名).(製品名).(サブシステム名など任意)」
  • システム:「jp.co.hitachi_solutions.(システム名).(サブシステム名など任意)」

などが一般的です。

先頭の要素は、正規に取得しているドメイン名を、構成毎に逆にしたものになります。

また、パッケージ名は、小文字しか利用できません。

補足: 「小文字しか利用できません」は正確には
言語仕様上の制約ではなく規約(Java の命名規則)である。
ただし、大文字小文字を区別しないファイルシステム(Windows)で
問題が起きるため、実質的に守るべき規則になっている。

.NET の名前空間

.NET の名前空間は、

  • 製品:「HitachiSolutions.(ファミリ名).(製品名).(サブシステム名など任意)」
  • システム:「HitachiSolutions.(システム名).(サブシステム名など任意)」

などが一般的です。

.NET の名前空間の頭文字は、大文字が推奨されています。

補足(Microsoft の規約): 名前空間は
<会社名>.<製品名>[.<機能>][.<デザイン>] が推奨されている
PascalCase)。
Java のようにドメインを逆順にする慣習は無い。

実務上の注意として、

  • 名前空間と型名を同じにしないFoo.Foo は解決が曖昧になる)
  • 既存の .NET の名前空間と衝突させないSystem.* を自作しない)
  • 会社名は略さない(HS. ではなく HitachiSolutions.

といったものがある。

共通

名前空間(パッケージ名)には、「 - 」を使えません。
このため「 - 」は「 _ 」等に置換する必要があります。
「hitachi-solutions」 → 「hitachi_solutions」などとなります。

「サブシステム名など任意」の部分には

  • 大規模なシステムでは業務の ID など

  • 小規模のシステムでは

    • コンポーネント区分
    • 論理階層(レイヤ)

    の ID など

が適用される事が多いようです(プレフィックスなどと併用される)。

補足(- が使えない理由): 名前空間・パッケージ名は
識別子(identifier)であり、- は演算子(減算)と
区別が付かないため使えない。
一方、NuGet のパッケージ ID
は識別子ではなく
単なる文字列なので - を含められる
(例: Microsoft.Extensions.DependencyInjection.Abstractions. のみだが、
Newtonsoft.Json のように慣例で . を使うものが多い)。

NuGet パッケージ ID   … Foo.Bar-Baz  (- を含められる)
アセンブリ名           … Foo.Bar.Baz.dll
名前空間               … namespace Foo.Bar.Baz  (- は不可)

3 つは独立しているが、規約としては揃えるのが分かりやすい。

具体例

先頭要素は、基本的に

  • 「企業名」(名前空間の場合)
    HitachiSolutions

  • 「企業の逆ドメイン※」(パッケージ名の場合)
    jp.co.hitachi_solutions

となります。

OSS に関しては、

  • 「OSS 名」(名前空間の場合)
  • 「OSS コミュニティのドメイン※」(パッケージ名の場合)

などが一般的です。
※:正規に取得している(企業や OSS のサイトの)ドメイン名を、構成毎に逆にしたもの。

補足(なぜドメインを使うのか): Java の逆ドメイン方式は、
**「世界中で一意であることを、既存の仕組み(DNS)に委ねる」**という発想である。
ドメインは重複しないので、それを逆順にすれば衝突しない。

.NET が会社名で足りるとしているのは、
アセンブリの厳密名(Strong Name)や
NuGet のパッケージ ID の一意性
が別途担保されるためで、
名前空間自体に世界一意性を求めていないという設計判断による。

参考

Microsoft Learn


Tags: 移行, プログラミング, .NET開発

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally