ぱんだツールズぱんだツールズ

技術背景

命名規則の変換 — camelCase・snake_case・PascalCase・kebab-caseの使い分け

約5分

APIのJSONが user_name でフロントはuserName — 毎回手で書き換えてませんか? 命名規則(naming convention)はプログラミング言語・フレームワーク・用途ごとに慣習が異なり、どれを選ぶかを迷う場面は思いのほか多いです。 この記事では、実務でよく使う5種類の記法の違いと、JavaScript・Python・CSS・DB・URLなど場面別の使い分け、 そして変換ツールの裏で動いているロジックの難しさまでを整理します。

主要な5つの命名規則

プログラミング・Web開発で日常的に使われる命名規則は、主に次の5種類です。 いずれも「複数単語をどうつなぐか」という問題への異なる答えと考えると整理しやすくなります。

記法主な用途
camelCase(キャメルケース)userName / getUserProfileJavaScript・Java・Swiftの変数・関数名
PascalCase(パスカルケース)UserName / UserProfileクラス名・型名・Reactコンポーネント
snake_case(スネークケース)user_name / get_user_profilePython・Ruby・DB列名・Rails系JSON
kebab-case(ケバブケース)user-name / user-profileURL・CSSクラス名・HTML属性・ファイル名
SCREAMING_SNAKE_CASEMAX_RETRY / API_BASE_URL定数・環境変数・マクロ

このほか「Train-Case」(User-Name・HTTPヘッダーで使用)や、 単語をそのまま繋げる「flatcase」(username)もありますが、 上記5種類を押さえておけば実務の9割はカバーできます。

camelCase と PascalCase の違い

この2つはよく混同されます。違いは先頭が小文字か大文字かの1点だけです。

  • camelCase: 先頭小文字 — getUserProfile
  • PascalCase: 先頭大文字 — GetUserProfile

PascalCaseは「UpperCamelCase」とも呼ばれます。 JavaScriptでは関数・変数はcamelCase、クラス・Reactコンポーネント・型(TypeScript)はPascalCaseという住み分けが定着しており、 Reactで <userCard /> と書くと「HTMLの小文字要素」と誤認されてしまうのも、 この慣習に基づいた仕様です(Reactコンポーネントは必ず大文字始まり)。

言語・場面別にどれを使うか

「どの記法を選ぶか」はほぼ言語と場面で決まります。迷ったら以下のマトリクスを参照してください。

場面推奨記法
JavaScript / TypeScript 変数・関数camelCasegetUserName()
JavaScript クラス・TypeScript 型PascalCaseclass UserProfile {}
Python / Ruby 変数・関数snake_caseget_user_name()
Python / Ruby クラスPascalCaseclass UserProfile:
CSSクラス・HTML属性kebab-case.user-card / data-user-id
URL パスkebab-case/user-profile/edit
DB列名(SQL)snake_caseuser_name / created_at
定数・環境変数SCREAMING_SNAKE_CASEAPI_BASE_URL
ファイル名(Web)kebab-caseuser-profile.tsx
React コンポーネントファイルPascalCaseUserProfile.tsx

特にURLをkebab-caseにするのはSEO上も重要です。Googleはハイフン(-)を単語の区切りとして認識しますが、 アンダースコア(_)は1語として扱うことがあります。/user_profile より /user-profile のほうが検索エンジンに優しい、というのはこのためです。

変換ロジックは意外に難しい — 頭字語問題

「camelCaseをsnake_caseに変換する」と言うと単純に聞こえますが、実装してみると落とし穴にぶつかります。代表が頭字語(acronym)の扱いです。

// 同じ「XMLHttpRequest」をsnake_caseへ変換するとき

XMLHttpRequest → ???

// 候補A: 大文字の連続を1語とみなす

→ xml_http_request

// 候補B: 大文字ごとに区切る

→ x_m_l_http_request(← 壊れている)

候補Aが直感的ですが、実は逆変換(snake_case → PascalCase)で情報が失われます。xml_http_request を素直にPascalCaseに戻すとXmlHttpRequest になり、元の「XML」の大文字情報が消えてしまうのです。

Google JavaScript Style Guideはこの問題への答えとして「頭字語も普通の単語として扱う」方針を採り、XmlHttpRequestgetUserIdを正として統一しています。一方、JavaのAPIは伝統的に XMLHttpRequestgetUserIDのように頭字語を大文字維持します。どちらが「正解」ということはなく、チーム内で統一されていれば良いという性質のものです。

ライブラリでの変換

自前でロジックを書くより、実績のあるライブラリを使うほうが安全です。JavaScriptでよく使われる選択肢を挙げます。

ライブラリ特徴
lodash.camelCase / snakeCase / kebabCase定番。頭字語は普通の単語として扱う(XMLHttpRequest → xmlHttpRequest)
change-caseモダン。5種類以上の記法に対応し、関数単位でツリーシェイクが効く
camelcase-keys / snakecase-keysオブジェクトのキーを再帰的に変換。API境界での変換に便利
humps古参。camelize / decamelize が簡潔で、軽量

単発の変換をサッと確認したいときは、ぱんだツールズのケース変換ツールにテキストを貼り付けると、camelCase・PascalCase・snake_case・kebab-case・SCREAMING_SNAKE_CASEに一括変換できます。 処理はブラウザ内で完結するため、社外秘のコード片や識別子候補でも安心して試せます。 変換後の文字列の長さを確認したいときは文字数カウンターと組み合わせると、API仕様書のフィールド長制限などのチェックにも使えます。

