araki tech

for developers including me

クラス・メソッド命名早見表

クラス・メソッド命名早見表

前置き

ここで掲載している命名早見表はAndroid、Kotlin、Javaを踏まえて作られたものです。

他プラットフォームでも通用するようにしていますが、細かな意味合いが異なる場合があります、ご了承ください。

大事なことは一つ。英文法を守ること。

クラス名

全て接尾後として命名するものとする。 (e.g. 〇〇Controller, 〇〇Model)

ソフトウェアアーキテクチャに基づく命名

name meanings
View ビュー本体。Androidではカスタムビューなどに付けられる。
Webアプリなどで見られるMVPではデータの監視もしたりする。
Activity / Fragment ビューのイベントトリガー、ViewModelのデータ変更を監視するクラス。Android特有なクラス。
ViewModel ViewとModel (もしくはRepository) を繋ぐ、ロジックを含めてよいクラス。また監視可能なデータを管理する。
Model RepositoryやDBと連携し、データを加工してViewModelやControllerに渡すクラス。
Controller MVCアーキテクチャなどで見られるViewModelの監視可能データを持たないバージョンのクラス。その名の通りイベントをハンドリングするコントローラ。
Presenter MVPアーキテクチャなどで見られるクラス。Controllerと同様にModelとViewの仲介になるクラス。
Repository Clean ArchitectureやAndroidアーキテクチャで使われるデータの貯蔵庫クラス。AndroidではDAOを扱いやすくしたインターフェースとして定義されることがよくある。
UseCase Clean Architecture特有のクラス。ユースケースをクラスにしてしまっているため、「動詞+Usecase」のような特殊な命名になることがある。Usecaseでも良い。
Factory Factory Methodデザインパターンなどで見られるクラス。その名の通り、抽象クラスやインターフェースを具現化する役割を持つ。

汎用的な命名 (インターフェース含む)

用途や責務をなるべく具体的に明記して命名する必要がある。

name meanings
Result 何かしらのデータ処理を行ってその内容を詰めたクラス。なんでもかんでもResultクラスに詰めるのは良くないが、複雑な結果を返して呼び出し元でそれを判断したい場合に有効。
Listener 主にインターフェースに付けられる名前。2つのクラス間で双方向依存を解消すべく仲介として挿入される。
Observer 主にインターフェースに付けられる名前。データの変更を監視する役割。
Util / Utility 便利なメソッドや拡張メソッド、プロパティを集めたクラス。なんでも屋さんになりがちなので必ず用途を限定する。シングルトン (Kotlinであればobject) にするなど、静的なクラスメソッドのみにし、インスタンス化せずに使えるようにする。
Manager 何かしら具体的な仕事を管理するクラス。これもなんでも屋さんになりがちなので、局所的な役割だけに絞る。
Holder 何かしらのデータを一時的に保持するクラス。「一時的」というのが大事で永続性があるならば各データをプロパティで保持することを考える。Userのようなデータクラス (エンティティ) に置き換えれそうであればそうする。
Provider 何かしら機能やオブジェクトを提供するクラス。直接コンストラクタを使ったインスタンス化が行われることはなく、クラスメソッドなどを使ったインスタンス化がよく見られる。
Cache キャッシュを管理するクラス。
Constants 定数を管理するクラス。基本的にシングルトン (Kotlinであればobject) もしくは静的なクラスプロパティのみにする。特別に複数形を使う。

インターフェースの命名

ListenerやObserver含め、基本的に役割名や形容詞を使うことが多い。

Androidでも、Serializable、Parcerableのような形容詞命名、LifecycleOwnerなどの役割名がインターフェースになるケースがある。

避けるべき命名

以下の命名を思いついたら、他に変えられるものがないか考える。

name meanings
Info 意味が抽象的すぎる。そのInfoという接尾語はいらないかもしれない。
Data 同上。
日本語ローマ字 言語統一は大事。

メソッド名

基本的に動詞から始め、三人称単数な動詞を使う

複数の動詞を重ねることはダメ。文法は守ろう。

あとなるべく目的語 (もしくは引数に含まれるもの)は具体的にする。

Booleanを返す

この命名はBooleanな変数名にも応用可能。

