キャメルケース

キャメルケース（）は、英語の複合語やフレーズ、文をひと綴りとして、各構成語（要素語）の最初を大文字で書き表すことをいうキャメルケースとは - 意味をわかりやすく - IT用語辞典 e-Words。キャメルケースとは、大文字が「らくだのこぶ」のように見えることからの命名である。例えば、「camel case」をキャメルケースで書き表すと、「camelCase」または「CamelCase」となる。

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

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

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

名称表記例備考アッパーキャメルケース（UCC）、またはパスカルケースGetInputReader複合語の先頭を、大文字で書き始める。ローワーキャメルケース（LCC）、または単にキャメルケース getInputReader複合語の先頭を、小文字で書き始める。
なお、英語で大文字は、小文字はであるが、これらは活版印刷の名残である。

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

識別子とは、変数、サブルーチン、ユーザー定義のデータ型といった構文要素を区別する名前のことを指すが、プログラミング言語の多くでは、スペースがトークン（字句）の区切りに使われ、ひとつづりをひとつの識別子として扱うため、ひとつの識別子がスペースを含むことはできない。一般的な言語では、英数字のほかにアンダースコア_を使うことができるが、古いCOBOLのようにアンダースコアは使えず、代わりにハイフンマイナス-を使うことができるという言語もあるJava／.NET開発者のための「ここが変だよ、COBOL」：COBOL - Getting Started（1）（2/2 ページ） - ＠IT。また、初期のコンピュータでは、容量などの制約から大文字・小文字を区別することができず、大文字のみが使える環境が主流だった古いコンピュータやOSで小文字ではなく大文字が使用されていた理由とは？ - GIGAZINE。C言語の場合、ANSI C (C89) 規格では、保証される外部識別子名の長さは6文字まで、内部識別子名の長さは31文字までという互換性制約があったC Identifiers | Microsoft Learn。

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

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

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

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

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

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

その他の綴り方
名称表記例備考スネークケースquoted_printable_encodePHP言語の関数。
priority_queue標準C++ライブラリに含まれるクラステンプレート。アンダースコア（_）を区切記号として単語をつなげる。ケバブケースGet-Processのコマンド。
call-with-current-continuation言語の組み込み関数。ハイフン（-）を区切記号として単語をつなげる。

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

プログラミングに使用されるソースコードエディタはテキストエディタの一種だが、コメント内や文字列リテラル内の文章だけでなく識別子のスペルチェックにも対応しており、また判定の容易なスネークケースやチェインケースだけでなく、キャメルケースのスペルチェックにも対応しているものがあるLearn about the Spell Checker - Visual Studio (Windows) | Microsoft Learn。

 脚注 

 注釈 

 出典 

 関連項目 
 大文字と小文字
 ケース・センシティブ
 命名規則 (プログラミング)
 ハンガリアン記法
 クロノグラム - 特定の年代を表記するため、単語の中のローマ数字を大文字にする。

Category:キャピタライゼーション
Category:命名規則