← ブログ · · ConvertCaseHQ チーム · 9 分で読めます

camelCase と PascalCase の違い:キャメルケースとパスカルケースの使い分け

camelCase(キャメルケース)と PascalCase(パスカルケース)の違いは、最初の 1 文字だけです。camelCase は小文字で始め、2 語目以降の頭文字を大文字にします(userName、parseResponse)。PascalCase は、最初の単語も含めてすべての単語の頭文字を大文字にします(UserName、ResponseParser)。慣例として、PascalCase は型(クラス、インターフェース、列挙型、React コンポーネント)を、camelCase は値や動作(変数、関数、メソッド、プロパティ)を表します。

このたった 1 つの大文字は、見た目以上に多くの情報を伝えています。以下では、それが何を示すのか、単なるマナーではなく強制されているのはどの言語か、そして誰の意見も一致しない部分、つまり略語の扱いについて説明します。

camelCase と PascalCase の早見表

camelCasePascalCase
最初の文字小文字大文字
別名lowerCamelCase、mixedCase(PEP 8)、camelCasing(Microsoft)UpperCamelCase、CapWords(PEP 8)、StudlyCaps(PHP の PSR-1)、PascalCasing(Microsoft)
主な用途変数、関数、メソッド、プロパティ、パラメータークラス、インターフェース、型エイリアス、列挙型、コンポーネント
例orderCount、sendInvoice()OrderService、InvoiceStatus

スタイルガイドを読むときは、用語に注意してください。どちらのスタイルも「camel case」と呼ぶ人は多く、PEP 8 に至っては、PascalCase を指す自身の用語 CapWords の別名として CamelCase を挙げています。ガイドの意味がはっきりしないときは、例を見ましょう。

最初の文字が重要な理由:型と値

この慣例のおかげで、何も調べずにコードを読めます。const invoice = new Invoice(order) なら、Invoice が生成するもので、invoice が返ってきたものだと一目でわかります。TypeScript のシグネチャも同じです。function total(order: Order): Money では、小文字の名前が値で、大文字で始まる名前が型です。

また、1 つの単語で型と値の両方に名前を付けても衝突しません。これはしょっちゅう起こります。user: User、config: Config、request: Request などです。大文字・小文字を区別する言語では、これらは別々の識別子であり、どちらがどちらなのかは大文字が読み手に教えてくれます。

言語が強制する場合

JavaScript、Java、C#、Python では、クラス名の大文字・小文字は慣例にすぎません。class invoice と書くことを妨げるものは何もありません。JavaScript なら、ESLint の new-cap ルールで慣例をチェックに変えられます。このルールは標準で new invoice() を指摘し、さらに Invoice() のように大文字で始まる関数を new なしで呼び出すことも指摘します。これはたいていバグです。いくつかの言語やフレームワークはさらに踏み込んで、このルールを組み込んでいます。

Go:最初の文字が可視性のルール

Go には public や private のキーワードがありません。パッケージレベルの名前、構造体のフィールド、メソッドは、最初の文字が大文字ならエクスポートされ、小文字ならそのパッケージ内でしか使えません。PascalCase と camelCase のどちらにするかで、それを選ぶわけです。

package shapes

import "math"

// Circle is exported, so other packages can use it.
type Circle struct {
	Radius float64 // exported field
	label  string  // unexported field
}

// Area is exported.
func Area(c Circle) float64 { return math.Pi * square(c.Radius) }

// square is unexported: only code inside package shapes can call it.
func square(x float64) float64 { return x * x }
c := shapes.Circle{Radius: 2}
fmt.Println(shapes.Area(c))   // fine
fmt.Println(shapes.square(2)) // compile error: square is not exported

Effective Go が、エクスポートされないフィールド owner のゲッターは GetOwner ではなく Owner と名付けるべきだとしているのも、これが理由です。大文字であること自体が、外から使える入り口だと示しているからです。

React:コンポーネントは大文字で始める

React のドキュメントははっきり書いています。コンポーネント名は大文字で始めなければ動作しません。JSX は、<section> のような小文字のタグを HTML 要素として、<OrderSummary /> のような大文字で始まるタグを自作のコンポーネントとして扱います。

Ruby:クラス名は定数

Ruby では、大文字で始まる名前はすべて定数で、クラス名は定数でなければなりません。class Invoice は動きますが、class invoice は構文エラーになります(「class/module name must be CONSTANT」)。