name meanings
is〇〇() 状態などがそれであるか否か。 (e.g. isHogeMode())
exists() 存在するか否か。exists〇〇のように目的語は取らない。
has〇〇() 〇〇を保持しているか / 〇〇が存在しているか。exists〇〇と書きたくなったらhas○○に置き換えてみる。
should〇〇() 〇〇すべきか否か。shouldの後ろには動詞の原形を続ける。
(e.g. shouldUpdateCahce())
can〇〇() 〇〇できるか否か。canの後ろには動詞の原形を続ける
(e.g. canAccessCache())
need〇〇() 〇〇する必要があるかどうか。この場合のneedは助動詞なのでsは付けず、動詞原形を続ける。
(e.g. needUpdateCache())
contains() 引数で与えられたものを含んでいるか。リストなどのデータコレクションではよくあるメソッド。Kotlinでは in に置き換わる。
(e.g. items.contains(item), item in items)

前置詞を名前に含むメソッド

name meanings
findBy〇〇()

searchBy〇〇()

〇〇を使って取得する。〇〇はIdやIndexなど一意に定まるものが当てはまる。〇〇は名前に含めず引数で伝える場合もある。
(e.g. findById(id: Int), findBy(key: String))
of〇〇() 引数をもとにインスタンス化するときなどに使われる。By同様に〇〇は引数に含まれることもある。
(e.g. DateTimeFormatter .ofPattern("yyyy/MM/dd HH:mm"))
to〇〇() 〇〇に変換する。主に別型に変換するときに使われる。
(e.g. toString(), toInt())

データの取り扱いに関するメソッド

name meanings
fetch〇〇() データベースなどのデータリソースから〇〇を取得する。get〇〇より、データなどを引き出すという意味合いが強いので、外部のデータを対象にする場合はfetchを使う。
get〇〇() 既に加工されたデータなどを得るときなど、内部でのデータやり取りではgetを用いる。
load〇〇() プロパティに外部のデータを読み込む。戻り値は無くてもあっても良い。
delete〇〇() データの削除を行う。
remove〇〇() 同上。
update〇〇() 〇〇を更新する。
save() データリソースに保存する。〇〇は無くても良い。〇〇が無く単にsave()だけなら現在の変更を保存する意味合いでも使われる。
insert〇〇() 〇〇をデータリソースに挿入する。saveと似ているが、単に「挿入する」という意味合いだけ持つ。
commit() save()と似ていて、現在の変更を保存する/適用するという意味。この場合、insert()などではなく、add()といったメソッドとペアになることが多い。
clear() データをすべて消す。一つではなくてすべてまっさらにする意味合い。
put○○() 何かをキーにしてデータを保存する。putする先がかなり局所的なものである場合、キーは省かれることもあるかもしれないが、その場合はset()で代用しても良い。
(e.g. putInt("my_id", 1234))

特にファイルの取り扱いに関するメソッド

name meanings
write() ファイルに書き込む
read() ファイルを読み込む

コールバックメソッド

name meanings
on〇〇() 〇〇したときに処理されるメソッド名。on名詞+過去分詞 / on動詞 / on過去分詞の命名パターンがよく見られる。
(e.g. onCacheUpdated(), onClick(), onUpdated())(on動詞の形はライフサイクルを持つクラスなどに限定されるかもしれない。)
before〇〇() 〇〇が行われる前に処理されるメソッド名。
after〇〇() 〇〇が行われた後に処理されるメソッド名。

その他よくある命名

name meanings
try〇〇() 出来るかどうか分からないが○○の処理を行ってみる。戻り値は設定してもいいししなくても良いが失敗した場合が分かるようにする。例えば失敗ならnullを返すなど。
〇〇IfNeeded() 〇〇という処理をやるかどうかは呼び出し側では判断せずにメソッドに任せる。
(e.g. updateCacheIfNeeded())
newInstance() スタティックメソッド (クラスメソッド) 経由でインスタンスを生成するとき。createInstance()や単にnew() / create()だけという場合もあるが個人的には目的語が欲しい。
build() newInstance()と同じくインスタンス化するメソッド。抽象クラスを具現化するときに用いられ、その抽象クラスのクラスメソッドにbuild()メソッドが無きゃいけないというわけではない。それはFactoryクラスかもしれない。単にインスタンス化するのではなく、もっと複雑なロジックを通して組み立て上げる、という意味合いが強い。
show() Viewを表示したり、何かの中身を表示したりする。コンソール的な出力はprint()が無難か。

メソッド名の引き出しを増やすには

英語を勉強するのもそうだが、命名のノウハウを学びたければ、標準ライブラリのメソッド名を参考にするのが良い

AndroidやKotlinには特に、優秀な拡張メソッドがたくさんある。

filter, map, firstOrNull, distinct, sortedBy, takeIf,  … などなど。

それぞれのメソッドがどんな処理をしているのか時間を見つけて調べると良い。