検索

キーワード


【Java】 命名規約<命名ルールと予約語、命名規約の目的と注意すべき点>

  • 公開日:2020-08-05 12:29:15
  • 最終更新日:2021-01-25 16:53:03
【Java】 命名規約<命名ルールと予約語、命名規約の目的と注意すべき点>

こんにちは、駆け出しプログラマーの若江です!

ここでは初学者として学習を終えた私が、アウトプットの意味も込めて命名規約についてご紹介させていただきます。

できる限り初学者が理解しやすい内容として紹介させていただくので、参考となれば幸いです!


関連記事リンク:変数とは / パッケージの紹介 / メソッドの紹介 / インターフェースの紹介 / クラスの紹介 / 変数と定数の紹介

命名規約とは? ~命名に使えない単語と命名ルール~

プログラミングでは変数名やメソッド名、クラス名など、たくさんのものに対して

自由度高くプログラマー自身で名前を付けることができます。

そのような中で根本的に「許可されていない名前やパターン」から、「一般的な名前の付け方、パターン」など、

命名規約について幅広く紹介させていただきます。


コーディング規約の概要

コードを書く際に、個人・開発チーム・大規模開発グループなどで取り決められるコーディングに関するルールです。

設定されるルールには、変数名やメソッド名・クラス名などの名づけ方や、利用する機能の制限・禁止事項、

プログラムの管理方法など様々なものが含まれます。

コーディング規約はチーム間での連携が取りやすくなったり、他者の書いたコードが読みやすくなったり、

不具合を未然に防いだりなどの点で有用となります。


プログラマー間での「命名規約」とは?

「命名規則」「ネーミング規約」「ネーミング規則」とも呼ばれています。

プログラムを開発する際には、プログラマー自身が様々なものに名前を付けます。

パッケージ名や、パッケージの中にあるクラスの名前、クラスの中に書く定数名・メソッド名・変数名など、

開発の規模が大きくなるほどその量は増えていきます

それらパッケージ・クラス・メソッドなどに適切な名前を付けておくことで、

どのような役割をまとめたパッケージなのかや、

どのような機能を果たすクラスなのか、

どのような動作をするメソッドなのか、

などといったことが理解しやすくなります。


チーム開発など複数人で開発する際は、この命名規約をコーディング規約に含むことで、

それぞれの名前をチーム全体の共通認識にすることができ、スムーズな開発を実現させることができます。

例えば「手をたたく」ひとつでも、

「拍手」もあれば「ハイタッチ」もありますし「注意をひく」場合や「盗み食いを阻止する」ことも考えられます。

規約として「手をたたくとは命名せずに拍手と命名しましょう」と決めておけば、機能の誤認や混乱を防げますね。


Java での「命名規約」とは?

名前の付け方についてルールを取り決めることを命名規約を言いますが、

Java で既に取り決められたルールも命名規約と言います。

ここでは Java においての命名規約の紹介をさせていただきます。


取り決められたルール

Java で名前を付ける際は以下のルールが存在します。

・Unicode文字を含む英数字、記号(アンダーバー( _ )、ドルマーク($))を使うことができます。

・名前の長さは1文字から無制限です。

・数字も使えますが、先頭は使用不可です。

・あらかじめ命名に使用NGのワードが設定されています。(予約語)

 ※アンダーバーは Java8 まで使用可能。( _ と英数字等の組み合わせは可能)

 ※ Unicode文字 とは世界の様々な文字に番号を振り当てたもので、日本語も対象となっています。

  ただし命名には基本的に英字を使うことが一般的とされています。


◆以下全て命名可能

String a = "a"; // 1文字の英語

String= "a"; // 日本語 (非推奨)

String _ = "a"; // アンダーバー (Java8 までは使用可能)

String $ = "a"; // ドルマーク (非推奨)

String a1 = "a"; // 英語 + 数字 → 「1a」にするとエラーになる

String abcdefghijklmnopqrstuvwxyz = "a"; // 文字制限なし

※文字の長さも必要以上の長さは推奨されていません。


予約語一覧

先ほどのルールで触れた命名NGワードのことを「予約語 (Keywords)」といいます。

Java プログラミングで頻繁に使われるワードの一部は予約語に設定されています。

以下予約語は命名に使用できません。


◆予約語一覧

予約語一覧

51ワードが予約語に登録されています。(2020年8月現在)

※アンダーバー( _ )は Java9 から予約語として新たに登録されました。


また、予約語ではありませんが上記に加えて「null」「true」「false」も命名に使うことができません。

(これら3つは「リテラル」という分類に属し、命名として判断されません)


パッケージ・クラス・変数・定数・メソッドにおいての命名規約

Java ではパッケージ・クラス・変数・定数・メソッドなどそれぞれにも命名規約があります。

基本的に先ほど「取り決められたルール」で紹介したルールに反しなければどのような名前も許容されますが、

推奨される書き方がパッケージ・クラス・変数・定数・メソッドなどには存在します。


それぞれの書き方は英字の小文字と大文字を区別して使い分けします。

