0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】CheckstyleのMagicNumberエラーとは?定数化による修正方法を解説

0
Posted at

はじめに

Javaの開発環境でビルドを実行した際、Checkstyle などの静的解析ツールから「マジックナンバーです(MagicNumber)」「名前はパターンに一致しなければなりません(MethodName)」といったエラーが出力されて困った経験はありませんか?

この記事では、ビルドエラーの理由と「マジックナンバーとは何か」、そして汎用的なコードを使った修正方法について、初心者向けに分かりやすく解説します。

対象読者

  • Javaを学び始めたばかりの初学者
  • チーム開発や静的解析ツール(Checkstyle)でコードチェックエラーが出た方
  • 「マジックナンバー」という言葉を初めて聞いた方・意味をしっかり理解したい方

発生したエラーの正体

今回取り上げるエラーは、プログラムの処理自体(ロジック)のバグではなく、「コードの書き方ルール(コーディング規約)」に関する警告・エラーです。

主な原因は以下の2点です。

  1. メソッド名に記号(_ アンダーバーなど)が入っている(MethodName)
    Javaではメソッド名にローワーキャメルケース(例: testCalculateDiscount)を使うのが標準的なルールですが、testCalculate_SPECIAL のようにアンダーバーを使ったことで指摘されます。
  2. 生の数値が直接書かれている(MagicNumber)
    プログラム中に 0.8 や 100 といった数字をそのまま書いたことで、「マジックナンバー」として指摘されます。

マジックナンバーとは?

マジックナンバー(Magic Number)とは、「ソースコード内に直接書き込まれた、意味や理由がパッと分からない生の数値」のことです。

プログラムの中で突然 0.8 や 5 という数字が現れると、後からコードを読んだ第三者は次のように困惑してしまいます。

  • 「この 0.8 って何?2割引きのこと?それとも消費税の計算?」
  • 「後から仕様変更で割引率が変わったら、コード内の 0.8 を全部探して直すの?」

このように、理由も示されず「魔法のように突然現れる数値」だからマジックナンバーと呼ばれます。

汎用コードで見る修正例

修正前(NGなコード例)

メソッド名にアンダーバーが含まれており、計算や判定に使う数値が直書きされています。

@Test
public void testCalculatePrice_SPECIAL_SALE() {
    double originalPrice = 1000.0;
    
    // 0.8 や 800.0 が「マジックナンバー」として警告される
    double actualPrice = originalPrice * 0.8;
    assertEquals(800.0, actualPrice);
}

修正後(OKなコード例)

数値に「意味のわかる名前」をつけて定数として定義し、メソッド名をキャメルケースに変更します。

public class PriceTest {

    // 1. 直書きしていた数値に「名前」をつけて定数化する
    private static final double DISCOUNT_RATE = 0.8;       // 割引率(2割引)
    private static final double ORIGINAL_PRICE = 1000.0;   // 元の価格
    private static final double EXPECTED_PRICE = 800.0;   // 期待される計算結果

    // 2. メソッド名からアンダーバーを取り除き、キャメルケースにする
    @Test
    public void testCalculatePriceSpecialSale() {
        double actualPrice = ORIGINAL_PRICE * DISCOUNT_RATE;
        assertEquals(EXPECTED_PRICE, actualPrice);
    }
}

おわりに

静的解析ツールの Checkstyle でエラーが出ると最初は焦ってしまいますが、指摘された内容は「より読みやすくメンテナンスしやすい綺麗なコードにするためのヒント」です。

  • 数値(数値リテラル)には名前をつけて定数(static final)にする
  • メソッド名はアンダーバーを使わずキャメルケース(testMethodName)にする

この2つを意識するだけで、第三者が見ても一目で意味が伝わる読みやすいJavaコードが書けるようになります。日々のコーディングでぜひ試してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?