0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

💻 コーディング基礎講座【第二回】命名規則を完全解説!変数・関数・クラスの名前のつけ方

0
Posted at

1. 👋 はじめに

前回は順次・分岐・反復処理と関数・スコープ・型を学びました。

今回は 命名規則 を解説します!

「コードは書く時間より読む時間の方が長い」
プログラミングの世界でよく言われる言葉です。
良い名前をつけることは、チームメンバーへの思いやりであり、
未来の自分へのプレゼントです🎁
特に今はAIを使ったコーディングが主流となり、圧倒的に長くなりました。

この記事を読めば:

  • ✅ キャメルケース・スネークケース・パスカルケースの違いがわかる
  • ✅ 変数・関数・クラスそれぞれの命名ルールがわかる
  • ✅ 良い名前・悪い名前の基準がわかる

2. 🎨 命名スタイルの種類

複数の単語を組み合わせて名前をつけるとき、つなぎ方にいくつかのスタイルがあります。

スタイル 書き方 主な使用場面
🐫 キャメルケース(ローワー) 2語目以降の先頭を大文字 userNamegetUserById 変数・関数(TS/JS)
🐍 スネークケース 単語をアンダースコアでつなぐ user_nameget_user_by_id 変数・関数(Python)
🅿️ パスカルケース(アッパーキャメル) すべての語の先頭を大文字 UserNameGetUserById クラス名(全言語共通)
🍢 ケバブケース 単語をハイフンでつなぐ user-nameget-user-by-id HTMLクラス名・ファイル名・URL

💡 キャメルケースには2種類あります!

  • ローワーキャメルケース:先頭が小文字 → userName(変数・関数で使う)
  • アッパーキャメルケース(=パスカルケース):先頭も大文字 → UserName(クラス名で使う)

他の教材で「アッパーキャメル」「パスカル」という言葉が出てきても同じものです。

また、ケバブケースは -(ハイフン)を使うため、
プログラムのコード内では「マイナス演算子」と誤認されてしまいます。
そのためコード内では使えず、HTMLのクラス名・CSSのクラス名・ファイル名・URL で活躍します。

それぞれのイメージ

userLoginCount

🐫 キャメルケース:userLoginCount    ← ラクダのコブのように途中で盛り上がる
🐍 スネークケース:user_login_count  ← ヘビのように横に這う
🅿️ パスカルケース:UserLoginCount   ← 全員が背筋を伸ばして並ぶ
🍢 ケバブケース  :user-login-count  ← 串に刺さった具材のよう

3. 📏 言語ごとの命名規則

命名スタイルは「どれが正解」ではなく、言語やフレームワークによって慣習が違います。

対象 Python TypeScript / JavaScript
変数 🐍 スネークケース user_name 🐫 キャメルケース userName
関数 🐍 スネークケース get_user() 🐫 キャメルケース getUser()
クラス 🅿️ パスカルケース UserAccount 🅿️ パスカルケース UserAccount
定数 🔠 大文字スネーク MAX_RETRY 🔠 大文字スネーク MAX_RETRY
ファイル名 🐍 スネークケース user_service.py 🐫/🍢 キャメル/ケバブuserService.ts or user-service.ts

💡 チームのコーディング規約に従うのが最重要!
自分がどのスタイルを好むかより、プロジェクトで統一されているスタイルに合わせることが大切です。


4. 🏷️ 変数の命名

良い変数名の条件

条件 説明
📖 意味がわかる 何が入っているか名前だけで理解できる
🎯 具体的 曖昧な単語を避ける
📏 適切な長さ 短すぎず・長すぎず
🔤 発音できる 声に出して読める名前にする

悪い変数名 vs 良い変数名

❌ 悪い例 問題点 ✅ 良い例
d 何のデータかわからない elapsed_days(経過日数)
data 何のデータかわからない user_profile(ユーザー情報)
flag 何のフラグかわからない is_logged_in(ログイン中か)
temp 何の一時変数かわからない temporary_file_path(一時ファイルのパス)
list 何のリストかわからない active_users(アクティブユーザー)
n 何の数かわからない retry_count(リトライ回数)