また命名する際に単語を2つ以上組み合わせて名前付けをする場合は以下2つの方法を使います。

スネークケース:単語と単語の間をアンダーバー( _ )で区切ります。

 例) first_step, hop_step_jump など

キャメルケース:単語と先頭大文字の単語を組み合わせます。

 例) firstStep, hopStepJump など


パッケージの命名

クラスなどをまとめるファイルのようなものです。

パッケージの命名には小文字の英字を使います。

命名したパッケージ内に保持しているクラスには、明示的にパッケージの在りかを記述します。

どの階層にあるどのパッケージに含まれるクラスか?などが書かれます。

記述のルールはインターネットでアクセスする際のドメイン(〇〇.XX.com など)の逆順です。

また、クラスの先頭に記述しなくてはいけません。


◆パッケージ記述例

package com.xxx.OO;


パッケージでは数字始まり、予約語、記号(ドット( . ))を使用することも可能です。

その際は先頭にアンダーバーを付けます。

package com._1._true._for;

※アンダーバー以外に、ドルマーク( $ )でもエラーは出ませんが、アンダーバーを使うことがルールです。


クラス・インターフェースの命名

クラスやインターフェースには機能や動作などの指示が書かれています。

クラス・インターフェースの命名は先頭大文字の英字で書きます。

またクラス・インターフェースは機能や動作がまとめられた「もの」として位置づけられることから、

クラス・インターフェースの命名には基本的に「名詞」が使われます。

 例) Car, Book など

単語を2つ以上組み合わせる際はキャメルケースを使います。

 例) WorldWide, FastRunCar など


またインターフェースの命名には時折「xxable」といったように「形容詞」が使われることもあります。



メソッドの命名

クラスなどに書かれる、処理や動作のコードです。

メソッドの命名は小文字の英字で書きます。

処理や動作を実行する機能のため、メソッドの命名には基本的に「動詞」もしくは「動詞 + 名詞」が使われます。

 例) walk, talk など

2つ以上の単語を組み合わせる際はキャメルケースを使います。

 例) watchEvrywhere, listenToMusic など



<メソッド名 【set, get, is, has, can】>

プログラマー全体で認知されている、メソッドの命名規約があるため紹介しておきます。

プログラマー間で共通の認識がある名前のため、誰が見てもわかりやすい命名の手助けとなります。


メソッド名 【set, get】

アクセスが制限されたフィールドへアクセスするメソッドを「セッター」「ゲッター」と呼び、

メソッド名に「setXxxx」もしくは「getXxxx」と命名します。

 例) setCode, getCode など

Xxxx 部分は通常のメソッド命名ルール、2つ以上の単語組み合わせに従い大文字から始まります。


メソッド名 【is】

戻り値がboolean(真偽値)型のメソッドの中でも、

状態の判断を行うメソッドは「isXxxx」と命名します。

英文法 is と同様の使い方をメソッドで行います。

 例) isEmpty, isReady など


メソッド名 【has】

戻り値がboolean(真偽値)型のメソッドの中でも、

指定したデータを持っているかの判断を行うメソッドは「hasXxxx」と命名します。

 例) hasNext, hasPrevious など


メソッド名 【can】

戻り値がboolean(真偽値)型のメソッドの中でも、

指定した動作が可能かの判断を行うメソッドは「canXxxx」と命名します。

 例) canSave, canRemove など


変数の命名

処理の流れ方などにより中身が変化する値です。

変数の命名は基本的にメソッドと同じく小文字の英字で書きます。

変数は値を持つ「もの」に位置づけられるので、基本的に「名詞」が使われます。

 例) num, price, name など

単語2組以上を組合す場合はキャメルケースを使います。

 例) idNumber, firstName など


定数の命名

変数と対比して固定の値です。

定数の命名は大文字の英字で書きます。

定数も変数と同じく値を持つため、基本的に「名詞」が使われます。

 例) RIGHT, LEFT など

単語を2つ以上組合す場合はスネークケースを使います。

 例) NEXT_MONTH, TWO_WEEKS など



命名規約にはたくさんのルールがありますが、

自身で命名を行う際に、比較的簡単に他者が見てもわかりやすい命名ができる手助けとなります。



まとめ

コーディング規約があるおかげで、複数人数での開発もスムーズに連携をとることができます。

多くの場面で命名を行うことになりますが命名規約のおかげで、

見やすくわかりやすい命名が簡単にできるようになっています。

チーム間での混乱を避けるためにもしっかりと覚えておきましょう。


関連記事リンク

変数とは / パッケージの紹介 / メソッドの紹介 / インターフェースの紹介 / クラスの紹介 / 変数と定数の紹介


【著者】

若江

30代で異業種となるIT業界へ転職した駆け出しのプログラマです。これまで主に Java や Ruby、HTML/CSS を使って学習を目的としたショップサイトや掲示板サイトの作成を行いました。プログラマとしての経験が浅いからこそ、未経験者の目線に近い形で基礎の紹介をしていきたいと思います。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様