Skip to content
uupaa edited this page Jun 1, 2014 · 19 revisions

WebModule のモジュール名について

このエントリでは、WebModule をベースにしたモジュールの命名について説明します。

npm のモジュール名の命名規則について

初めて npm にモジュール(パッケージ)を登録しようとした方は、いくつかの制約が存在することに気がつくはずです。

  1. モジュール名に利用可能な文字種は a〜z, 0〜9, ドットとアンダーバーだけで、A〜Zは利用禁止です
  2. npm はモジュールをフラットな名前空間で管理しており、npm 全体でユニークな名前をつける必要があります
    • 既に npmjs.org に存在する名前は使えません
    • そして、大抵の名前は、既にどこかの誰かに取得されています
    • package.json の name が衝突するとエラーになります(npm publish の段階でエラーになります)

例えばあなたが、非同期問題を美しく解決するモジュールを開発し、モジュール名を async にしたくても、その願いは恐らく叶いません。ドメイン名の登録と同じような、やり場のない敗北感を味わうのが現状です。

名前の衝突が発生するかどうかは $ npm search キーワード が調べることが可能ですが、npm search コマンドのレスポンスが30秒〜50秒ほど返ってこない事もあり、「最初から衝突しない名前空間を設計する」事がより重要になってきます。

2つの名前

WebModule をベースとしたモジュールは、2つの名前を持つことになります。

1つ目は github のリポジトリ名です。これは Valid.js のような名前になります。
2つ目は npm に登録してあるモジュール名です。これはユーザ名を先頭に付けた uupaa.valid.js のような名前になります。

本来は、github と npm の名前を統一できれば良いのですが、このエントリの上部で述べたようなパッケージマネージャのシステム上の理由により、ダブルネームを使い分ける必要があります。

モジュール名の命名規則

WebModule が推奨するモジュールの命名規則は、以下の通りです。

  1. github に登録するモジュール名はある程度自由に命名可能ですが、以下の点に注意してください

    • モジュールの機能を端的に表したキーワードを設定してください。単語と単語の接続にはハイフンかアンダーバー使ってください
    • JavaScriptで書かれたモジュールなら、末尾は ".js" にしてください
  2. npm に登録するモジュール名は、先頭にgithubのユーザ名を付け、全体を小文字にしてください。

    var moduleName = [GITHUB-USER-NAME, GITHUB-MODULE-NAME, ".js"].join(".").toLowerCase();

末尾に ".js" をつける理由

npm 公式では「モジュール名(パッケージ名)の末尾に".js"をつける必要はありません。不要です」と説明がありますが、WebModule では ".js" をつける事を推奨しています。理由は2つあります。

  1. github 上のモジュール名と ⇔ npm 上のモジュール名の関係性が明白になるため(自動変換が簡単になるため)

    // github リポジトリ名が "https://github.com/uupaa/Valid.js" の場合は、
    // 以下の式で github 名から npm 名を生成できます
    
    "uupaa/Valid.js".replace("/", ".").toLowerCase(); // -> "uupaa.valid.js" 
  2. AltJS のように js をトランスレーションで作成するケースが増えてきたため、モジュール名の末尾に記述言語を、".ts" や ".coffee" のように付けたほうが分類しやすいため

です。

モジュールの命名例

モジュールの命名例です。

// package.json

{
  "name": "valid"       // 既に存在するため npm publish でエラーになります
}
// package.json

{
  "name": "uupaa.Valid.js", // npm 名を指定します
  "url":  "https://github.com/uupaa/Valid.js", // github 名を指定します
  "repository": {
    "type": "git",
    "url":  "https://github.com/uupaa/Valid.js.git"
  },
  "x-build": {
    "module": {
      "develop":    ["uupaa.reflection.js", "uupaa.help.js"], // npm 名を指定します
      "release":    ["uupaa.nodemodulejs"]                    // npm 名を指定します
    }
  },
  "dependencies": { // npm 名を指定します
  },
  "devDependencies": { // npm 名を指定します
    "uupaa.nodemodule.js": "",
    "uupaa.reflection.js": "",
    "uupaa.console.js": "",
    "uupaa.help.js":    "",
    "uupaa.task.js":    "",
    "uupaa.test.js":    "",
    "uupaa.watch.js":   "",
    "uupaa.plato.js":   "",
    "uupaa.minify.js":  ""
  },
}
Clone this wiki locally