キャメルケース
キャメルケース(英: camel case)は、英語の複合語やフレーズ、文をひと綴りとして、各構成語(要素語)の最初を大文字で書き表すことをいう[1]。キャメルケースとは、大文字が「らくだのこぶ」のように見えることからの命名である。例えば、「camel case」をキャメルケースで書き表すと、「camelCase」または「CamelCase」となる。
ブラッド・エイブラムスによれば、.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であるが、これらは活版印刷の名残である。
用途
編集コンピュータープログラミングにおいて、キャメルケースが識別子の命名規則として用いられることがある。
識別子とは、変数、サブルーチン、ユーザー定義のデータ型といった構文要素を区別する名前のことを指すが、プログラミング言語の多くでは、スペースがトークン(字句)の区切りに使われ、ひとつづりをひとつの識別子として扱うため、ひとつの識別子がスペースを含むことはできない。一般的な言語では、英数字のほかにアンダースコア_
を使うことができるが、古い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 BasicはWindows APIやOLE/COMの影響を、また.NET Frameworkや.NET言語(C#/VB.NETなど)はDelphi(Object Pascal)の影響を受けており、メソッドの名前を大文字で始めるアッパーキャメルとなっているが、Javaはメソッドの名前を小文字で始めるローワーキャメルとなっている。ただし、いずれもユーザー定義型の名前は大文字で始めるアッパーキャメルである。
ファイルシステムにおいて、ファイルやディレクトリ(フォルダー)の命名にキャメル形式が使われることも多い。特にコマンドラインシェルでファイルシステムを操作するとき、スペースが含まれている名前は問題を引き起こすことが多いため、文字数を節約しつつ可読性を確保できるキャメル形式は利点がある。ただし、オペレーティングシステムやファイルシステムによっては、大文字・小文字が同一視されたり、すべて大文字として扱われ区別できなかったりする環境もある。
初期のウィキにおいて、キャメルケースを用いた語をリンクとするという方法が用いられていた。現在では、たとえば MediaWiki が「[[
」と「]]
」を用いてリンクを表しているように、キャメルケースによるリンクを用いない方法が多く用いられている。
元を正せば、キャメルケースは複合語から成る人名に多く使われてきた。
その他の綴り方
編集名称 | 表記例 | 備考 |
---|---|---|
スネークケース | quoted_printable_encode [19]
|
アンダースコア(_ )を区切記号として単語をつなげる。
|
ケバブケース | Get-Process [21]
|
ハイフン(- )を区切記号として単語をつなげる。
|
キャメルケースとスペルチェック
編集キャメルケースの欠点として、綴りミスを自動検出するスペルチェッカーの利用が難しくなる、ということが挙げられる。Microsoft Wordのような一般的なワードプロセッサソフトウェアでは、広く知られていて辞書データベースに登録されているような固有名詞を除いて、キャメルケースのスペルチェックに対応しておらず、スペルミスであると判定してしまう。ただし、自然言語の文章の中で登場するキャメルケースは通例スペースやハイフンの不足などによる誤りであることが多いため、この動作は妥当であるとも言える。
プログラミングに使用されるコードエディターはテキストエディターの一種だが、コメント内や文字列リテラル内の文章だけでなく識別子のスペルチェックにも対応しており、また判定の容易なスネークケースやチェインケースだけでなく、キャメルケースのスペルチェックにも対応しているものがある[23]。
脚注
編集注釈
編集- ^ 標準Cライブラリの関数名が暗号のように短く分かりづらいのも、K&R時代から続く初期の資源制約によるものである。
- ^ ただし、キャメルケースも可読性を損うとして嫌う人もいる。例えば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_error
やstd::vector::push_back()
のように、アンダースコアを使った名前が頻出する。しかし彼は、言語組み込みのデータ型や標準ライブラリのデータ型との名前衝突を避けるため、ユーザー定義のデータ型の名前は先頭を大文字にすることを推奨してもいる。 - ^ 「Mc」はゲール語で息子を意味する語であり、McDonald はドナルドの息子という意味の複合語である。
出典
編集- ^ キャメルケースとは - 意味をわかりやすく - IT用語辞典 e-Words
- ^ Capitalization Conventions - Framework Design Guidelines | Microsoft Learn
- ^ 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
- ^ クリストフ・ツヴァリナ、ブラッド・エイブラムス『.NETのクラスライブラリ設計』日経BP、2009年12月28日、32頁。ISBN 978-4-89100-676-1。
- ^ 英: bi-capitalization
- ^ 英: intercaps
- ^ 英: mixed-case
- ^ 英: upper camel case
- ^ 英: lower camel case
- ^ Java/.NET開発者のための「ここが変だよ、COBOL」:COBOL - Getting Started(1)(2/2 ページ) - @IT
- ^ 古いコンピュータやOSで小文字ではなく大文字が使用されていた理由とは? - GIGAZINE
- ^ C Identifiers | Microsoft Learn
- ^ Stroustrup: C++ Style and Technique FAQ
- ^ Stroustrup: C++ Style and Technique FAQ 日本語訳
- ^ Code Conventions for the Java Programming Language: 9. Naming Conventions
- ^ Pascal ISO/IEC 7185:1990
- ^ WriteLn | Free Pascal
- ^ WriteLn - The GNU Pascal Manual
- ^ PHP言語の関数。
- ^ 標準C++ライブラリに含まれるクラステンプレート。
- ^ Windows PowerShellのコマンド。
- ^ Scheme言語の組み込み関数。
- ^ Learn about the Spell Checker - Visual Studio (Windows) | Microsoft Learn
関連項目
編集- 大文字と小文字
- ケース・センシティブ
- 命名規則 (プログラミング)
- ハンガリアン記法
- クロノグラム - 特定の年代を表記するため、単語の中のローマ数字を大文字にする。