キャメルケース

特定の目的のために、単語内に大文字を使用して、単語境界を見えるようにする記法(例えば、複数の単語を一つの文字列に結合した後に)、最初の単語の頭文字は小文字
キャメル方式から転送)

キャメルケース: camel case)は、英語の複合語やフレーズ、文をひと綴りとして、各構成語(要素語)の最初を大文字で書き表すことをいう[1]。キャメルケースとは、大文字が「らくだのこぶ」のように見えることからの命名である。例えば、「camel case」をキャメルケースで書き表すと、「camelCase」または「CamelCase」となる。

ラクダ(camel)のこぶに見えることから名付けられた
キャメルケースの例(シンガポールのマクドナルド店舗)

ブラッド・エイブラムスによれば、.NET Frameworkの初期設計の際、名前付けスタイルの議論を円滑に進めるために作った用語だと言う。先頭の語も含めて各構成語の最初の文字を大文字にするスタイルは「PascalCasing」と命名され、先頭の語のみ最初の文字を小文字にするスタイルは「camelCasing」と命名された[2]。なおこのとき、プログラミング言語Pascalによって普及したスタイルであるとして、「PascalCasing」という用語を提案したのは、Turbo Pascalの設計者であり、.NET設計チームの主要なメンバーでもあったアンダース・ヘルスバーグであったが、用語の選定にあたって特に異論は出なかった[3][4]。「PascalCasing」はパスカルケース: Pascal case)と表記されることもある。

別名、バイキャピタライゼーション[5]インターキャプス[6]ミックストケース[7]ともいう。一部、日本語訳してキャメル記法キャメル方式と表現されることもある。

キャメルケースの種類

編集

.NETのガイドラインでは、先頭の語も含めて各構成語の最初の文字を大文字にするスタイルをパスカルケース、先頭の語のみ最初の文字を小文字にするスタイルをキャメルケースとしており、プログラミングの文脈でキャメルケースと言えば後者のスタイルを指すことが多いが、場合によってはどちらもキャメルケースと呼ばれることがある。厳密に区別するために、「アッパーキャメルケース」や「ローワーキャメルケース」といった用語が使われることもある。

名称 表記例 備考
アッパーキャメルケース(UCC[8])、またはパスカルケース GetInputReader 複合語の先頭を、大文字で書き始める。
ローワーキャメルケース(LCC[9])、または単にキャメルケース getInputReader 複合語の先頭を、小文字で書き始める。

なお、英語で大文字はupper case、小文字はlower caseであるが、これらは活版印刷の名残である。

用途

編集
 
CamelCase

コンピュータープログラミングにおいて、キャメルケースが識別子命名規則として用いられることがある。

識別子とは、変数サブルーチン、ユーザー定義のデータ型といった構文要素を区別する名前のことを指すが、プログラミング言語の多くでは、スペースがトークン(字句)の区切りに使われ、ひとつづりをひとつの識別子として扱うため、ひとつの識別子がスペースを含むことはできない。一般的な言語では、英数字のほかにアンダースコア_を使うことができるが、古いCOBOLのようにアンダースコアは使えず、代わりにハイフンマイナス-を使うことができるという言語もある[10]。また、初期のコンピュータでは、容量などの制約から大文字・小文字を区別することができず、大文字のみが使える環境が主流だった[11]C言語の場合、ANSI C (C89) 規格では、保証される外部識別子名の長さは6文字まで、内部識別子名の長さは31文字までという互換性制約があった[12][注釈 1]

識別子に使用可能な文字種や文字数に制限のある環境において、複合語をひとつのプログラム要素としたいときには「getinputreader」や「GETINPUTREADER」のように直接連結するしかない場合もある。しかし、直接連結してしまうと語の区切り(境界)を認識しにくく、可読性を欠いてしまう。アンダースコアやハイフンマイナスが使える環境ではそのような文字を区切り文字に使って「get_input_reader」や「GET-INPUT-READER」などとする方法もあるが、文字数が増えてしまい、場合によっては処理系の制限に引っかかってしまう。大文字・小文字が区別できる環境では、後続の語の最初を大文字とすることで、文字数を節約しつつ、語の区切りを認識しやすくする記法が考案された[注釈 2]。この記法はのちに「キャメルケース」や「パスカルケース」として用語が再定義されることになるが、そのような用語が定義される前からmixed caseなどの名前で呼ばれていた[15]

パスカルケースという用語はプログラミング言語のPascalにちなんで命名されたものだが、Pascalはもともと大文字・小文字を区別しない言語であり、またISO規格準拠の標準Pascalでは識別子にアンダースコア_は使えない仕様になっている[16]という関係もあり、語境界を認識しやすくするために単語先頭を大文字にする慣習があった。規格の文書では標準手続き(required procedure)はwritelnのようにすべて小文字で記載されているが、一部のPascal処理系の文書ではWriteLnのようにアッパーキャメルが採用されているものもある[17][18]

