メインコンテンツへスキップ

メンバの命名規則


1.メンバとは

メンバは、
オブジェクトが持つ
「プロパティ(変数)」と
「メソッド(関数)」を
指します。

メンバとは、JavaScriptにおいて主にオブジェクト指向プログラミング(OOP)の文脈で用いられる用語で、オブジェクトに属する変数や関数を指します。 具体的には、オブジェクトが持つ「プロパティ(変数)」と「メソッド(関数)」を「メンバ」と呼びます。

ここでは、ファイルを1つのまとまりと見て、変数(定数を含む)と、関数, mixinとその引数と、オブジェクトとそのプロパティ, メソッドと、クラスを指すことにしています。


2.基本方針

「_abCcDd55xxxxxnn」
部分 意味 備考
_ 部品を示す
接頭辞
Sassのパーシャル意識。ローカルの作業用, 別ファイルへの非公開を表す。
a 種類接頭辞 変数, 関数, mixin, オブジェクト, プロパティ, メソッドなど種類を表す。
b 型値接頭辞 型・戻り値・出力などを表す。
Cc 所属接頭辞 所属を表す。フォルダ区分。
Dd 用途接頭辞 用途を表す。ファイル区分。
55 詳細番号 ファイル内区分。
xxxxx 内容名 機能や用途を示す短い英字小文字。アンダーバーやハイフンは禁止。
nn 用途番号 同じ機能の深度を表す。
  • 対象として、変数, 関数, mixin, オブジェクト, プロパティ, メソッド, クラスなどを想定しています。
  • 「_abCcDd55xxxxxnn」

    形式としては、ローワーキャメルケースを採用。厳密には接頭語の1, 2が英字小文字で、3が英字大文字英字小文字の組み合わせで以降がキャメルケースの名称であり、末尾2桁が2桁であるので、名称の部分はアッパーキャメルケースです。

  • スコープが mixin, function などのメンバ内の物を除き、名称はプロジェクトで一意になるようにする。(名称だけで、どこで定義されているか分かる事が目的です)
  • スコープで 関数/ブロック内のスコープは、命名では扱わない。ファイル内スコープとして表す。実質、グローバルか否かの区分けに留めるという事です。グローバルスコープ, ローカルスコープの2つです。
  • 例外として、引数は逆にプロジェクトで意味ごとに同一とする。尚、当該言語が用意している機能を意図した引数は、その機能と同じ引数名とする。Sassのビルトイン関数を意識しての規則です。
  • 例外として、キー項目とデータ項目からなるデータの項目名などは対象外とする。これは一般的な名称などのデータを、そのまま項目名とする事で索引の意味がある場合がある為です。
  • 例外として、クラス(ES6 以降のclass構文)は、慣習的な区別に合わせてアッパーキャメルケース(全ての単語の先頭を大文字)にする。
  • 上記を踏まえたうえで、名称は以下の形式とする。
    • 先頭: メンバのスコープを表します。言語によってスコープの判断は異なります。故に規約で意図を明示する事としています。
    • 1桁目: メンバの種類を表します。
    • 2桁目: データの型(用途, 戻り値, 出力するスタイル)を表します。

3.スコープ(先頭)

接頭辞 意味
_ ローカルスコープを表す。
なし グローバルスコープを表す。

引数, プロパティ, メソッドは、そもそも関数やオブジェクト内と分かっている事と、構造をまとめての代入が可能なので、この接頭辞は付与しない。

このスコープは、別のファイルからそれが使えるか否かを表すだけです。関数スコープ, ブロックスコープを表すものではありません。また関数スコープ, ブロックスコープは名前では表しません。


4.メンバの種類(1桁目)