真偽値(boolean)の変数名

真偽値(True/False)を持つ変数は、is_has_can_ などで始めると読みやすくなります。

# ✅ 真偽値らしい命名
is_logged_in = True      # ログイン中か
has_permission = False   # 権限があるか
can_edit = True          # 編集できるか
is_empty = False         # 空かどうか

# ❌ 真偽値らしくない命名
login = True             # 動詞なのか名詞なのかわからない
permission = False       # 真偽値とわかりにくい

⚠️ 否定形の命名は避けよう!
is_not_activatedis_invalid のように否定形で名前をつけると危険です。

# ❌ 否定形の命名は条件式が読みにくくなる
is_not_activated = True

if not is_not_activated:  # 「アクティベートされていない、ではない」= 二重否定 🤯
    send_welcome_email()

# ✅ 肯定形にすると読みやすい
is_activated = False

if is_activated:  # 「アクティベートされているなら」= 直感的!
    send_welcome_email()

なるべく肯定形(is_validis_active)で命名し、
否定形(is_not_~is_invalid)は避けるのがプロの習慣です。

ループ変数の命名

# ✅ 意味のあるループ変数
for user in users: # 各ユーザーを取得
    print(user.name) # 各ユーザー名を表示

for product in products: # 各商品を取得
    total += product.price # 各商品価格の合計を算出

# ⚠️ i, j は数値インデックスのときだけ使う
for i in range(10):
    print(i)

# ❌ 意味不明なループ変数
for x in users:      # x が何かわからない
    print(x.name)

5. 🔧 関数・メソッドの命名

関数名は「動詞+名詞」で

関数は「何かをする」ものなので、名前も動詞から始めるのが基本です。

# Python
# ✅ 動詞+名詞の良い例
def get_user(user_id: int) -> User: ...       # 取得する
def create_account(email: str) -> Account: ... # 作成する
def update_profile(user: User) -> None: ...   # 更新する
def delete_post(post_id: int) -> None: ...    # 削除する
def send_email(to: str, body: str) -> None: ...# 送信する
def validate_input(data: str) -> bool: ...    # 検証する
def calculate_total(items: list) -> int: ...  # 計算する

# ❌ 動詞がない・意味不明な例
def user(user_id: int): ...       # 何をするの?
def processing(data: str): ...    # 何を処理するの?
def do_it(): ...                  # 何をするの?!

よく使う動詞の使い分け(対義語ペアで覚える)

対義語をペアで覚えると命名のブレが減ります!

動詞(取得・生成系) 対義語(削除・解放系) 使う場面
get(取得する) set (設定する) get_user / set_config
create (新規作成) delete / destroy(削除) create_user / delete_user
add (追加する) remove(取り除く) add_item / remove_item
open (開く) close(閉じる) open_file / close_file
start (開始する) stop(停止する) start_server / stop_server
動詞(操作・変換系) 使う場面
update / save(更新・保存) update_profilesave_draft
send(送信する) send_emailsend_notification
validate(検証する) validate_emailvalidate_form
calculate(計算する) calculate_taxcalculate_total
format(形式変換する) format_dateformat_currency
is/has/can(真偽値を返す) is_validhas_permission

真偽値を返す関数

# Python
# ✅ is_・has_・can_ で始まると戻り値が True/False とわかる
def is_valid_email(email: str) -> bool: ...
def has_permission(user: User, action: str) -> bool: ...
def can_edit(user: User, post: Post) -> bool: ...

6. 🏛️ クラスの命名

クラス名はパスカルケース・名詞で

クラスは「モノ(概念・オブジェクト)」を表すので、名詞を使います。

# ✅ 良いクラス名(パスカルケース・名詞)
class User: ...
class UserAccount: ...
class ProductRepository: ...
class EmailNotificationService: ...
class OrderSummary: ...

# ❌ 悪いクラス名
class user: ...              # 小文字はNG
class get_user: ...          # 動詞はNG
class MyClass: ...           # 意味がない
class Data: ...              # 曖昧すぎる