Visual BasicWindows APIOLE/COMの影響を、また.NET Framework.NET言語(C#/VB.NETなど)はDelphiObject Pascal)の影響を受けており、メソッドの名前を大文字で始めるアッパーキャメルとなっているが、Javaはメソッドの名前を小文字で始めるローワーキャメルとなっている。ただし、いずれもユーザー定義型の名前は大文字で始めるアッパーキャメルである。

ファイルシステムにおいて、ファイルやディレクトリ(フォルダー)の命名にキャメル形式が使われることも多い。特にコマンドラインシェルでファイルシステムを操作するとき、スペースが含まれている名前は問題を引き起こすことが多いため、文字数を節約しつつ可読性を確保できるキャメル形式は利点がある。ただし、オペレーティングシステムやファイルシステムによっては、大文字・小文字が同一視されたり、すべて大文字として扱われ区別できなかったりする環境もある。

初期のウィキにおいて、キャメルケースを用いた語をリンクとするという方法が用いられていた。現在では、たとえば MediaWiki が「[[」と「]]」を用いてリンクを表しているように、キャメルケースによるリンクを用いない方法が多く用いられている。

元を正せば、キャメルケースは複合語から成る人名に多く使われてきた。McDonaldマクドナルド[注釈 3]などは日本語話者にもなじみ深くなった名前のうちのひとつである。近年[いつ?]のキャメルケースで、日本語話者が日常生活の中で目にするものには、商品名やサービス名が多い。PlayStationiPhoneBlackBerryOneDriveYouTubeなどがその例である。これらはスペースで単語を区切らず、連続した1語の固有名詞とすることによって、Web検索エンジンに区別されやすいという利点がある。

その他の綴り方

編集
名称 表記例 備考
スネークケース quoted_printable_encode[19]

priority_queue[20]

アンダースコア_)を区切記号として単語をつなげる。
ケバブケース Get-Process[21]

call-with-current-continuation[22]

ハイフン-)を区切記号として単語をつなげる。

キャメルケースとスペルチェック

編集

キャメルケースの欠点として、綴りミスを自動検出するスペルチェッカーの利用が難しくなる、ということが挙げられる。Microsoft Wordのような一般的なワードプロセッサソフトウェアでは、広く知られていて辞書データベースに登録されているような固有名詞を除いて、キャメルケースのスペルチェックに対応しておらず、スペルミスであると判定してしまう。ただし、自然言語の文章の中で登場するキャメルケースは通例スペースやハイフンの不足などによる誤りであることが多いため、この動作は妥当であるとも言える。

プログラミングに使用されるコードエディターはテキストエディターの一種だが、コメント内や文字列リテラル内の文章だけでなく識別子のスペルチェックにも対応しており、また判定の容易なスネークケースやチェインケースだけでなく、キャメルケースのスペルチェックにも対応しているものがある[23]

脚注

編集

注釈

編集
  1. ^ 標準Cライブラリの関数名が暗号のように短く分かりづらいのも、K&R時代から続く初期の資源制約によるものである。
  2. ^ ただし、キャメルケースも可読性を損うとして嫌う人もいる。例えばC++の設計者ビャーネ・ストロヴストルップは、I prefer to use underscores to separate words in an identifier (e.g, element_count) rather than alternatives, such as elementCount and ElementCount.と述べている[13][14]。実際、標準C++ライブラリには、std::runtime_errorstd::vector::push_back()のように、アンダースコアを使った名前が頻出する。しかし彼は、言語組み込みのデータ型や標準ライブラリのデータ型との名前衝突を避けるため、ユーザー定義のデータ型の名前は先頭を大文字にすることを推奨してもいる。
  3. ^ Mc」はゲール語で息子を意味する語であり、McDonald はドナルドの息子という意味の複合語である。

出典

編集
  1. ^ キャメルケースとは - 意味をわかりやすく - IT用語辞典 e-Words
  2. ^ Capitalization Conventions - Framework Design Guidelines | Microsoft Learn
  3. ^ Krzysztof Cwalina; Brad Abrams (2008-10-22). Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (Second ed.). Addison-Wesley Professional. p. 38. ISBN 978-0321545619 
  4. ^ クリストフ・ツヴァリナ、ブラッド・エイブラムス『.NETのクラスライブラリ設計』日経BP、2009年12月28日、32頁。ISBN 978-4-89100-676-1 
  5. ^ : bi-capitalization
  6. ^ : intercaps
  7. ^ : mixed-case
  8. ^ : upper camel case
  9. ^ : lower camel case
  10. ^ Java/.NET開発者のための「ここが変だよ、COBOL」:COBOL - Getting Started(1)(2/2 ページ) - @IT
  11. ^ 古いコンピュータやOSで小文字ではなく大文字が使用されていた理由とは? - GIGAZINE
  12. ^ C Identifiers | Microsoft Learn
  13. ^ Stroustrup: C++ Style and Technique FAQ
  14. ^ Stroustrup: C++ Style and Technique FAQ 日本語訳
  15. ^ Code Conventions for the Java Programming Language: 9. Naming Conventions
  16. ^ Pascal ISO/IEC 7185:1990
  17. ^ WriteLn | Free Pascal
  18. ^ WriteLn - The GNU Pascal Manual
  19. ^ PHP言語の関数
  20. ^ 標準C++ライブラリに含まれるクラステンプレート。
  21. ^ Windows PowerShellのコマンド。
  22. ^ Scheme言語の組み込み関数。
  23. ^ Learn about the Spell Checker - Visual Studio (Windows) | Microsoft Learn

関連項目

編集