Java開発標準化規約(arison.jp)

2012/04/25

I.はじめに

本ドキュメントはJava開発における開発標準化規約を定めた資料である。

II.参考資料

下記の資料を参考とした。

  1. 株式会社電通国際情報サービス Javaコーディング規約2004
    http://www.objectclub.jp/community/codingstandard/JavaCodingStandard2004.pdf

結論

本ドキュメントは下記の構成としている。

  1. ファイル規約
  2. パッケージ規約
  3. クラス名、インターフェイス名規約
  4. メソッド名規約
  5. 定数名、変数名、引数名規約
  6. コメント規約
  7. コーディング規約
  8. 記述サンプル

ファイル規約

  1. ファイル名は英数字のみを使用する。
  2. ファイル名はクラス名.javaとし、原則として、1ファイルに1クラスの記述とする。※クラス名規約を参照

パッケージ規約

  1. Javaパッケージ名は下記パッケージの下位に作成する。
    jp.arison
  2. Javaパッケージ名は小文字を使用する。(Java の一般的なルール)
  3. Javaパッケージ名は略語を用いず、わかりやすい名前を使用する。

クラス名、インターフェイス名規約

  1. クラス名、インターフェース名の先頭を大文字にする。(Java の一般的なルール)
  2. クラス名は役割を表す名前にする。
  3. 例外クラス名には名前の最後に"Exception"をつける。
  4. 抽象クラス名には名前の先頭に"Abstract"をつける。
  5. 能力付加型のインターフェース名は最後に"able"をつける。
  6. テストクラス名は「テスト対象クラス名 + Test」にする。(JUnit を意識)

メソッド名規約

  1. メソッド名は区切りのみ大文字にする。
  2. オブジェクトを生成するメソッド名は「"create"+オブジェクト名」にする。
  3. ゲッターメソッド名は「"get"+属性名」にする。
  4. セッターメソッド名は「"set"+属性名」にする。
  5. boolean 変数を返すメソッド名はtrue/false の状態がわかるようにする。

定数名、変数名、引数名規約

  1. 定数は全てstatic final とし、すべて大文字、区切りは"_"を使用する。
  2. オブジェクトを生成するメソッド名は「"create"+オブジェクト名」にする。
  3. メソッドのパラメータ名とインスタンス変数名を一緒にしない。
  4. 定数名、変数名、引数名は役割がわかる名前を使用する。
  5. 局所的に使用するローカル変数の場合は、省略した名前を用いてもよいこととする。

