てもとツール
ガイド

キャメルケースとスネークケースの使い分けと略語の書き方

キャメルケースとスネークケースのどちらを使うかは、書いている言語のガイドで決まります。Pythonは関数と変数がsnake_case、GoogleのJavaScriptガイドはlowerCamelCaseです。IDやHTTPのような略語の書き方はガイドで逆になるので、例と崩れやすい名前をまとめました。

公開読了目安 約5分

この記事の要点

  • どの書き方を使うかに1つの正解は無く、書いている言語やプロジェクトのガイドに合わせる
  • Python(PEP 8)は関数と変数をsnake_case、クラスを大文字始まりのキャメルケースで書く
  • GoogleのJavaScriptガイドは、ローカル変数・メソッド・引数をlowerCamelCase、定数をCONSTANT_CASEで書く
  • 略語の書き方はガイドで逆になる。GoogleのJavaScriptはnewCustomerId、GoはappIDと書く
  • URLの単語の区切りには、Googleがアンダースコアではなくハイフンをすすめている
目次

キャメルケースとスネークケースのどちらを使うかに、1つの正解はありません。 言語ごとに公開されている書き方ガイドか、参加しているプロジェクトの決まりに合わせます。

たとえば、PythonのPEP 8は関数と変数をsnake_caseで書きます。 GoogleのJavaScriptガイドは、ローカル変数やメソッドをlowerCamelCaseで書きます。 迷いやすいのはIDやHTTPのような略語で、ガイドによって書き方が逆になります。

この記事では、ガイドごとの決まりと略語の例を、ガイドの文面から拾って並べます。 自動で変換すると崩れやすい名前も、実際の変換結果で示します。

書き方の名前と見た目

単語をつなぐ書き方には、それぞれ呼び名があります。 「new customer id」の3語をつないだ形で比べます。

  • lowerCamelCase: newCustomerId
  • UpperCamelCase: NewCustomerId
  • snake_case: new_customer_id
  • kebab-case: new-customer-id
  • CONSTANT_CASE: NEW_CUSTOMER_ID

UpperCamelCaseはPascalCaseとも呼ばれます。 CONSTANT_CASEは、SCREAMING_SNAKE_CASEと呼ぶこともあります。 Pythonのガイドでは、大文字始まりのキャメルケースをCapWordsと呼んでいます。

言語ごとのガイドが決めている書き方

主なガイドが、名前の種類ごとに何を決めているかを並べます。 どれも、そのガイドの命名の節に書かれている内容です。

  • Python(PEP 8): 関数と変数はsnake_case。クラスはCapWords。定数はMAX_OVERFLOWのように大文字をアンダースコアでつなぐ
  • JavaScript(Googleのガイド): ローカル変数・メソッド・引数はlowerCamelCase。クラスはUpperCamelCase。定数はCONSTANT_CASE
  • Go(Effective Go): 複数の語の名前は、アンダースコアではなくMixedCapsかmixedCapsで書く
  • .NET(Microsoftのガイド): 公開する名前はPascalCasing、引数はcamelCasing

同じ「変数名」でも、PEP 8ならsnake_caseです。 GoogleのJavaScriptガイドなら、lowerCamelCaseになります。 Pythonで作ったデータをJavaScriptで読むような場面では、どこで書き方を切り替えるかを先に決めておきます。

ただし、ガイドより先に、いま触っているコードの書き方を見てください。 PEP 8も、すでにmixedCaseが広く使われている場所では、互換性のためにそれを使ってよいとしています。

略語はガイドによって書き方が逆になる

ID・HTTP・URLのような略語を名前に入れるときは、ガイドごとに答えが違います。 ガイドに載っている例を、そのまま並べます。

  • JavaScript(Googleのガイド): 略語も小文字にしてから、普通の単語と同じく先頭だけ大文字にする。newCustomerIdが正しく、newCustomerIDは誤り。xmlHttpRequest、supportsIpv6OnIos
  • Go(Code Review Comments): 略語は大文字か小文字のどちらかでそろえる。appIDと書き、appIdとは書かない。ServeHTTPと書き、ServeHttpとは書かない
  • Python(PEP 8): CapWordsの中の略語はすべて大文字にする。HttpServerErrorよりHTTPServerErrorがよい
  • .NET: PascalCasingでは、2文字の略語は両方大文字(IOStream)、3文字以上は先頭だけ大文字(HtmlTag)

GoogleのJavaScriptガイドとGoでは、同じ「ID」がIdとIDに分かれます。 コードを別の言語に移すときは、単語のつなぎ方だけでなく、略語の大文字も直す必要があります。

自動変換で崩れやすい名前

書き方を機械的に変換すると、略語や数字のところで意図しない形になることがあります。 命名規則変換に入れたときの結果を並べます。

  • newCustomerID: new_customer_id / newCustomerId
  • ServeHTTP: serve_http / serveHttp
  • iOS: i_os / iOs
  • 2fa_code: 2fa_code / 2faCode

左がsnake_case、右がlowerCamelCaseに変換した結果です。

newCustomerIDやServeHTTPは、略語を普通の単語として扱う形になります。 lowerCamelCaseなら、GoogleのJavaScriptガイドと同じ形です。 Goの形にしたいときは、変換したあとでIDやHTTPを大文字に戻します。

iOSは「i」と「OS」の2語と読まれ、snake_caseにすると i_os になります。 supportsIPv6OnIOSのように略語が続く名前も崩れます。 IPv6が「I」と「Pv6」に分かれ、snake_caseは supports_i_pv6_on_ios になりました。

2fa_codeのように数字で始まる名前は、変換はできても、JavaScriptやPythonでは変数名に使えません。 変換結果を貼る前に、略語と数字のところだけは目で確かめてください。

URLやファイル名の区切りはハイフン

プログラムの外で名前を付けるときにも、区切り方の決まりがあります。 Googleは、URLの単語を区切るときは、アンダースコアではなくハイフンを使うようすすめています。

理由として、アンダースコアはformat_dateのように、ひとまとまりの名前を書くときによく使われることを挙げています。 ブログ記事のURLや、URLにそのまま出るファイル名は、kebab-caseで付けておくと迷いません。

関連記事

参考・出典

本記事は上記の公的機関・公式情報源を参考にしています。最新の情報は各リンク先をご確認ください。

あわせて読みたい

同じテーマ・関連ツールの記事です。