資料1.Javaコーディング規約
コーディング規約とは、プログラムを書く際のルールや書き方の約束事です。チームで開発する場合やコードを後から読む人のために、統一されたスタイルで書くことが重要です。
命名規則
命名規則の概要
Javaでは識別子の種類ごとに名前の付け方が決まっています。
| 種類 | 規則 | 例 |
|---|---|---|
| パッケージ名 | すべて小文字 | com.example.app |
| クラス名 | UpperCamelCase(各単語の先頭を大文字) | SampleClass、MyApplication |
| インターフェース名 | UpperCamelCase | Runnable、Comparable |
| メソッド名 | lowerCamelCase(動詞または動詞句で始める) | getValue()、setUserName() |
| 変数名 | lowerCamelCase | myVariable、userName |
| 定数名 | すべて大文字・単語間はアンダーバー | MAX_SIZE、DEFAULT_TIMEOUT |
クラス名の付け方
クラス名は名詞または名詞句で付けます。クラスが「何であるか」を表す名前にします。
| クラスの種類 | 命名のポイント | 例 |
|---|---|---|
| 通常のクラス | 名詞または名詞句。UpperCamelCase | Customer、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 String DEFAULT_ENCODING = "UTF-8";
public static final double TAX_RATE = 0.10;
クラスの規約
1ファイル1publicクラス
1つの.javaファイルにはpublicクラスを1つだけ定義します。ファイル名はそのpublicクラスの名前と完全に一致させます(大文字・小文字も含めて)。
public class UserAccount {
// ...
}
クラス内のメンバの順序
クラス内のメンバは以下の順序で記述することが推奨されています。
- staticフィールド(定数を含む)
- インスタンスフィールド
- コンストラクタ
- staticメソッド
- インスタンスメソッド
// 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行であっても、中括弧は省略しないことが望ましいです。
処理
} 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;