3秒でわかる
単語をすべて小文字にして下線でつなぐ命名規則。Python の変数名や関数名、データベースの列名で標準とされ、読み違いを減らします。
もう少し詳しく
どういうものか
user_name max_retry_count のように、単語の区切りをアンダースコアで表し、文字はすべて小文字で書く命名規則です。地面を這う蛇の姿に見えることからこの名が付きました。
Python の公式スタイルガイド PEP 8 は、変数・関数・メソッド・モジュール名にこの形を指定しています。SQL のテーブル名や列名でもよく使われ、これは多くのデータベースが識別子の大文字小文字を区別しない、あるいは環境によって挙動が変わるためです。下線で区切っておけば、どこで単語が切れるかが大文字に頼らず伝わります。
なぜ必要か
命名規則そのものに優劣は無く、価値は「そろっていること」から生まれます。同じプロジェクトの中に userName と user_name が混ざると、変数を書くたびにどちらだったかを確認する手間が増え、タイプミスによる未定義エラーも増えます。
言語ごとの慣習に合わせておく利点もあります。Python のコードに getUserName が出てくると、読み手は「他言語から移植したのか」「意図があるのか」と余計な推測を強いられます。
具体例
# PEP 8 に沿った書き分け
MAX_RETRY = 3 # 定数は大文字スネークケース
class OrderReport: # <a href="/glossary/class" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">クラス</a>だけはパスカルケース
def total_price(self): # メソッドはスネークケース
unit_price = 120
item_count = 3
return unit_price * item_countCREATE TABLE order_items (
order_item_id BIGINT PRIMARY KEY,
created_at DATETIME NOT NULL
);似た用語との違い
| 記法 | 例 | 主な使いどころ |
|---|---|---|
| スネークケース | user_name | Python の変数・関数、SQL の列名 |
| キャメルケース | userName | JavaScript, Java の変数・メソッド |
| パスカルケース | UserName | クラス名、React コンポーネント名 |
| ケバブケース | user-name | URL, CSS のクラス名, HTML 属性 |
| 大文字スネーク | USER_NAME | 定数、環境変数 |
つまずきやすいところ
言語をまたぐ境界で命名が混ざります。Python のバックエンドがスネークケースで書いた辞書をそのまま JSON にして返すと、キャメルケースが慣習の JavaScript 側に created_at が流れ込みます。どちらに合わせるかをチームで先に決め、変換するなら API の入口と出口の1か所にまとめると、あちこちで変換関数が増えずに済みます。
Python でもクラス名だけはパスカルケースです。すべてをスネークケースにすると規約から外れます。