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?

色々な言語・フレームワークの命名規則をまとめてみる

Posted at

はじめに

以前インターンでコードレビューをしてもらったとき、「命名規則に注意しろ」というようなことを言われました。

なので、今回は様々な言語・フレームワークに対しての命名規則をまとめてみました。

命名規則の用語

命名規則を考える際、よく出て来る用語があるので、ここでまとめておきます。

キャメルケース

  • 先頭の単語だけ小文字
  • それ以外の単語の先頭が大文字
  • 例: camelCase

スネークケース

  • 全て小文字
  • 単語の区切りにアンダースコアを用いる
  • 例: snake_case

アッパスネークーケース

  • 全て大文字
  • 単語の区切りにアンダースコアを用いる
  • 例: SNAKE_CASE
  • 定数名に用いられることが多い

パスカルケース

  • 先頭・単語の区切りが大文字
  • それ以外は全て小文字
  • 例: PascalCase

ケバブケース

  • 小文字を用いる
  • 単語をハイフンで区切る
  • 例: kebab-case

ハンガリアンケース

  • 変数名の先頭に型を示す接頭辞を付ける
  • 変数名本体はキャメルケース
  • 例: strName(文字列型の変数名)

ドットケース

  • 小文字を用いる
  • 単語をドットで区切る
  • 例: dot.case

アンチパターン

命名の際に避けたほうが良いパターンです。

以下具体的なものをまとめてみます。

変数名

  • data, info, valueなど
    • 中身が名前から想像できない
    • そもそも「データ」「情報」「値」はプログラム上の全てに当てはまることなので意味がない
  • 連番
    • player1, player2など
    • 番号がハードコーディングになっており変更がしづらい
    • そもそも番号に意味はない
  • 意味が広い単語
    • target, resultなど
    • 行う処理や行った処理に紐づいた名前としたほうがよい

メソッド名

  • check
    • 何をチェックするのかが明確ではない
    • 戻り値がBoolean型の変数を返す場合、ishasなどの接頭辞をつけ、チェック対象を明確にするべき
  • and, orなど
    • 1つのメソッド内に複数の処理がある可能性がある
    • メソッドを分割すべき

クラス名

  • manager
    • 何を管理しているのかが明確ではない
    • そもそもクラスは何かを管理するものなので、わざわざ言う必要はない
  • 複数形
    • クラス名は単数形であるべき
  • 手段を示す言葉
    • Wrapper, Builderなど
    • 目的を示す言葉を使うべき。
  • 抽象的な言葉
    • Managerなど
    • 名前に抽象的な言葉が使われていると、クラスの中身が膨大になる

言語・フレームワークごとの命名規則

ここからは各言語・フレームワークごとの命名規則(指針)をまとめてみます。

Java

制約

  • 全てのUnicode文字を使用可能だが、主に以下のみを使用する
    • 英数字
    • アンダースコア
  • 先頭文字は英字またはアンダースコア
  • 文字数に制限はない
  • 大文字と小文字は区別される
  • 予約語は使用できない

各要素に対する命名規則

  • ファイル名:クラス名+.java
  • クラス名:パスカルケース
  • メソッド名:キャメルケース
    • フィールドの値に対する取得・設定:先頭がgetまたはset、以降はキャメルケース
    • boolean変数を返すメソッド:is+形容詞has+名詞can+動詞の形のキャメルケース
  • 変数名:キャメルケース
  • 定数名:スネークケース

Python

PEP8で定められているようです。

制約

  • listdictstrなどの組み込み関数に使われている名前は避ける
    • 衝突回避のためには、最後に_を付ける
  • インスタンスメソッドの第一引数はselfとする
  • クラスメソッドの第一引数はclsとする
  • 1文字変数において、l(小文字のL)、O(大文字のO)、I(大文字のI)は避ける(数字の01と混同するため)
    • 1文字変数のスコープは1画面で見渡せる範囲に収める

各要素に対する命名規則

  • パッケージ名:全て小文字、なるべく短いもの、アンダースコアは非推奨
  • モジュール名:スネークケース
  • ファイル名:モジュール名+.py
  • 型名:パスカルケース
  • クラス名:パスカルケース
  • 例外名:パスカルケース
  • メソッド名:スネークケース
  • 関数名:スネークケース
  • 変数名:スネークケース
  • 定数名:アッパースネークケース
  • 内部変数名・内部メソッド名:アンダースコアで開始したスネークケース
  • 予約名:__[name]__の形式

Ruby

制約

  • モジュール名・クラス名にアンダースコアは使用しない
  • 略語は大文字のままとする
    • 例:HTMLURLなど

各要素に対する命名規則

  • ディレクトリ名:モジュール名をスネークケースとしたもの
  • ファイル名:クラス名・モジュール名をスネークケース+.rbとしたもの
  • モジュール名:パスカルケース
  • クラス名:パスカルケース
  • メソッド名:スネークケース
    • 真偽を返すメソッド:最後に?を付ける(isなどの接頭辞はつけない)
    • 破壊的なメソッド:最後に!を付ける
  • 変数名:スネークケース
  • 定数名:アッパースネークケース

Ruby on Rails

