キャメルケース・スネークケース・ケバブケース:言語別の命名規則チートシート

まず結論です。型とクラスは、ほぼすべての言語で PascalCase(パスカルケース)です。変数と関数は、JavaScript、Java、C#、Kotlin、Swift では camelCase(キャメルケース)ですが、Python、Ruby、Rust では snake_case(スネークケース)です。定数はほとんどの言語で SCREAMING_SNAKE_CASE ですが、Go、Swift、C#、Google スタイルの C++ は例外です。URL、CSS ファイル、パッケージ名に入るものはたいてい小文字の kebab-case(ケバブケース)で、環境変数はアンダースコアでつないだ大文字です。
大まかなパターンはこれだけです。ただ、コードレビューで議論になるのは細部なので、このチートシートでは各言語の公式または最も広く使われているスタイルガイドが実際に定めている内容だけを取り上げ、すべての言語について出典を示します。
camelCase・snake_case・kebab-case:5 つのスタイルとその別名
- camelCase(
orderTotal):最初の単語は小文字、2 語目以降は頭文字を大文字にします。lowerCamelCase とも呼ばれ、PEP 8 では mixedCase と呼んでいます。 - PascalCase(
OrderTotal):すべての単語の頭文字を大文字にします。UpperCamelCase、CapWords(PEP 8)、StudlyCaps(PHP の PSR-1)とも呼ばれます。 - snake_case(
order_total):小文字の単語をアンダースコアでつなぎます。 - SCREAMING_SNAKE_CASE(
ORDER_TOTAL):大文字の単語をアンダースコアでつなぎます。Google の JavaScript ガイドでは CONSTANT_CASE、Java ガイドでは UPPER_SNAKE_CASE と呼んでいます。 - kebab-case(
order-total):小文字の単語をハイフンでつなぎます。ハイフンがマイナス記号になるため、ほとんどの言語では識別子に使えません。
名前のスタイルを切り替えるには、当サイトの文字ケース変換ツールに貼り付けてください。スペース、アンダースコア、ハイフン、既存の大文字の位置で単語を区切るので、order_total、order-total、OrderTotal を互いにきれいに変換できます。ただし、変換は 1 つの名前ずつ行ってください。ボックス内のテキスト全体を 1 つの識別子として扱うためです。
チートシート:言語別の命名規則
| 言語 | 変数と関数 | クラスと型 | 定数 | 出典 |
|---|---|---|---|---|
| JavaScript、TypeScript | camelCase | PascalCase | 変更されないモジュールレベルの値は CONSTANT_CASE | Google の JavaScript・TypeScript スタイルガイド |
| Java | camelCase | PascalCase | 中身まで完全に不変な static final フィールドは UPPER_SNAKE_CASE | Google Java Style Guide |
| Kotlin | camelCase | PascalCase | const と、中身まで完全に不変なトップレベルまたはオブジェクトの値は SCREAMING_SNAKE_CASE | Kotlin のコーディング規約 |
| C# | ローカル変数とパラメーターは camelCase、private フィールドは _camelCase、メソッドと public メンバーは PascalCase | PascalCase。インターフェースには I プレフィックスを付ける(IWorkerQueue) | PascalCase | Microsoft の .NET ドキュメント |
| Swift | camelCase | PascalCase | camelCase | Swift API Design Guidelines |
| Go | エクスポートしない場合は camelCase、エクスポートする場合は PascalCase | 同じルール | こちらも MixedCaps(MaxPacketSize) | Effective Go、Google Go Style |
| Python | snake_case | PascalCase(CapWords) | UPPER_SNAKE_CASE | PEP 8 |
| Ruby | snake_case | PascalCase | SCREAMING_SNAKE_CASE | Ruby Style Guide |
| Rust | snake_case | PascalCase(UpperCamelCase) | SCREAMING_SNAKE_CASE | Rust API Guidelines(RFC 430) |
| PHP | メソッドは camelCase、プロパティは自由 | PascalCase(StudlyCaps) | クラス定数は UPPER_SNAKE_CASE | PSR-1 |
| C++ | 変数は snake_case、関数は PascalCase | PascalCase | kDaysInAWeek | Google C++ Style Guide(いくつかある規約の 1 つ) |
いくつかの行には補足が必要です。Go では、先頭の文字はそもそもスタイルの選択ではなく、可視性のルールです。Area はパッケージからエクスポートされ、area はエクスポートされません。これはコンパイラーが強制します。C++ には言語全体で共通の規約がありません。標準ライブラリ自体は snake_case(std::unordered_map、push_back)を使っているので、Google の行は唯一のルールではなく、よく文書化された選択肢の 1 つと考えてください。
Rust はスタイルに関して珍しいほど厳格です。コンパイラーが標準の設定で警告を出すので、fn GetUser() や struct user_account と書くと、リンターを実行する前から rustc が get_user と UserAccount を提案してきます。
ファイル名、モジュール名、パッケージ名
- Java:public なトップレベルクラスは、大文字・小文字まで含めてクラス名とまったく同じ名前のファイルに置く必要があります。
OrderServiceはOrderService.javaに入れ、それ以外の名前だと javac がエラーにします。 - Kotlin:クラスを 1 つだけ含むファイルは、そのクラスの名前にします。それ以外のファイルには、
ProcessDeclarations.ktのように内容を表す UpperCamelCase の名前を付けます。 - Python:モジュール名は短くすべて小文字にし、読みやすくなるならアンダースコアを使います。パッケージ名も短い小文字にすべきとされ、PEP 8 はアンダースコアの使用を非推奨としています。
- Ruby:中のクラスに合わせた snake_case のファイル名にします。
HelloWorldならhello_world.rbです。 - Go:パッケージ名は、アンダースコアも mixedCaps も使わない小文字の 1 単語にします。
encoding_base64やencodingBase64ではなくbase64です。 - JavaScript と TypeScript:統一されたルールはありません。Google の JavaScript ガイドはアンダースコアかダッシュを使ったすべて小文字のファイル名を求め、TypeScript ガイドは snake_case を使います。Airbnb のガイドではファイル名をデフォルトエクスポートと一致させるので、
CheckBoxクラスはCheckBox.jsに置きます。プロジェクトごとにどれか 1 つを選び、文書に残しておきましょう。 - npm パッケージ:新しいパッケージ名には大文字を一切使えません。
ソースコード以外:環境変数、CSS、HTML、URL、JSON、SQL
| 場所 | 規則 | 例 | 理由 |
|---|---|---|---|
| 環境変数 | SCREAMING_SNAKE_CASE | DATABASE_URL | PATH や HOME などのシステム変数に合わせた形です。Linux と macOS では名前の大文字・小文字が区別されますが、Windows では区別されません。 |
| CSS プロパティ | kebab-case | background-color | 言語仕様で決まっています。 |
| CSS カスタムプロパティ | 2 つのダッシュの後に kebab-case | --brand-color | 大文字・小文字が区別されるため、--Brand-Color は別のプロパティになります。 |
| CSS クラス名 | kebab-case。BEM と組み合わせることが多い | card__title--large | 周りのプロパティと同じ感覚で読めます。 |
| JavaScript から扱う CSS | camelCase | el.style.backgroundColor | style オブジェクトはプロパティ名を camelCase で公開しています。 |
| HTML の data 属性 | kebab-case | data-index-number | JavaScript からは dataset.indexNumber として読み取ります。 |
| URL パス | 小文字の kebab-case | /blog/developer-case-styles | Google はアンダースコアよりハイフンを推奨しており、/APPLE と /apple を別の URL として扱います。 |
| JSON のキー | 標準はない | userId または user_id | 主に利用する側に合わせ、境界で変換します。 |
| SQL のテーブルと列 | 小文字の snake_case | order_items | 主要なデータベースならどれでも引用符なしで使えます。 |
環境変数には 1 つ意外な点があります。POSIX では、標準ユーティリティは大文字の名前を使うとされ、小文字を含む名前はアプリケーション用に予約されています。つまり、小文字の名前が標準の変数と衝突することはありません。それでも大文字が定着した慣習なので、私たちなら大文字のままにして、独自のプレフィックス(MYAPP_TIMEOUT)を付けることで衝突を避けます。
CSS と SQL の行については、それぞれ専用の記事があります。クラス名については CSS の命名と BEM を、データベースでは小文字にしておくべき理由については SQL の命名規則 をご覧ください。
略語:スタイルガイドの意見が分かれるところ
userName についてはどのガイドも一致していますが、userID となると分かれます。Google の JavaScript ガイドと Java ガイドは、略語を普通の単語と同じように小文字にします(xmlHttpRequest、customerId)。Go は 1 つの略語の中で大文字・小文字をそろえます(ServeHTTP、appID)。Microsoft の .NET ガイドラインは、2 文字の略語は両方を大文字にします(IOStream)が、それより長い略語は最初の文字だけを大文字にします(HtmlTag)。Rust は略語を 1 つの単語として扱い(Uuid)、PEP 8 は HttpServerError より HTTPServerError を推奨しています。それぞれの方式は camelCase と PascalCase の比較で並べて比べています。
迷ったときの選び方
- プラットフォームが決めていないか確認する。CSS のプロパティ名、Java のファイル名、Go のエクスポートされる名前、React のコンポーネント名(大文字で始める必要があります)は、スタイルとして選べるものではありません。
- 言語の公式ガイドに従う。新しいコードは、一緒に使う標準ライブラリと同じ見た目にしましょう。
- 既存のプロジェクトに合わせる。PEP 8 もはっきり述べているとおり、スタイルガイドとの一貫性より、プロジェクト内での一貫性のほうが大切です。
- リンターに覚えさせる。ESLint の
camelcaseルール、Python 向け Ruff のNルール、rustc の組み込み警告が、レビュアーが指摘するより先にミスを見つけてくれます。 - 境界で一度だけ変換する。snake_case の JSON と camelCase の JavaScript が出会うときは、両方のスタイルがコードベース全体に入り込まないよう、1 つのシリアライズ層でキー名を変換しましょう。