コメント規約

  1. 全般
  2. javadoc出力は説明は「である」調で統一されていること。
    文章は "。" で終了していること。
    半角カナを使用していないこと。
  3. ソースヘッダコメント
  4. ソースの先頭部分にヘッダコメントが記述されていること。
    ・ ブロックコメント形式( /* … */ )
    ・ システム名
    ・ クラス名
    ・ Copyright情報
    【記述例】
      /*
       *  ○○プロジェクト
       *
       * 【クラス名】
       * SampleClass
       *
       * 【Copyright】
       * All Rights Reserved,Copyright(C) arison.jp Limited 2012-
       */
    
  5. クラスコメント
  6. クラスのコメントがクラス宣言の直前行に記述されていること。
    ・ 機能概要(クラス名、クラス説明、備考)
    ・ 作成者:所属と氏名(フルネーム)を記述
    【記述例】
      /**
       * SampleClass
    * Helloを画面に出力する。<br> * @author Arison */ public class SampleClass { }
  7. 変数コメント
  8. 変数のコメントは変数定義の直前行に記述されていること。
    ・ 変数の内容記述(省略可能)
    【記述例】
       /** トップ画面ID */
       public static final String ID_= "00000000";
    
  9. メソッド定義コメント
  10. メソッド定義の直前行に記述する。
    ・ 機能概要(メソッド名、メソッド説明、備考)
    ・ 引数説明:引数名、引数の内容を記述。複数ある場合は行を複数行記述する。
    ・ 戻り値説明:戻り値の内容を記述。
    ・ 例外説明:例外の型、例外の発生する条件を記述。(メソッドでthrowsしているものを記述)
    ・コメントは必要なものだけを簡潔に記述する。
    ・必要以上にコメントを書くと修正しにくくなる。
    【記述例】
      /**
       * 半角文字チェック。<br>
       * 半角文字のみの文字列かどうかを判定するメソッド。<br>
       * targetのnullチェック等は行わない。<br>
       * @param target
       *            チェック対象文字列
       * @return boolean 半角文字チェック結果
       *         <ul>
       *         <li>true:半角文字のみ</li>
       *         <li>false:半角文字以外が含まれる</li>
       *         </ul>
       */
      public static boolean isHalfCharOnly(String target) {
    

コーディング規約

クラス内の記述順序が以下の通りにされていること。
  1. ソースヘッダコメント
  2. パッケージ宣言
  3. インポート宣言
  4. クラス、インターフェース宣言
  5. インスタンス宣言(Static変数以外)
  6. コンストラクタ
  7. メソッド
クラス変数宣言の先頭で、著作権情報および秘密情報を定義すること。
【定義例】
  // 著作権情報
  public static final String COPYRIGHT
       = "All Rights Reserved,Copyright(C) arison.jp Limited 2012-";
  // 秘密情報
  public static final String CONFIDENTIAL = "arison.jp CONFIDENTIAL";
  1. import文で指定するクラスは "パッケージ名.クラス名" で指定する。クラス名を "*" で省略しない。
  2. private、public 等、適切な権限を考慮してアクセス修飾子の記述を行う。(クラス、メソッド、変数、定数が対象)
  3. メソッドは1つの役割にする。(可読性・保守性・拡張性・再利用性を考慮したメソッド分割)
  4. リテラル定数(final static フィールド)を使用する。(リテラルは使用しない。)
  5. 1行に2つ以上のステートメントを記述しない。
  6. 制御文(if, else, while, for, do while)の“{ }”は省略しない。
  7. 条件の結果を表すboolean 変数はtrue と比較しない。
  8. BeanクラスにはtoStringメソッドを実装すること。(ツールにて容易に実装可能)
  9. ※ インデントはタブを利用する。
  10. ※ 長すぎる行は避ける。
  11. ※ カンマの後には空白文字を記述する。
  12. ※ 代入演算子(=, +=, -=, …)の前後には空白文字を記述する。
  13. ※ 論理演算子(”||”、”&&”)の前後には空白文字を記述する。
    ファイルを新規に作成する場合はコードテンプレートを使用することを徹底し、アウトラインを統一する。
    コミット前に、checkStyleによるチェックを行う
    コードフォーマッタを使用することを徹底し、コーディングの記述を統一する。

    コードテンプレート は、「デフォルトの設定」を使用する。
    checkStyle は、「デフォルトの設定(Sun Checks)」を用いる。
    コードフォーマッタ は、「デフォルトの設定」を使用する。

記述サンプル

  //(1) ソースヘッダコメント
  /*
   *   ○○プロジェクト<br>
   *
   * 【クラス名】
   * SampleClass
   *
   * 【Copyright】
   * All Rights Reserved,Copyright(C) arison.jp Limited 2012-
   */
  //(2) パッケージ宣言
  package jp.arison;
    
  //(3) インポート宣言
  import jp.arison.util.DataCheck;
    
  //(4) クラス、インターフェース宣言
  /**
   * SampleClass
* Helloを画面に出力する。<br> * * @author Arison */ public class SampleClass { // 著作権情報 public static final String COPYRIGHT = "All Rights Reserved,Copyright(C) arison.jp Limited 2012-"; // 秘密情報 public static final String CONFIDENTIAL = "arison.jp CONFIDENTIAL"; // (5) クラス変数宣言(Static変数) /** Helloメッセージ */ public static final String MSG_HELLO = "Hello"; // (6) インスタンス宣言(Static変数以外) /** メッセージ */ private String outputMsg = null; // (7) コンストラクタ /** * コンストラクタ */ public SampleClass() { // 何もしない } // (8) メソッド /** * メッセージを出力するメソッド。<br> * 入力データがNullの場合、例外発生時には何も出力をしない。<br> * * @param inData * 入力データ * @throws Exception * チェック時に例外が発生した場合 */ public void outputMessage(String inData) throws Exception { if (inData == null) { return; } DataCheck.checkValue(inData); outputMsg = createMessage(inData); System.out.println(outputMsg); } /** * 入力データ前にHelloメッセージをつけた文字列を返すメソッド。<br> * * @param inData * 入力データ * @return inDataの前にHelloメッセージをつけた文字列 */ private String createMessage(String inData) { return MSG_HELLO + inData; } }
2012/04/25
ページのトップへ戻る