クラス名の命名規則について学んだのでまとめてみる

開発

こんにちは。

個人開発でnpmモジュールを公開する準備を進めている最中ですが、各クラスの命名ルールをなんとなく統一させたり、わかりやすい名前をつけることが難しいと感じていました。

関数名や変数名は表しやすいですが、クラス名となると複合的な要素を含むオブジェクトに名前をつけることになります。

クラスの名前は、クラスの役割によって決定されるべきなのは理解していましたが、基本的な命名案を自らにインプットする必要があると思い、命名原則を考える上で参考になる情報をまとめてみました。

大前提

  • クラスは単一責任とする
    • 命名を考える際に、そもそもそのクラスが大きすぎないか検討しましょう。
  • たいていの場合、クラス名には名詞を用いる
    • メソッド名は動詞を用いることが多いですが、クラス名は責務を持つモノとして捉えます。
  • 記法はチームで統一する
    • クラス名は概ねPascal記法が用いられますが、重要なことはプロジェクト内で記法が統一されていることです。

アンチパターン

下記の様なアンチパターンがあります。
要するに、クラスの役割と命名が離れてしまっていることが問題ですので、絶えず最適な名前がないか考えましょう。

  • 複数形にしてしまう
    • シンプルにわかりにくいです。
  • ManagerやController、InfoやDataのような意味の広い名前をつけてしまう
    • 広い名前をつけてしまえる場合は、クラスの複数の責務をもたせてしまっている可能性があります。

役割に応じたクラス名をつける

役割に応じたクラス名をつける一例を示します。

データソースを扱う

データのやり取りを行うクラスです。
外部リソースからデータを読み込んだり、保存したり、リクエストを投げるクラスが該当します。

DBを叩いたり、データを永続化するクラス

  • Store
  • Storage
  • Registory

データをキャッシュするクラス

  • Cache

ロギングを扱う、実行するクラス

  • Log
  • Logger

APIを叩くクラス

  • Gateway

データを消すクラス

  • Cleaner
  • Sweeper

サーバに対するクライアントとなるクラス

  • Client

データを読み込むクラス

  • Fetcher
  • Loader

データをパースするクラス

  • Parser

データを加工する

受け取ったデータを、加工するクラスです。

データの絞り込みを行うクラス

  • Filter

データを整形するクラス

  • Formatter

データを集約するクラス

  • Collector

データの抽出を行うクラス

  • Extractor

UI上の動作をあつかう

ユーザーの操作を受け取って実行したい処理をまとめるクラスです。

UI上の動作を表すクラス

  • Action

動作を受け取って、処理を実行するクラス

  • Dispathcer
  • Handler

動作を監視するクラス

  • Listener
  • Watcher

ツール

下記のように、実現したい日本語を記入するといい感じで英語に変換してくれるサービスもあります。
迷った場合は参考になります。

命名原則を知るメリット

今回、自分がクラス名をつける際の指針にすべく情報を集めている途中で気づいたのですが、
公開されているライブラリが何をしているかをなんとなく理解するうえでも役立つ知識だなと思いました。
わかりやすい命名をつけているライブラリであれば、コード自体を読まなくてもそのメソッドやクラスが何をしているか把握することができます。

これからも、より適切な命名がないか考え続けていきたいと思います。

参考

  • クラスの命名のアンチパターン – Qiita https://qiita.com/magicant/items/8134edf969f9629fa66e#settings-utilities-contents-
  • うまくクラス名を付けるための参考情報 – Qiita https://qiita.com/KeithYokoma/items/ee21fec6a3ebb5d1e9a8

コメント

タイトルとURLをコピーしました