このページの本文へ移動

標準化規約
2.Java標準化規約


Javaアプリケーションを開発する上での、標準化規約の例をご紹介します。

以下でご紹介する標準規約は、Java開発規約チェッカSIMPLIA/JF Kiyackerで提供しているものです。
SIMPLIA/JF Kiyackerを利用することで、作成したJavaソースコードが標準規約に従っているかどうかを自動的にチェックできますので、アプリケーションの品質向上を図ることができます。
SIMPLIA/JF Kiyacker製品情報ページ

Java標準化規約の利用方法

Java標準化規約(基本規約)は以下の5規則より構成されています。

ファイル規約 ファイルの作成に関する規約。
ファイル名、コード体系、最大行数などを規定。
コーディング規約 コーディングの書式についての規約。
最大文字数、インデント、記述順序、ネストの深さなどを規定。
命名規約 クラス名、変数名、メソッド名の命名規約。
コメント規約 コメントの記述規約。
Javadoc出力を意識して規定する。
パッケージ規約 パッケージ名の規約。

本規約をプロジェクトの用件にしたがってカスタマイズし、適用してください。
カスタマイズ可能な部分については赤文字で記述されています。
規約の種類(重み付け)も参考にしてください。
デフォルトで良い場合は、このままご利用ください。 ただし名前については決定する必要があります。

規約の種類
J Java標準規約。
必ず適用。
A,B,C プロジェクト標準規約。
プロジェクトで判断して適用。
A:最重要規約(必ず適用してください)
B:重要規約(適用を推奨します)
C:任意規約

ファイル規約

規約コード 分類 種類 規約
K1F10001 共通 J ファイル名は「クラス名.java」または、
「インターフェース名.java」であること。
K1F10002 J クラスのファイル名に日本語を使用してはいけない。
K1F10003 J ファイル名には英大文字小文字を区別する。
K1F10004 J 1Publicクラス1ソースファイルであること。(内部クラスは除く)
K1F10005 B コード系がSJIS形式で記述されている。
[備考]
EUCコードはチェッカ対象外
K1F10006 B ファイル名はクラス名の命名規約に従ってつけること。
K1F10007 B ファイルは最大500行までであること。

コーディング規約

