資料1.Javaコーディング規約

Javaプログラムの命名規則とコーディングのルールをまとめます。

資料1.Javaコーディング規約

コーディング規約とは、プログラムを書く際のルールや書き方の約束事です。チームで開発する場合やコードを後から読む人のために、統一されたスタイルで書くことが重要です。

命名規則

命名規則の概要

Javaでは識別子の種類ごとに名前の付け方が決まっています。

Javaの主な命名規則
種類規則
パッケージ名すべて小文字com.example.app
クラス名UpperCamelCase(各単語の先頭を大文字)SampleClass、MyApplication
インターフェース名UpperCamelCaseRunnable、Comparable
メソッド名lowerCamelCase(動詞または動詞句で始める)getValue()、setUserName()
変数名lowerCamelCasemyVariable、userName
定数名すべて大文字・単語間はアンダーバーMAX_SIZE、DEFAULT_TIMEOUT

クラス名の付け方

クラス名は名詞または名詞句で付けます。クラスが「何であるか」を表す名前にします。

クラスの種類命名のポイント
通常のクラス名詞または名詞句。UpperCamelCaseCustomer、OrderItem、FileManager
抽象クラスAbstract〜 のように Abstract を先頭につけることが多いAbstractAnimal、AbstractShape
例外クラス末尾に Exception をつけるInvalidInputException、FileNotFoundException
テストクラス末尾に Test をつけるCustomerTest、OrderServiceTest
ユーティリティクラス末尾に Utils または Helper をつけることが多いStringUtils、DateHelper
クラス名の例(良い例・悪い例)
// 良い例(名詞、意味が明確)
public class UserAccount { }
public class OrderService { }
public class InvalidAgeException extends Exception { }

// 悪い例(意味が不明、動詞など)
public class Data { } // 抽象的すぎる
public class DoSomething { } // 動詞になっている
public class Cls { } // 略しすぎ

インターフェース名の付け方

インターフェース名はクラスと同様にUpperCamelCaseです。「〜できる」という能力を表す場合は末尾にableをつけることが多いです。

命名パターン意味
〜able(能力を表す)Comparable、Serializable、Printable比較できる、直列化できる、印刷できる
名詞(役割を表す)Runnable、Iterator、Observer実行可能、反復子、観察者
I〜プレフィックスIPhone、IEmailインターフェースであることを明示する(任意)

メソッド名の付け方

メソッド名は動詞または動詞句で始めます。メソッドが「何をするか」を明確に表します。

目的命名パターン
値を取得するget〜()getName()、getUserId()、getCount()
値を設定するset〜()setName()、setPrice()、setFlag()
boolean値を返すis〜() / has〜() / can〜()isEmpty()、hasNext()、canEdit()
処理を実行する動詞で始めるsave()、calculate()、sendMail()
変換するto〜() / from〜()toString()、toArray()、fromJson()
初期化するinit〜() / initialize〜()init()、initDatabase()

変数名の付け方

変数名はlowerCamelCaseで、格納する内容を表す名詞を使います。

  • 1文字の変数名はforループのカウンタ(i、j、k)など、スコープが非常に狭い場合にのみ使用する。
  • 配列・コレクションには複数形を使う(例:items、users、scores)。
  • boolean型の変数名は is〜has〜can〜 など状態を表す形にする(例:isValid、hasError)。
  • 意味のない名前(tmp、data、obj)は避ける。
変数名の例(良い例・悪い例)
// 良い例
int userAge;
String customerName;
boolean isLoggedIn;
List<String> productNames;

// 悪い例
int x; // 意味が不明
String str; // 型名そのまま
boolean flag; // 何のフラグか不明

定数名の付け方

定数(static finalフィールド)はすべて大文字で、単語間をアンダーバーで区切ります。

定数の定義例
public static final int MAX_RETRY_COUNT = 3;
public static final String DEFAULT_ENCODING = "UTF-8";
public static final double TAX_RATE = 0.10;

クラスの規約

1ファイル1publicクラス

1つの.javaファイルにはpublicクラスを1つだけ定義します。ファイル名はそのpublicクラスの名前と完全に一致させます(大文字・小文字も含めて)。

ファイル名とクラス名の対応
// ファイル名: UserAccount.java
public class UserAccount {
// ...
}

クラス内のメンバの順序

クラス内のメンバは以下の順序で記述することが推奨されています。

  1. staticフィールド(定数を含む)
  2. インスタンスフィールド
  3. コンストラクタ
  4. staticメソッド
  5. インスタンスメソッド
クラス構造の例
public class Product {
  // 1. 定数・staticフィールド
  public static final int MAX_STOCK = 1000;
  private static int count = 0;

  // 2. インスタンスフィールド
  private String name;
  private int price;

  // 3. コンストラクタ
  public Product(String name, int price) { ... }

  // 4. メソッド
  public String getName() { return name; }
  public int getPrice() { return price; }
}

フィールドのアクセス修飾子

インスタンスフィールドは原則としてprivateにし、外部からのアクセスはセッター・ゲッター経由にします(カプセル化)。publicフィールドは定数(static final)のみに使用します。

メソッドの規約

メソッドは短く・1つのことだけ行う

1つのメソッドは1つの役割だけを担うように設計します。目安として、メソッドの行数は20〜30行以内が望ましいです。長くなる場合は、処理を別のメソッドに分割します。

引数の数

メソッドの引数は3〜4個以内を目安にします。引数が多い場合は、関連する引数をクラスやオブジェクトにまとめることを検討します。

インデント

インデントにはスペース4つまたはタブ1つを使用します。ブロック({ })の中の処理は1レベルごとに1段インデントします。

public class Sample {
    public static void main(String[] args) {
        int a = 10;
        if (a > 5) {
            System.out.println("5より大きい");
        }
    }
}

中括弧(ブレース)のスタイル

Javaでは開き中括弧 { を同じ行に書くスタイルが一般的です(K&Rスタイル)。処理が1行であっても、中括弧は省略しないことが望ましいです。

推奨されるスタイル
if (条件式) {
  処理
} else {
  処理
}
省略は推奨しない
// 避けるべき(中括弧の省略)
if (条件式)
  処理;

// 推奨
if (条件式) {
  処理;
}

コメントの書き方

コメントは適切な場所に書くことで、コードの理解を助けます。

種類記述方法用途
行コメント// コメント1行の簡単な説明
ブロックコメント/* コメント */複数行にわたる説明
Javadocコメント/** コメント */クラスやメソッドの公式説明(API文書の自動生成に使用)
/**
 * 2つの整数の和を返すメソッド
 * @param a 1つ目の整数
 * @param b 2つ目の整数
 * @return aとbの和
 */
public int add(int a, int b) {
    return a + b;  // 和を返す
}

その他の規約

  • 1行の最大文字数は80〜100文字程度を目安にする。長い場合は適切な位置で改行する。
  • インポート文は不要なものを含めず、使用するものだけ記述する。ワイルドカード(import java.util.*)は避けることが望ましい。
  • 関連するメソッド間には空行1行を入れて読みやすくする。
  • クラスの宣言とフィールドの間、フィールドとコンストラクタの間にも空行を入れる。
  • マジックナンバー(説明なしの数値リテラル)は使わず、定数に名前をつけて使用する。
マジックナンバーの例(良い例・悪い例)
// 悪い例(マジックナンバー)
if (retryCount > 3) { ... }
double tax = price * 0.10;

// 良い例(定数を使用)
if (retryCount > MAX_RETRY_COUNT) { ... }
double tax = price * TAX_RATE;