クラス名でよく使われる接尾語

接尾語 意味
Service ビジネスロジックを担う UserServicePaymentService
Repository DBのデータ取得を担う UserRepositoryOrderRepository
Controller リクエストを受け取る UserControllerAuthController
Manager 複数のものを管理する SessionManagerCacheManager
Handler イベントや処理を担う ErrorHandlerRequestHandler
Factory オブジェクトを生成する UserFactoryReportFactory

7. 🔢 定数の命名

定数は大文字スネークケース

変更されない値(定数)は大文字+アンダースコアで書くのが慣習です。
一目で「これは定数だ」とわかります。

# ✅ 定数の命名(大文字スネークケース)
MAX_RETRY_COUNT = 3
DEFAULT_TIMEOUT_SECONDS = 30
BASE_URL = "https://api.example.com"
TAX_RATE = 0.10

# ✅ TypeScript での定数
const MAX_RETRY_COUNT = 3;
const DEFAULT_TIMEOUT_MS = 30000;
const BASE_URL = "https://api.example.com";

なぜ大文字?
コードを読んでいるとき「あ、これは変更されない定数だな」と
瞬時に判断できるからです。
taxRate より TAX_RATE の方がひと目で定数とわかります。


8. 🚫 避けるべき命名パターン

① 略語・省略形を使いすぎる

# ❌ 略しすぎて意味不明
usr_nm = "Alice"
calc_ttl_amt = 1000
btn_clk_hdlr = lambda: None

# ✅ 読めばわかる名前に
user_name = "Alice"
calculate_total_amount = 1000
button_click_handler = lambda: None

② 型名を変数名に使う

# ❌ 型を名前にしている(意味がない)
user_list = []     # list であることはわかるが何のリスト?
name_string = ""   # string であることはわかるが意味がない

# ✅ 何が入っているかを示す
active_users = []  # 複数形にすることで「リスト・配列」だと伝わる!
first_name = ""

💡 リスト・配列は「複数形」にするのがモダンな書き方!
user_listuser_array とするより、
usersproductsactive_orders のように複数形(末尾に s にする方がスッキリしていて読みやすいです。
型名(listarray)を入れなくても「複数ありそう」と伝わります。

③ 連番で名前をつける

# ❌ 連番(何が違うのかわからない)
user1 = get_user(1)
user2 = get_user(2)
data1 = fetch_data()
data2 = process_data()

# ✅ 役割を示す名前に
admin_user = get_user(1)
guest_user = get_user(2)
raw_data = fetch_data()
processed_data = process_data()

9. 🎯 まとめ

対象 Python TypeScript ポイント
🏷️ 変数 user_name userName 意味がわかる・具体的
🔧 関数 get_user() getUser() 動詞+名詞で始める
🏛️ クラス UserAccount UserAccount パスカルケース・名詞
🔢 定数 MAX_RETRY MAX_RETRY 大文字スネークケース
✅ 真偽値 is_logged_in isLoggedIn is_has_can_ で始める

良い命名の3原則:
意図が伝わる(何が入っているか・何をするかが名前でわかる)
検索しやすい(ユニークで検索したときに見つけやすい)
一貫している(プロジェクト全体で同じルールを使う)

次回は コードの設計原則 を解説します!
DRY原則・KISS原則・単一責任の原則など、プロのエンジニアが大切にしているコードを美しく保つための考え方を学びます🌟

💬 質問や感想があれば、コメント欄でお気軽にどうぞ!
👍 役に立ったら、いいね&ストックをお願いします!
🎓 ここまで読んでくださって、本当にありがとうございました!


🔗 シリーズ記事

  • 【第一回】コードの基本構造
  • 【第二回】命名規則(この記事)
  • 【第三回】コードの設計原則(近日公開)
  • 【第四回】コメント・ドキュメント(近日公開)
  • 【第五回】エラーハンドリング(近日公開)
  • 【第六回】テスト・ファイル構造・バージョン管理(近日公開)
0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?