各要素に対する命名規則

  • コントローラ名:スネークケース
    • コントローラクラス名:パスカルケース、末尾にController
    • コントローラファイル名:コントローラクラス名+.rb、スネークケース
  • モデル名:スネークケース
    • モデルクラス名:パスカルケース、単数形
    • モデルファイル名:スネークケース+.rb、単数形
    • テーブル名:スネークケース、複数形

C++

各要素に対する命名規則

  • ファイル名:スネークケース+.cpp
  • 型名:パスカルケース
  • クラスのデータメンバ名:スネークケース、末尾に_
    • 例:my_variable_
  • 構造体のデータメンバ名:スネークケース
  • 関数名:パスカルケース
  • 変数名:スネークケース
  • 定数名:先頭にk、その後はパスカルケース
    • 例:kMyConstant
  • 列挙型名:先頭にk、その後はパスカルケース
    • 例:kMyEnum
  • マクロ名:アッパースネークケース

JavaScript

各要素に対する命名規則

  • ファイル名:キャメルケースかスネークケース+.js
  • コンポーネント名:パスカルケース
  • クラス名:パスカルケース
  • 関数名:キャメルケース
  • 変数名:キャメルケース
  • 定数名:アッパースネークケース

TypeScript

制約

  • nullundefinedは使用しないことが望ましい
  • 引用符号としては'を使用することが望ましい
  • スぺースは2つを使用する
  • _$を使用しない
  • 略語を使用する際、プラットフォーム名で必要とされない限りは先頭だけ大文字にする
    • 例:UrlHttpXMLPHPなど

各要素に対する命名規則

  • ディレクトリ名:ケバブケース
  • ファイル名:キャメルケース+.ts
  • コンポーネントファイル名:パスカルケース+tsx
  • 型名:パスカルケース、型名を示す名前を付けない
  • 関数名:キャメルケース
  • 変数名:キャメルケース
  • 定数名:アッパースネークケース
  • プロパティ名:キャメルケース
  • インターフェース名:パスカルケース
    • メンバ名:キャメルケース
    • プレフィックスにはIをつけない
  • 名前空間名:パスカルケース
  • Enum名:パスカルケース
    • メンバ名:パスカルケース

React

制約

  • 1つのファイルに1つのコンポーネントを定義する

各要素に対する命名規則

  • コンポーネント名:パスカルケース
  • ファイル名:コンポーネント名+.tsx
  • 関数名:キャメルケース、短く直感的で説明的、単語の収縮は避ける
  • 変数名:キャメルケース、短く直感的で説明的、単語の収縮は避ける
  • 定数名:アッパースネークケース
  • インスタンス名:キャメルケース

SQL

制約

  • 大文字を使用しない
  • ローマ字を避ける

各要素に対する命名規則

  • テーブル名:スネークケース、複数形
  • カラム名:スネークケース、ある瞬間の状態を表す名前
    • idcreated_atupdated_atは必ず入れる
    • 外部キーは[テーブル名の単数形]_id
    • 略語を使用しない
    • 時間を表すカラムは[受動態]_on[受動態]_at
  • ユニーク制約名:uq_[テーブル名]_NN
  • インデックス名:idx_[テーブル名]_NN
    • ユニークインデックスはui_[テーブル名]_NN

HTML/CSS

Trello CSS Guide

  • class名:ケバブケース
    • JavaScript用のclass属性にはjs-を付ける
  • idはCSSで使わない

PHP

制約

各要素に対する命名規則

  • クラス名:パスカルケース
  • 関数名:キャメルケースやスネークケース
  • 変数名:キャメルケースやスネークケース
  • 定数名:アッパースネークケース

おわりに

どの言語やフレームワークを用いていても、スムーズに開発を行えるようにするためには、命名規則を遵守することが重要だと感じました。

今回調べたことをしっかりと覚えておき、今後の開発などに生かしていきたいと思います。

参考文献

命名規則についてまとめてみた(キャメルケース,パスカルケース,スネークケース,ケバブケース, etc...) #命名規則 - Qiita

命名アンチパターン - Neo's World

命名アンチパターン #オブジェクト指向 - Qiita

クラスの命名のアンチパターン #オブジェクト指向 - Qiita

各プログラミング言語の一般的な命名規則まとめ | 株式会社一創

Java言語の命名指針 #命名規則 - Qiita

Javaの予約語

Python命名規則一覧 #コーディング規約 - Qiita

Python命名規則の基本

Pythonの命名規則とルール

Python命名規則:PEP8とリーダブルコードより #Python3 - Qiita

【Ruby超入門】命名規則

Ruby 命名規則まとめ #Ruby - Qiita

Railsにおける命名規則 #Rails - Qiita

Google C++ スタイルガイド(日本語全訳) Google C++ Style Guide (Japanese)

C++命名規則一覧 #コーディング規約 - Qiita

JavaScriptの命名規則早見表(と記法) #JavaScript - Qiita

スタイルガイド(コーディング規約) | TypeScript Deep Dive 日本語版

React / TypeScript の設計前に、改めて命名規則について把握する #React - Qiita

[TS] 命名規則のまとめ #TypeScript - Qiita

データベースオブジェクトの命名規約 #規約 - Qiita

htmlのid属性とclass属性の命名はハイフンかcamelかsnakeか #HTML - Qiita

Trello CSS Guide

雑にしていない?PHPの命名規則を理解し、効率よく開発を進めよう - 忍者CODEマガジン

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?