- 1.ComponentAA開発標準
- 2.Java標準化規約
Javaアプリケーションを開発する上での、標準化規約の例をご紹介します。
以下でご紹介する標準規約は、Java開発規約チェッカSIMPLIA/JF Kiyackerで提供しているものです。
SIMPLIA/JF Kiyackerを利用することで、作成したJavaソースコードが標準規約に従っているかどうかを自動的にチェックできますので、アプリケーションの品質向上を図ることができます。
SIMPLIA/JF Kiyacker製品情報ページ
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命令におけるラベルへのジャンプが使用されていないこと。 |
規約コード | 分類 | 種類 | 規約 |
---|---|---|---|
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 | 名詞または名詞句だが、オブジェクトに何らかの能力を与えるものであれば、形容詞が使用されていること。 |
規約コード | 分類 | 種類 | 規約 |
---|---|---|---|
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 | ラベル名の単語は " _ " で連結されていること。 |
規約コード | 分類 | 種類 | 規約 |
---|---|---|---|
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(任意) |
特別の処理を行うクラスやツールなどが、特定のクラス名を付けてしまうものについては例外とし、上記の限りではない。 特別の処理を行うクラスの命名規約についてはインターフェース名と同様とする。
部品の型 | プレフィクス | 型の提供元 |
---|---|---|
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が予約しているからである。
業務区分 | 業務区分名 例1 単語で表現 |
業務区分名 例2 3文字コードで表現 |
業務区分名 例3 サフィックスにサーバクライアント区分を追加 |
備考 |
---|---|---|---|---|
業務共通 | common | com | comsv,comcl | |
受注業務 | jyuchu | jyu | jyusv,jyucl | |
予算業務 | yosan | yos | yossv,yoscl |
資産区分 | パッケージ名別 | 備考 |
---|---|---|
業務内共通 | common | |
制御部品 | control | |
画面関係 | gui,panel,frame,applet | |
CBS | cbs | |
CBM | cbm | |
DB,エンティティ | db,entity | |
Servlet | servlet | |
EJB | ejb | |
CORBA | corba | |
I/O | io | |
ネットワーク | network | |
セキュリティ | security |