規約コード 分類 種類 規約
K1C10001 共通 C 1行は最大120文字までであること。
K1C10002 C インデント幅は4文字分であること。
K1C10003 C インデントはタブで行われていること。
K1C10004 宣言と文 C 原則として1行に1つの宣言、あるいは1つの文であること(カンマおよびセミコロンで同時に宣言しない)。 特に初期値を持つ場合は単独行であること。
【良い例】int I // これは可
【悪い例】int k, n = 1; // これは不可
K1C10005 C 変数などの宣言は使用するブロックの先頭( { の直後)で行われていること。 ただし、for文のインデックス変数は例外とする。
【例】
void method1(){
int i; // ローカル変数宣言が最初にくる
K1C10006 A 内側の宣言が外側の宣言を隠さないように、異なった変数名が使用されていること。
K1C10007 C ローカル変数の基本データ型は宣言と同時に初期化がされていること。
K1C10008 C 配列の宣言は型に [ ] をつけて行う。
【例】
char buf[];
配列宣言の [ ] の位置が型又は変数名に統一されているか。
K1C10009 C 配列の作成はできる限り配列の大きさを明確にする。
【例】
buf = new char[5];
K1C10010 B 文のネストは最大で5であること。
[備考]
ネストが深くなる場合は以下の対処を検討
・switch文の利用
・メソッド化
K1C10011 記述順序 J クラス内の記述順序が以下の通りにされていること。
(1)ソースヘッダコメント
(2)パッケージ宣言
(3)インポート宣言
(4)クラス、インターフェース宣言
(5)クラス変数宣言
(6)インスタンス宣言
(7)コンストラクタ
(8)メソッド
K1C10012 C field modifierは、(public、protected、private)、static、final、transient、volatileの順に記述されていること。
K1C10013 C メソッドは、機能ごとにまとめて記述されていること。
K1C10014 C method modifierは、(public、protected、private)、abstract、static、final、synchronized、nativeの順に記述されていること。
K1C10015 インポート B import文で指定するクラスは "パッケージ名.クラス名" で指定する。 クラス名を " * " で省略しない。
ただし、JDK標準、ミドルウェアで提供されるクラス、および共通部品で提供されるクラスは省略可能とする。
K1C10016 クラス C class modifierは、可視性(public、protected、private)→abstract→static→finalの順で記述されていること。
K1C10017 J 継承の指定は、extends、implementsの順で記述されていること。
K1C10018 C 実装するinterfaceが複数存在する場合は、アルファベット順にカンマ区切りで記述されていること。
K1C10019 C クラスの宣言時に、" { " までが長く、改行する場合には、extends、implementsの前で改行し、4文字のインデントがされていること。
K1C10020 メソッド C メソッド内は最大50行までであること。
K1C10021 制御構造 B if-else if-elseは以下の通りに記述されていること。
if (condition1) {
statements1;
} else if (condtion2) {
statements2;
} else {
statements3;
}
実行文が1文でも必ず { } が使用されていること。
[備考]
同じステートメント群がコード上に複数ある場合は、メソッド化を検討する。
K1C10022 B for文は以下の通りに記述されていること。
for (initialization; condition; update) {
statements;
}
実行文が1文でも必ず { } が使用されていること。 ただし実行文が無い場合は以下の記述でも可。
for (initialization; condition; update);
K1C10023 C for文のinitialization部、update部にカンマで記述できるのは2つまでであること。
K1C10024 B while文は以下の通りに記述されていること。
while (condition) {
statements;
}
実行文が1文でも必ず { } が使用されていること。
K1C10025 B switch文は以下の通りに記述されていること。
switch (condition) {
case 値1:
case 値2:
statements1;
break;
case 値3:
statements2;
break;
default:
statements3;
break;
}
実行文が1文でも必ず { } が使用されていること。
K1C10026 B switch文でbreakしないでその下へ抜ける場合には、その位置に必ずコメントが記述されていること。
K1C10027 C switch文でbreakの直後に空行が挿入されていること。
K1C10028 例外 B try-catch文は以下の通りに記述されていること。
try {
statements1;
} catch (ExceptionClass e) {
statements2;
} finally {
statements3;
}
K1C10029 改行 C クラス宣言のプレコメントの前が1行開けられていること。
K1C10030 C メソッドのプレコメントの前が1行開けられていること。
K1C10031 C 式の途中で改行する場合は以下の通りにされていること。
・カンマの後で改行されていること。
・演算子の前で改行されていること。
・演算順位がより低いもので改行されていること。
・改行した次の行は、前の行の同じレベルの式とそろうように記述されていること。(対応する括弧内の記述位置から開始する)
・以上の原則に従って改行した際に、読みにくくなる場合は8文字下げて記述されていること。
・以上の原則に従って改行した際に、その次の行とインデントが同じレベルになってしまう場合、空行が記述されていること。
・原則として、" && " または " || " の前で改行されていること。
但し、" & " と " | " の前で改行されていないこと。
if (abc != null
&& abc.xyz == 0) {
doSomethingAboutIt();
}
K1C10032 連続 C メソッド名と " ( " が連続して記述されていること。
K1C10033 C 単項演算子とその引数が連続して記述されていること。
K1C10034 C キャストとその引数が連続して記述されていること。
K1C10035 空白 C キーワードと " ( " の間が1文字空けられていること。ただしsuperとthisを除く。
K1C10036 C キーワードと " { " の間が1文字開けられていること。
K1C10037 C " ) " と " { " の間が1文字開けられていること。
K1C10038 C " . " (dot)以外の二項演算子およびinstanceofの前後に空白文字を挿入すること。
K1C10039 C for文中の " ; " の後ろが1文字開けられていること。
K1C10040 C " ( " ・ " [ " の直後、" ) " ・ " ] " の直前には空白が記述されていないこと。
K1C10041 { } A " { " は宣言行の末尾に記述されていること。
" } " は単独の行とし、適切なインデントがされていること。
K1C10042 B If-else文やfor文などの制御構造の一部である場合、すべての文を " { } " (中括弧)で囲まれていること。 単独の文の場合も、" { } " で囲まれていること。
K1C10043 C { } の記述で、中身が存在しない場合には、連続して " {} "と記述されていること。
K1C10044 C { } の中身が大量な場合には、" } " の直後に閉じる構文を示すコメントが記述されていること。
K1C10045 利用不可 B do-while文が使用されていないこと。
K1C10046 B break命令におけるラベルへのジャンプが使用されていないこと。

命名規約

(1)クラス名/インターフェース名
規約コード 分類 種類 規約
K1N10001 共通 J クラス名、または、インターフェース名に使用可能な文字は半角英数字と追加文字のみであること。
K1N10002 A 先頭文字は英大文字で始められていること。
K1N10003 A クラス名は、名詞または名詞句で表現されていること。 不必要な省略はしないこと。
【例】プレフィクスがABCの場合
ABCStatusba,
ABCCheckList,
ABCPassbookPrinter
K1N10004 A 2つ以上の単語を使用する場合は、1つめの単語の先頭のみ大文字で記述されていること。
K1N10005 B 日本語を利用する場合は、訓令式の読み方をローマ字で記述されていること。
K1N10006 C 単語は英単語を使用すること。
K1N10007 C 文字長は最小5文字、最大20文字の範囲で記述されていること。
K1N10008 プレフィクス B プレフィクスをつけていること。
K1N10009 B プレフィクスは3文字で、すべて大文字であること。
K1N10010 画面共通 C 「UI」+コンポーネント名で命名されていること。
K1N10011 業務共通 C 業務名+機能名で命名されていること。
K1N10012 画面 C 業務名+処理名+Panelで命名されていること。
[備考]
panelで画面を作成した場合
K1N10013 インターフェース C 略語を含む場合は、略語部分はすべて大文字でも可。
K1N10014 C 名詞または名詞句だが、オブジェクトに何らかの能力を与えるものであれば、形容詞が使用されていること。
(2)変数名
規約コード 分類 種類 規約
K1N20001 フィールド変数 A フィールド変数名に使用可能な文字は半角英数字と追加文字のみであること。
K1N20002 A 先頭文字は小文字であること。
K1N20003 A 2つ以上の単語を使用する場合は、後ろの単語の先頭文字が大文字であること。
K1N20004 A 予約語以外で使用不可の文字列(com)を使用していないこと。
K1N20005 B 変数の意味を端的に表す名前であること。
K1N20006 C 文字長は最小3文字、最大20文字の範囲で記述されていること。
K1N20007 C 画面部品については部品の型によりプレフィクスをつけること。
(プレフィクス + 任意の名前)
【命名例】
public TextFieldString txStruserCode;
K1N20008 定数 A 定数名に使用可能な文字は半角英数字と追加文字のみであること。
K1N20009 A 定数の英文字はすべて大文字で記述する。 英文字以外はチェック対象外とする。
K1N20010 B 2つ以上の単語を使用する場合は、単語と単語の間が " _ " (アンダーバー)で連結されていること。
【命名例】
public static final String USRE_CODE;
K1N20011 B 変数の意味を端的に表す名前であること。 不必要な省略はしないこと。
K1N20012 C 文字長は最小3文字、最大20文字の範囲で記述されていること。
K1N20013 ローカル変数 A ローカル変数名に使用可能な文字は半角英数字と追加文字のみであること。
K1N20014 A 先頭文字は小文字であること。
K1N20015 B できるだけ簡潔な名前が使用されていること。
・頭文字をつける
・略語を使用する
・ニモニック語
【命名例】
for(int i=0; i<10; i++)
K1N20016 B 1文字のローカル変数(またはパラメタ変数)は、以下の規則に従って命名すること。
b:byte
c:char
d:double
e:Exception
f:float
g:Graphics
i,j,k,m,n:int,Integer
p,q,r,s:String,StringBuffer,char[]
K1N20017 ラベル名 A ラベル名に使用可能な文字は半角英数字と追加文字のみであること。
K1N20018 A ラベル名はすべて小文字であること。
K1N20019 B ラベル名の単語は " _ " で連結されていること。
(3)メソッド名
規約コード 分類 種類 規約
K1N30001 共通 A メソッド名に使用可能な文字は半角英数字と追加文字のみであること。
K1N30002 A 先頭文字は英小文字で始められていること。
K1N30003 A 2つ以上の単語を使用する場合は、2つ目以降の単語の先頭文字が大文字であること。
K1N30004 A 変数を V とする属性を,取り出す(get)及び設定する(set)メソッドは、getV 及び setV という名前とする。
K1N30005 A booleanプロパティへの参照メソッドは、isXXX() となっていること。
K1N30006 A 長さを返すメソッドについては、クラスjava.lang.String内に存在するように、lengthという名前であること。
K1N30007 A オブジェクトを特定のフォーマット F に変換するメソッドは toF という名前とする。
K1N30008 B 機能を端的に表す名前であること。
K1N30009 B 動詞もしくは動作をあらわす名詞を含んでいること。
K1N30010 B 可能または適切な限り、新しいクラスのメソッド名は類似した既存クラスのクラス名をもとに命名されている。
K1N30011 C 文字長は最小3文字、最大15文字の範囲で記述されていること。
K1N30012 ツール C ジェネレータにより自動生成されるメソッド名は変更しないこと。

コメント規約

規約コード 分類 種類 規約
K1C20001 共通 A ソースの先頭部分にヘッダコメントが記述されていること。
・ブロックコメント形式( /* … */ )
・Copyright情報(ソースファイル名、V/L、著作権表示、作成年)
・システム区分、業務区分
・クラス一覧(クラス名、概要)
・履歴(日付、V/L(1.0 を初版とし、変更を加える毎に 0.01 ずつ増加させる)、作成者・更新者、更新内容)
【記述例】
/*
*YosanIchiran.java V10L10 Copyright FUJITSU LIMITED 1999
*システム名 (AAAシステム) 業務区分名 (予算業務)
*クラス一覧:
* NO クラス名 概要
* 1 YosanIchiran 予算の一覧画面
*履歴:
* NO 日付 Ver 更新者 内容
* 1 1999/10/01 V10L1 富士通)山田 初版。
* 2 1999/11/09 V10L1.01 富士通)佐藤 計算方法を変更。
*/
K1C20002 A javadoc出力はリファレンスマニュアルとなるため、説明は「ですます」調で統一されていること。
K1C20003 A コメントは必要に応じて、日本語で見やすく記述する。
K1C20004 A 文章は " 。 " で終了していること。
K1C20005 B 半角カナを使用していないこと。
K1C20006 B ブロックコメントは一群のコードをコメントアウトする場合のみ使用されていること。
K1C20007 B 修正時のコメント記述が以下の通りにされていること。
・修正前のコード部分を " /* … */ " 形式のコメントで囲む。
・上記のコメントには、修正者、修正前の版数、修正後の版、修正内容を明記する。
・修正後のコード部分の前後にコメントを記述する。
・上記のコメントには、修正者、修正後の版数、修正内容を明記する。
K1C20008 C 通常のコメントには " // " を使用し、" // " の後ろに半角1文字分あいていること。
K1C20009 C 行の後半にコメントを使用する場合は、" // " を使用し、それらが同じタブ位置で並ぶように記述されている。
K1C20010 C プログラムコードの判読が容易になるよう、処理内容の説明が記述されていること。(処理内容説明のコメントは " // " 形式で記述)
K1C20011 クラス A クラスのコメントがクラス宣言の直前行に記述されていること。
コメント中にjavadocタグ(@author、@version)が記述されていること。
・機能概要(クラス名、クラス説明、備考)
・版数
・作成者:所属と氏名(フルネーム)を記述
【記述例】
/**
* <dd>クラス名:予算一覧
* <dd>クラス説明:画面から選択された予算一覧を表示する。
* 過去に登録された予算の一覧が呼び出せる。
* 一覧から一件の予算を選択するとその内容が詳細画面に反映される。
* <dd>備考:
* @version 1.01 1998/99/99
* @author 富士通)シス開技)富士通太郎
*/
public class xxxxxx extends LWPanel {
}
K1C20012 変数 A 変数のコメントは変数定義の直前行に記述されていること。
コメント中に指定されたjavadocタグ(@see)が記述されていること。
・変数の日本語名称
・変数の内容記述(省略可能)
【記述例】
/**
* 販売取引条件No
*/
public TextFieldString txStr_HanbaiTorihikiZyoukenNo;
K1C20013 メソッド A メソッドのコメントは、メソッド定義の直前行に記述されていること。
コメント中に指定されたjavadocタグ(@param、@return、@exception)が記述されていること。
・機能概要(メソッド名、メソッド説明、備考)
・引数説明:引数の型、引数の内容を記述。 複数ある場合は行を複数行記述する。
・戻り値説明:戻り値の型、戻り値の内容を記述。
・例外説明:例外の型、例外の発生する条件を記述。(メソッドでthrowsしているものを記述)
【記述例】
/**
* <dd>メソッド名:従業員検索
* <dd>メソッド説明:指定された検索条件で、従業員マスタから従業員情報を検索する。
* <dd>備考:
* @param IOView 従業員検索条件
* (xx.yosan.entity.xxx.InView)
* @return IOView 従業員情報
* (xx.yosan.entity.xxx.OutView)
* @exception BusinessRuleException
* inView の中の従業員コードが null だった場合
* inView で指定された従業員コードが検索できなかった場合
*/
public IOView createOutView
(IOView inView) throws BusinessRuleException {
...
}

パッケージ規約

規約コード 分類 種類 規約
K1P10001 共通 A 作成されるすべてのクラスは、「パッケージ名先頭、業務区分、資産区分」というパッケージに収められていること。
K1P10002 B パッケージ名に使用可能な文字は半角英数字と追加文字のみであること。

命名規約例

命名規約の例をご紹介します。

【規約】
@@@XXXXX 英数字8桁で命名
1234 5

1~3: システムコード
4: クラス識別
A : Appletクラス
C : CardPanelクラス(画面制御系)
P : Panelクラス(画面系)
S : 共通クラス(スーパークラス)
T : Threadクラス
W : C/S連携(ワークユニット用)クラス
O : 上記以外のクラス
5: 任意に命名

【例】
class AAJPOOOO { }

1: システムコード(全体共通)
2: サブシステムコード(全体共通)
3: 資産識別コード(Java資産)
4: クラス識別コード(Panelクラス)
5: OOOO(任意)

特別の処理を行うクラスやツールなどが、特定のクラス名を付けてしまうものについては例外とし、上記の限りではない。 特別の処理を行うクラスの命名規約についてはインターフェース名と同様とする。

補足

(1)部品型とプレフィクスの例
部品の型 プレフィクス 型の提供元
CJSpread sp JBK
Label,JFMultilineLabel lb JBK,awt
TextFieldDate txDat JBK
TextFieldTime txTim JBK
TextFieldDouble txDbl JBK
TextFieldLong txLng JBK
TextFieldInt txInt JBK
TextFieldString txStr JBK
TextArea ta awt
Button,JFImageButton bt JBK,awt
CheckBox cb awt
Choice,JFChoice ch JBK,awt
List li
ListView lv

パッケージの名前は、常に、COM、EDU、GOV、MIL、NETもしくはORGのような、インターネットドメインを逆順に表記したものを先頭につけて単一性を保証する。 (富士通の場合の例 com.fujitsu.xxx (xxx は製品名など))
ただし、" java " という名前とするのは望ましくない。
識別子 java で始まるパッケージ名は、標準Javaパッケージを名前付けするためにJavaSoftが予約しているからである。

(2)業務区分例
業務区分 業務区分名 例1
単語で表現
業務区分名 例2
3文字コードで表現
業務区分名 例3
サフィックスにサーバクライアント区分を追加
備考
業務共通 common com comsv,comcl
受注業務 jyuchu jyu jyusv,jyucl
予算業務 yosan yos yossv,yoscl
(3)資産区分例
資産区分 パッケージ名別 備考
業務内共通 common
制御部品 control
画面関係 gui,panel,frame,applet
CBS cbs
CBM cbm
DB,エンティティ db,entity
Servlet servlet
EJB ejb
CORBA corba
I/O io
ネットワーク network
セキュリティ security