プログラミングの命名規則 — camelCase、snake_case、そしてその先へ
初めてコードベースを開いて、同じファイルに getUserName、get_user_name、GetUserName があるのを見たとき、すぐに何かがおかしいとわかります。命名規則は、チームで働くまでは些細なことのように思えますが、その瞬間から不可欠なものになります。
一貫した命名は個人の好みの問題ではありません。次にそのコードに触れる人 — 多くの場合、6ヶ月後の自分自身 — にとって読みやすくすることが目的です。
なぜ命名規則が重要なのか
プロジェクトに一貫した命名がないと、3つのことが崩壊します:
- 可読性が低下する — 変数のスタイルが数行ごとに変わると、脳はロジックを理解する代わりにフォーマットの解析にサイクルを浪費します
- チームコラボレーションが断片化する — プルリクエストが内容ではなくスタイルについての戦場になります。予測可能なパターンがないため、新しい開発者のオンボーディングに時間がかかります
- ツールが正しく機能しなくなる — リンター、オートコンプリート、コードジェネレーター、リファクタリングツールはすべて予測可能な命名パターンに依存しています
選ぶ規則よりも、一つを選んでそれを守ることの方がはるかに重要です。一貫した snake_case のコードベースは、3つの異なるスタイルを混在させたものよりも無限に優れています。
命名規則の完全ガイド
camelCase
最初の単語は小文字で、それ以降の各単語は大文字で始まります。区切り文字はありません。
// JavaScript / TypeScript
const userName = "Alice";
let itemCount = 42;
function getUserProfile(userId) {
return fetchData(`/users/${userId}`);
}
使用される場所: JavaScript、TypeScript、Java は変数、関数名、メソッド名に camelCase を使用します。Swift でもローカル変数や関数パラメータのデフォルトです。
PascalCase
すべての単語が大文字で始まります。UpperCamelCase とも呼ばれます。
// TypeScript / C#
class UserProfile {
firstName: string;
lastName: string;
}
interface DatabaseConnection {
host: string;
port: number;
}
// React コンポーネント
function NavigationBar({ items }: NavProps) {
return <nav>{/* ... */}</nav>;
}
使用される場所: C# はパブリックなほぼすべてに PascalCase を使用します — クラス、メソッド、プロパティ。TypeScript と JavaScript はクラス、インターフェース、型エイリアス、列挙型に使用します。React はコンポーネント名に PascalCase を義務付けています。JSX がコンポーネントと HTML 要素を区別する必要があるためです。
Go では、PascalCase には特別な意味があります:大文字で始まる識別子はエクスポート(パブリック)されます。
snake_case
すべての単語が小文字で、アンダースコアで区切られます。
# Python
user_name = "Alice"
item_count = 42
def get_user_profile(user_id):
return fetch_data(f"/users/{user_id}")
class UserProfile:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
使用される場所: Python はクラス名以外のほぼすべてに snake_case を使用します。Ruby も同じパターンです。Rust は変数、関数、モジュールに snake_case を使用します。データベーススキーマはほぼ普遍的にテーブル名とカラム名に snake_case を使用します。
SCREAMING_SNAKE_CASE
すべて大文字でアンダースコア区切り。変更してはいけない定数と値に予約されています。
// ほとんどの言語での定数
const MAX_RETRY_COUNT = 3;
const API_BASE_URL = "https://api.example.com";
const DEFAULT_TIMEOUT_MS = 5000;
使用される場所: ほぼすべての言語が定数に SCREAMING_SNAKE_CASE を使用します。全大文字のフォーマットは「この値を再代入しないでください」という普遍的なシグナルです。
kebab-case
すべて小文字でハイフンを区切り文字として使用。
/* CSS クラス名 */
.navigation-bar {
background-color: #1a1a2e;
}
.user-profile-card {
border-radius: 8px;
}
# CLI フラグ
npm install --save-dev eslint
git commit --no-verify
使用される場所: CSS と HTML は kebab-case を強く好みます。URL スラッグに使用されます。CLI ツールやコマンドラインフラグもこれに従います。
ほとんどのプログラミング言語ではハイフンがマイナス演算子として解釈されるため、kebab-case を変数名に使用できません。
dot.case
単語をドットで区切ります。
// Java パッケージ名
package com.example.userservice.controllers;
import org.springframework.boot.SpringApplication;
使用される場所: Java パッケージ命名、ファイル拡張子、Spring Boot などのフレームワークの設定プロパティキー。
Title Case
各主要な単語が大文字になります。「and」「the」「of」などの副次的な単語はフレーズの先頭でない限り小文字のままです。
使用される場所: UI の見出し、ページタイトル、メニュー項目、ドキュメントセクション、固有名詞。
path/case
単語をスラッシュで区切り、ファイルシステムや名前空間の規則に従います。
使用される場所: ファイルシステムパス、モジュールパス、名前空間の階層、URL ルーティング構造。
言語別規則表
| 言語 | 変数 / 関数 | クラス / 型 | 定数 | ファイル |
|---|---|---|---|---|
| JavaScript / TypeScript | camelCase | PascalCase | SCREAMING_SNAKE_CASE | kebab-case または camelCase |
| Python | snake_case | PascalCase | SCREAMING_SNAKE_CASE | snake_case |
| Go | camelCase(非エクスポート) | PascalCase(エクスポート) | PascalCase または ALL_CAPS | snake_case |
| Rust | snake_case | PascalCase | SCREAMING_SNAKE_CASE | snake_case |
| Java | camelCase | PascalCase | SCREAMING_SNAKE_CASE | PascalCase |
| C# | camelCase(プライベート) | PascalCase(パブリック) | PascalCase | PascalCase |
| Ruby | snake_case | PascalCase | SCREAMING_SNAKE_CASE | snake_case |
| CSS | kebab-case | — | — | kebab-case |
| SQL | snake_case(カラム) | — | 大文字(キーワード) | snake_case |
| PHP | camelCase | PascalCase | SCREAMING_SNAKE_CASE | PascalCase |
よくある間違いとその修正方法
1. 同じスコープ内で規則を混在させる
// ❌ 不一致
const user_name = "Alice";
const itemCount = 42;
const MaxRetries = 3;
// ✅ 一貫した camelCase
const userName = "Alice";
const itemCount = 42;
const maxRetries = 3;
2. 言語に対して間違った規則を使用する
# ❌ Python で camelCase を使用
def getUserProfile(userId):
userName = fetchUser(userId)
return userName
# ✅ Python が期待する snake_case を使用
def get_user_profile(user_id):
user_name = fetch_user(user_id)
return user_name
3. 略語とアクロニム
// ❌ アクロニムの扱いが不一致
const XMLParser = new XmlParser();
const htmlToJSON = convert(HTMLString);
// ✅ アクロニムを単語として扱う
const xmlParser = new XmlParser();
const htmlToJson = convert(htmlString);
4. is/has/can プレフィックスのないブーリアン名
// ❌ 曖昧なブーリアン
const active = true;
// ✅ 明確なブーリアンの意図
const isActive = true;
規則間の自動変換
言語をまたいで作業するとき、命名規則を手動で変換するのは面倒でエラーが起きやすいです。
私たちの文字列ケースコンバーターはこれを自動的に処理します。任意の識別子を貼り付けて、ワンクリックで camelCase、PascalCase、snake_case、kebab-case などの間で変換できます。
関連記事
- JSON フォーマットのベストプラクティス — 変数の命名と同じくらいきれいにデータを構造化する
- 正規表現チートシート — バリデーションとテキスト処理のパターンマッチングリファレンス
- SQL フォーマットのベストプラクティス — 読みやすい SQL クエリを書く
命名規則を自動変換する準備はできましたか? 文字列ケースコンバーターをお試しください — 任意の識別子を貼り付けて、camelCase、snake_case、PascalCase、kebab-case などの間で変換できます。登録不要、サーバーへのデータ送信なし、完全無料。