言語別の使い分け

  • JavaScript と TypeScript:変数、関数、メソッド、プロパティは camelCase。クラス、インターフェース、型エイリアス、列挙型、コンポーネントは PascalCase。
  • Java と Kotlin:同じ使い分けに加え、真の定数にはアンダースコアでつないだ大文字を使います(MAX_RETRIES)。
  • C#:ほかの言語よりも PascalCase をずっと多く使います。メソッド、プロパティ、イベント、public フィールド、名前空間、さらには定数まで PascalCase です。camelCase はパラメーターとローカル変数に使い、private フィールドには _camelCase を使います。典型的なシグネチャは public decimal CalculateTotal(decimal taxRate) のようになります。
  • Swift:型とプロトコルは PascalCase、それ以外はすべて camelCase。
  • Go:求める可視性に合うほう。
  • Python:PascalCase はクラスだけです。関数と変数は snake_case(スネークケース)で、PEP 8 が camelCase を認めているのは、古いコードですでにそれが主流になっている場合だけです。
  • PHP(PSR-1):クラスは PascalCase、メソッドは camelCase。

定数やファイル名などについては、開発者向けの命名規則チートシートをご覧ください。

難しいのは略語

userId と userID、HttpClient と HTTPClient、正しいのはどちらでしょうか。主要なスタイルガイドの答えは、それぞれ異なります。

ガイドルール例
Google(JavaScript、TypeScript、Java)略語を普通の単語として扱うxmlHttpRequest、customerId、loadHttpUrl
Microsoft .NET2 文字の略語は両方とも大文字のまま、それより長い略語は最初の文字だけを大文字にするIOStream、ioStream、HtmlTag
Go1 つの略語の中で大文字・小文字をそろえるServeHTTP、appID、xmlHTTPRequest
Swift普段大文字で書く略語は、すべて大文字かすべて小文字にするutf8Bytes、userSMTPServer
Rust略語を 1 つの単語として扱うUuid、Stdin
Python(PEP 8)CapWords では略語全体を大文字にするHTTPServerError
Airbnb JavaScriptすべて大文字かすべて小文字SMSContainer、httpRequests

私たちの考えはこうです。使っている言語のガイドにルールがあるなら、それに従いましょう。標準ライブラリも同僚も、それを前提にしているからです。ルールがないなら、略語を単語として扱います(HttpClient、userId)。2 つの略語が隣り合っても単語の境目がわかりますし(XMLHTTPRequest と XmlHttpRequest を比べてみてください)、ケーススタイル間で自動変換しても名前が崩れません。ブラウザー自身の XMLHttpRequest でさえ、1 つの名前の中で両方の方式が混ざっています。

さらに背景を知りたい場合は、Microsoft の大文字表記規則(capitalization conventions)が、ひとそろいのルールを 1 ページにまとめた良い例です。

camelCase と PascalCase を相互に変換する

単純な名前なら、変換は 1 文字だけです。最初の文字の大文字・小文字を切り替えます。

const toPascal = (s) => s.charAt(0).toUpperCase() + s.slice(1);
const toCamel = (s) => s.charAt(0).toLowerCase() + s.slice(1);

toPascal("orderTotal"); // "OrderTotal"
toCamel("OrderTotal");  // "orderTotal"
toCamel("HTMLParser");  // "hTMLParser" (acronyms need a smarter split)

最後の行を見れば、ツールがまず名前を単語に分割する理由がわかります。扱いにくい入力に対して、ConvertCaseHQ の文字ケース変換ツールが出力する結果は次のとおりです。

入力camelCasePascalCase
user iduserIdUserId
XMLHttpRequestxmlHttpRequestXmlHttpRequest
getUserIDgetUserIdGetUserId
IOErrorioErrorIoError
iPhoneiPhoneIPhone

このツールは既存の大文字の位置で単語を区切り、略語を単語として書くので、結果は Google のルールと一致します。プロジェクトが Go、.NET、PEP 8 の略語ルールに従っているなら、変換後にそうした名前を手で直してください(Go なら getUserId は getUserID になります)。もう 1 つの落とし穴はブランド名です。IPhone がおかしく見えることを知っているアルゴリズムはありません。

やりがちな 2 つのミス

1 つ目は、インスタンスを大文字で始めることです。const Cart = new ShoppingCart() と書くと Cart が 2 つ目のクラスのように見え、次にコードを読む人はその定義を探しに行ってしまいます。2 つ目は、JavaScript で function FormatPrice() のような PascalCase のヘルパー関数を書くことです。コンストラクターや React コンポーネントでない限り、読み手は new か JSX が必要だと考えますし、どちらも使わずに呼び出せば new-cap が警告を出します。

覚えておきたい目安

型、または new で生成するものなら PascalCase、値や動作なら camelCase を使います。略語の扱いは言語のガイドに任せ、残りはリンターに覚えてもらいましょう。定数や private フィールドなど JavaScript 特有の話は、JavaScript の命名ガイドをご覧ください。

© 2026 ConvertCaseHQ. All rights reserved.