まとめ

  • 実務で使う命名規則は主に5種類(camelCase / PascalCase / snake_case / kebab-case / SCREAMING_SNAKE_CASE)
  • camelCaseとPascalCaseの違いは先頭が小文字か大文字かの1点だけ
  • 言語・場面ごとに慣習が固まっている — JS/TS変数はcamelCase、クラス・型はPascalCase、Python/RubyとDB列はsnake_case、URL/CSSはkebab-case、定数・環境変数はSCREAMING_SNAKE_CASE
  • URLをkebab-caseにするのはSEO観点でも有利(ハイフンは単語区切りと認識される)
  • 頭字語の扱い(XMLHttpRequest vs XmlHttpRequest)は流派が分かれる。チーム内で統一するのが現実解
  • 自前実装は頭字語の罠にはまりやすいので、lodash・change-caseなどのライブラリを使うのが安全
  • 単発の変換はケース変換ツールでワンクリック。ブラウザ内処理で安心

よくある質問

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

どちらも単語の区切りを大文字で表す記法ですが、先頭の扱いが異なります。camelCaseは先頭が小文字(例: userName・getUserProfile)で、JavaScript・Java・Swiftの変数名や関数名に使われます。PascalCaseは先頭も大文字(例: UserName・GetUserProfile)で、C#・TypeScriptのクラス名・型名・Reactのコンポーネント名に使われます。「ラクダのコブ」に先頭が含まれるかどうかで覚えると区別しやすいです。

JavaScriptでsnake_caseを使うのは非推奨ですか?

はい、JavaScript標準のスタイルガイド(Airbnb・StandardJS・Googleなど)とECMAScript組み込みAPIの慣習はcamelCaseです(例: getElementById・addEventListener)。snake_caseを使うと周囲のコードと浮いてしまい、Lintツール(ESLintのcamelcaseルール)でも警告されます。例外はAPIから受け取ったJSON(snake_caseのまま保持する場合)・定数(SCREAMING_SNAKE_CASE)・プライベートフィールドの慣習的な表記などです。

URLがkebab-caseで書かれることが多いのはなぜですか?

主に3つの理由があります。①URLは大文字小文字を区別しないサーバーが多く、camelCaseを使うと予期しない挙動を招くため。②アンダースコア(_)はブラウザやツールによって下線表示と被って見づらくなる場合があるため(Googleも歴史的にkebab-caseを推奨)。③SEO観点で、検索エンジンはハイフンを単語区切りとして認識するためキーワードが正しく解釈されやすい。このため /user-profile のようなkebab-caseがWebの標準となっています。

頭字語(acronym)はどう処理すべきですか?

「XMLHttpRequest問題」として知られる難問です。連続する大文字を含む語(XML・HTTP・URL・ID・API)をcamelCase化する際、大文字を維持するか先頭のみ大文字にするかで流派が分かれます。Google JavaScript Style Guideは後者を推奨(XmlHttpRequest・getUserId)、JavaのAPIは前者(XMLHttpRequest・getUserID)が混在します。実務では「チーム内で統一する」「ライブラリ(lodash.camelCase等)の挙動を基準にする」のが現実解です。ぱんだツールズの変換ツールは両方の挙動を選べるようにしています。

SCREAMING_SNAKE_CASEはどんなときに使いますか?

変更されない定数や環境変数に使う慣習です。例: MAX_RETRY_COUNT・API_BASE_URL・DATABASE_URL。JavaScriptやPythonではconstやモジュール先頭で宣言する定数に使われ、読み手に「この値は実行中に書き換わらない」というメッセージを伝えます。環境変数(.envファイルの中身)は言語を問わずSCREAMING_SNAKE_CASEがデファクトで、Docker・Kubernetes・CI/CDの設定でも同じ慣習が引き継がれています。

既存コードの命名規則を一括変換したいときはどうすればいいですか?

部分的な変換なら、ぱんだツールズのケース変換ツールが便利です。テキストをペーストして変換したい記法を選ぶだけで処理できます。プロジェクト全体の一括変換は、Sed・正規表現・IDEのリファクタ機能を組み合わせる方がミスが少ないです。ただしAPI境界(JSONのキー名など)では、変換処理を関数化してランタイムで変換する(lodash.camelCase / snake_case を再帰適用)方が、仕様変更に強い作りになります。

JSONのキーはcamelCaseとsnake_caseどちらが良いですか?

厳密な標準はなく、プロジェクトの慣習次第です。Google JSON Style Guide・Twitter API・Stripe APIはcamelCase、GitHub API・Slack API・Ruby系APIはsnake_caseと二分されています。JavaScriptクライアントから使うならcamelCase、Python/Rubyバックエンドと揃えるならsnake_caseが自然です。境界で自動変換する「humps」「snakecase-keys」などのライブラリを使えば、両側で自然な記法を保てます。

ファイルはサーバーに送信されますか?

ケース変換ツール・文字数カウンターともにブラウザ内(JavaScript)で処理が完結するため、入力したテキストはサーバーに送信されません。変換は開いているタブ内で実行され、閉じればデータは残りません。コード片や識別子候補など、プロジェクトの機密に触れるテキストでも安心してお使いいただけます。

この記事で紹介したツール