接頭辞 意味
l ローカルスコープの変数。letでの定義を想定。
g グローバルスコープの変数。意図的に全部の箇所で使える事を明示。
c 定数。constはブロックスコープを持つので、グローバルスコープの場合や const がない言語では、varでの定義となります。
s 静的変数(static)。staticを明示したい時に使用。
f 関数。型が関数の変数も用途が関数としてならばメンバの種類は関数として扱う。単なる保持は変数。
m mixin。
a 引数(ローカルスコープですが'_'(アンダーバー)は付けません)
p プロパティ(ローカルスコープですが'_'(アンダーバー)は付けません)
m メソッド(ローカルスコープですが'_'(アンダーバー)は付けません)
v 任意, 未定を表す。

この接頭辞は、英字小文字1文字です。大文字にすると、クラスの見分け方と混じります。


5.型・戻り値・出力(2桁目)

接頭辞 意味
v 型が任意('any')である事を表します。戻り値, 出力がない場合も表します。'a'は引数で使用。
n 型が数('number')である事を表します。(「単位あり」も含みます)
u 型が数('number')で単位なし('unitless')である事を表します。
i 型が数('number')で整数 ('integer')のみを保持する事を表します。(「単位あり」は含みません)
s 型が文字列('string')である事を表します。(「引用符なし」も含みます)
c 型が色('color')である事を表します。文字列の色指定のみ保持での使用可
l 型がリスト('list'), 配列('Array')である事を表します。
m [廃止予定]型がマップ('map')である事を表します。[JavaScriptにMapオブジェクトがあるので、o:オブジェクト('object')に統合]
o 型がマップ('map'), オブジェクト('object')である事を表します。
b 型が真偽値('boolean')である事を表します。
f 型が関数('function')である事を表します。ただし型が関数の変数はメンバの種類を関数として扱う。その場合はその関数の戻り値が2桁目となる。var fvTsFunction=()=>{};
a 型が引数リスト('arglist')である事を表します。
x 型・戻り値・出力の表現が不要。mixinなどで使用。

この接頭辞は、英字小文字1文字です。複数の型を認める場合は、代表を表します。関数, メソッドの場合は戻り値で、それ以外は型です。 mixin でコンテンツとしてブロックを渡せるか否かを表す事を検討しましたが、表現は不要としました。


6.所属分類

3, 4桁目にフォルダ区分を、英字大文字1文字に続けて英字小文字1文字で記します。

  • 所属するフォルダのフォルダ区分を付けます。これにより、所属が分かり易くなります。
  • フォルダ区分はその開発環境で一意となるようにする。
  • 引数, 属性引数は業務で共通としたいので、所属ではなくて例外として、'Ag', 'ag'とします。 引数は、残余引数などでそのまま別の関数呼び出しに使えるので、所属は操作の妨げになります。
  • プロパティ, メソッドは業務で共通としたいので、所属ではなくて例外として、'Ob'とします。 プロパティ, メソッドは、オブジェクト単位で受け渡しが可能であり、オブジェクトの構造に意味がある場合があるので、所属は操作の妨げになります。
  • 所属は役割を表す事がポイントで、例外を用意する場合でも、用途が不明となるような分け方はしないように注意願います

7.用途分類

5, 6桁目にファイル区分を、英字大文字1文字に続けて英字小文字1文字で記します。省略が可能であり、その場合は以降の桁位置が繰り上がます。

  • Xx: 英字大文字1文字から始まり、2文字目は英字小文字だけとします。必要に応じて各フォルダ内の内部規約に定めて使用します。
  • 引数, 属性引数, プロパティ, メソッドは例外として、ファイル区分を使用しません。名称を表します。5-8桁目を省略として9桁目以降の規約に準じます。
  • 上記以外: 名称を表します。5-8桁目を省略として9桁目以降の規約に準じます。
  • 読み取り方: 7, 8桁目が数字で9桁目が英字大文字の場合は、ファイル内区分を使用と判断してファイル区分が指定されたものとします。
    7桁目が英字大文字の場合は、内容名の頭と判断してファイル区分が指定されファイル内区分は指定されていないものとします。
    上記以外の場合は、内容名の途中と判断してファイル区分が指定されていないものとします。

