命名規則とケース — camelCase/snake_case/kebab-case/PascalCaseの違い

命名規則(ケーススタイル)とは、複数の単語からなる名前で単語の区切りをどう表すかのルールです。userNameUserNameuser_nameuser-name はどれも同じ意味ですが、見た目も使う場面も異なります。本記事では camelCase / PascalCase / snake_case / SCREAMING_SNAKE_CASE / kebab-case / dot.case の定義と例、言語・文脈ごとの慣習、変換時の単語境界の考え方、一貫性を保つ lint ツール、よくある誤りを正確に整理します。

結論を先に:ケースに絶対的な正解はなく、「使う言語・文脈の慣習に合わせ、一貫させる」ことが最重要です。目安として、JavaScript の変数・関数は camelCase、クラス・型は PascalCase、Python の変数・関数は snake_case、定数は SCREAMING_SNAKE_CASE、CSS クラスや URL は kebab-case が基本になります。

1. なぜ命名規則が重要なのか

命名規則は「好みの問題」だけではありません。チームで書くコードでは、名前の付け方が揃っているほど読みやすく、間違いが減ります。たとえば同じファイルの中に userNameuser_name が混在していると、「これは別の変数なのか?」と読み手が一瞬迷います。

つまり命名規則は、人間にとっての読みやすさと、機械にとっての正しさの両方に関わります。まずは各ケースの形を正確に押さえましょう。

2. 各ケースの定義と例

主要なケーススタイルを、同じ語("user profile id" の 3 語)でそろえて比較します。

ケース区切りの表し方例(user profile id)
camelCase先頭は小文字、2 語目以降の頭文字を大文字userProfileId
PascalCase
(UpperCamelCase)
すべての単語の頭文字を大文字(先頭も大文字)UserProfileId
snake_caseすべて小文字、単語をアンダースコアで区切るuser_profile_id
SCREAMING_SNAKE_CASE
(CONSTANT_CASE)
すべて大文字、単語をアンダースコアで区切るUSER_PROFILE_ID
kebab-caseすべて小文字、単語をハイフンで区切るuser-profile-id
dot.caseすべて小文字、単語をドットで区切るuser.profile.id

ハイフンとアンダースコアは見た目が似ていますが、使える場所が違います。多くのプログラミング言語では、ハイフンは「引き算」の演算子と区別がつかないため識別子には使えません。そのため kebab-case はコード内の変数名ではなく、主に CSS や URL、ファイル名で使われます。

3. 言語・文脈ごとの慣習

同じ「変数名」でも、言語によって標準的なケースは異なります。代表的な慣習をまとめます。

言語・文脈変数・関数クラス・型定数
JavaScript / TypeScriptcamelCasePascalCaseSCREAMING_SNAKE_CASE
Python(PEP 8)snake_casePascalCaseSCREAMING_SNAKE_CASE
Java / C#camelCase *PascalCaseSCREAMING_SNAKE_CASE **
GocamelCase(公開は PascalCasePascalCasePascalCase / camelCase
Rustsnake_casePascalCaseSCREAMING_SNAKE_CASE

* C# はメソッドを PascalCase、ローカル変数を camelCase にするなど細かな違いがあります。** C# の定数は PascalCase が推奨されるなど、規約はチームや公式ガイドにより差があります。迷ったら、その言語の公式スタイルガイド(Python なら PEP 8、Go なら Effective Go など)に従うのが安全です。

コードの外でも文脈ごとの定番があります。

4. 変換時の単語境界の考え方

あるケースから別のケースへ変換するとき(ツールや関数で自動変換するとき)に肝になるのが、「どこが単語の区切りか」を正しく決めることです。区切りの捉え方さえ決まれば、あとは区切り文字や大文字小文字を当てはめるだけです。

難しいのは連続する大文字(頭字語)の扱いです。parseHTMLHTTPServer のような名前では、どこで区切るかが流儀によって変わります。

頭字語の扱いに注意。たとえば HTTPServer を camelCase にするとき、httpServer とするか hTTPServer とするかで結果が変わります。一般には頭字語も 1 単語として扱い、httpServerHttpServer のように先頭以外を小文字化する流儀が読みやすく、多くのスタイルガイドが推奨しています。自動変換ツールを使うときは、頭字語をどう扱うかを意識すると意図しない結果を避けられます。

つまり変換の本質は「名前を単語の列に分解し、目的のケースで再結合する」ことです。元のケースを正しく読み取れれば、camelCase ⇄ snake_case ⇄ kebab-case の相互変換は機械的に行えます。

5. 一貫性と lint ツール

命名規則は「決める」よりも「守り続ける」ほうが難しいものです。人手のレビューだけに頼ると見落としが出るため、自動でチェックする lint ツールを導入するのが定石です。

ポイントは、規約を文章で書くだけでなく、ツールで機械的に強制することです。そうすれば新しいメンバーが加わっても、レビューで毎回指摘する手間なく一貫性を保てます。

6. よくある誤り

最後に、命名規則まわりでありがちなつまずきを挙げます。

どの誤りも根は同じで、「慣習に合わせ、一貫させる」ことを徹底すれば避けられます。迷ったら言語・文脈の定番に従い、ツールで強制しましょう。

Free Tool Case Converter で実際に変換する 入力した文字列を camelCase・PascalCase・snake_case・kebab-case などへブラウザ内で相互変換できます。命名の付け替えやリネームに便利です。

よくある質問(FAQ)

camelCase と PascalCase の違いは何ですか?

どちらも単語の区切りを大文字で表すスタイルですが、先頭文字の扱いが異なります。camelCase は先頭を小文字にし、2 語目以降の頭文字だけを大文字にします(例:userName)。PascalCase(UpperCamelCase とも呼びます)は先頭の単語も大文字にします(例:UserName)。多くの言語では camelCase を変数・関数名に、PascalCase をクラス名・型名に使い分けます。

Python ではどのケースが慣習ですか?

Python の公式スタイルガイド PEP 8 では、変数・関数・モジュールには snake_case、クラス名には PascalCase(CapWords)、定数には SCREAMING_SNAKE_CASE を使うのが基本です。JavaScript の camelCase に慣れた人が Python で変数を camelCase にしてしまうのはよくある食い違いなので、プロジェクトの言語に合わせた慣習に従いましょう。

URL でケバブケースがよく使われるのはなぜですか?

URL のパスやファイル名では、単語の区切りにハイフンを使う kebab-case が好まれます。理由はいくつかあります。まず多くのサーバやファイルシステムは大文字・小文字を区別するため、小文字に統一すると事故が減ります。次に、アンダースコアはリンクの下線と重なって見えづらく、検索エンジンも歴史的にハイフンを単語区切りとして扱いやすいとされてきました。読みやすさと安全性の両面から kebab-case が定番になっています。

← 技術ブログ一覧へ戻る