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

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

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

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

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

  1. npm はモジュールをフラットな名前空間で管理しており、npm 全体でユニークな名前をつける必要があります
  2. モジュール名に利用可能な文字種は a〜z, 0〜9, ドットとアンダーバーだけで、A〜Zは利用禁止です
  3. そして、大抵の名前は、既にどこかの誰かに取得されています

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

既に npmjs.org に登録済みの名前は npm に登録するモジュール名(パッケージ名)には指定できません。つまり package.json の name に設定できません(npm publish の段階でエラーになります)。

使いたい名前が、登録済みかどうかを調べるには、$ npm search キーワード で検索できます。

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