8.詳細分類

7, 8桁目にファイル内区分を、数字2桁で記します。省略が可能であり、その場合は以降の桁位置が繰り上がます。

  • nn: 数字だけとします。
  • ファイル区分を省略した場合は、指定は不可とします。
  • ファイル区分を指定した場合は、指定は任意とします。
  • 読み取り方: 7, 8桁目が数字で9桁目が英字大文字の場合は、ファイル内区分を使用と判断してファイル区分が指定されたものとします。
    7桁目が英字大文字の場合は、内容名の頭と判断してファイル区分が指定されファイル内区分は指定されていないものとします。
    上記以外の場合は、内容名の途中と判断してファイル区分が指定されていないものとします。(ファイル内区分も指定されていないものとします。)

9.内容名

9桁目以降(下2桁除く)に内容名を、英字大文字1文字に続けて英字小文字で記します。前の各区分の省略が可能であり、その場合は桁位置が繰り上がます。

  • Xxxxx: 英字大文字1文字から始まり、2文字目は英字小文字, それ以降は0文字以上の英数字小文字だけとします。(キャメルケース)(一部区切りの頭を英字大文字にします)
  • 検索を容易にする為に、短すぎる名称は避ける。
  • 記述を容易にする為に、長すぎる名称は避ける。
  • ファイル区分を省略した場合は、ファイル区分との区別の為に最初の単語を3文字以上とする。(7桁目が英字小文字となるようにする。)
  • 8桁目以前で省略があった場合に、桁位置がずれるので注意
  • 読み取り方: 7, 8桁目が数字で9桁目が英字大文字の場合は、ファイル内区分を使用と判断してファイル区分が指定されたものとします。9桁目から内容名とします。
    7桁目が英字大文字の場合は、内容名の頭と判断してファイル区分が指定されファイル内区分は指定されていないものとします。7桁目から内容名とします。
    上記以外の場合は、内容名の途中と判断してファイル区分が指定されていないものとします。(ファイル内区分も指定されていないものとします。)5桁目から内容名とします。

10.用途番号

下2桁に用途番号を、数字2桁で記します。末尾を表す意味もあるので、省略は不可。

  • '00': 内部処理用(非公開)
  • '01': 基本処理
  • '02'-'09': 基本処理の臨時版数管理
  • '11': 一括処理
  • '12'-'19': 一括処理の臨時版数管理

11.特別な末尾2桁の付与(任意)

「vvGlSample00SV」, 「vvGlSample00WK」, 「vvGlSample00XX」

※ 以下は例示ではなく、決まり事です。付与の有無は任意だが、内容は決められたものだけです。 必要に応じて決まり事の追加は可能ですが、それは規約を改定するという事です。当然、他の規約の制約を受けます。

  • 'SV': 変更の為に、元の内容を保持する。最終的には外部に移動か破棄する。

    FolderSV/ が存在する時には、Folder/ も必ず存在していなければなりません。つまり FolderSV/ は、ある時点の Folder/ を複写したものです。

  • 'WK': 検証で当該フォルダ, ファイルを一時的に無効にする為に付与する。最終的には取って元に戻す。

    FolderWK/ が存在する時には、Folder/ は存在してはなりません。つまり FolderWK/ は、Folder/ をリネームしたものです。

  • 'XX': 廃棄予定のフォルダ, ファイルに付与する。本当に廃棄して問題ないか確認するまでの仮の処置です。最終的には元に戻すか破棄する。

    FolderXX/ が存在する時には、Folder/ は存在してはなりません。つまり FolderXX/ は、Folder/ をリネームしたものです。

現時点では、上記の3つだけに限定しています。これは安易なファイルのコピーによる増加を防ぐためです。 尚、セーブや履歴管理は、別途に行ってください。別ファルダの用意やツールの導入でないと、管理が煩雑になります。