キャメルケース: Camel Case)とは、英語複合語フレーズをひと綴りとして、各単語頭文字大文字で表現することを言う[1][2]。キャメルケースとは、全体を俯瞰すると大文字の部分が「ラクダのこぶ」のように見えることからの命名である[3][4][5]。例えば、「camel case」をキャメルケースで表現すると、「camelCase」または「CamelCase」となる。

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

キャメルケースという語はプログラミングの文脈で最も一般的に使用されている[1]が、この語は他の分野においても広く用いられている。例えば、デジタルメディアマーケティングにおいては、ウェブサイトURLドメイン名可読性を向上させるためにキャメルケースが使用されることがある[6][7]。また、ドキュメントやガイドラインにおいては、セクション名や章タイトルの視認性を高める目的で採用されることもある[8][9]。さらに、ブランド名製品名においても、一貫性を保ちつつ視覚的に目立つ名前を作成するためにキャメルケースが用いられる[10][11]。以上のように、キャメルケースはその起源と使用目的から広範な応用が可能であり、多岐に渡る分野でその有用性が認識されている。

ブラッド・エイブラムスは、.NETフレームワークの開発において重要な役割を果たしたマイクロソフトの元エンジニアプログラムマネージャーである。彼によれば、.NETフレームワークの初期設計の際、名付けスタイルの議論を円滑に進めるための用語を作成したという[12][13][14]。このとき、各単語の頭文字を大文字にするスタイルは「PascalCasing」と命名され、先頭の語のみ頭文字を小文字にするスタイルは「camelCasing」と命名された[12][13][14]。「PascalCasing」という命名に関しては、Turbo Pascal設計者であり、.NET設計チームの主要なメンバーでもあったアンダース・ヘルスバーグが、これはプログラミング言語Pascalによって普及したスタイルであるとして「PascalCasing」という用語を提案した[15][16]。これらの用語の選定にあたって、特に異論は出なかったとされる[17][18]。「PascalCasing」はパスカルケース: Pascal Case)と表記されることもある。

パスカルケースは別名、バイキャピタライゼーション: Bi-Capitalization[19]インターキャプス: Intercaps[20]とも呼ばれることがある。頭文字に小文字と大文字を混在させるケースはミックストケース: Mixed-Case[21]とも呼ばれる。一部、日本語訳してキャメル記法(きゃめるきほう)[22]キャメル方式(きゃめるほうしき)[23]と表現されることもある。

キャメルケースの種類

編集

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

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

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

用途

編集
 
CamelCase

コンピュータープログラミングにおいて、パスカルケース(アッパーキャメルケース)、キャメルケース(ロウワーキャメルケース)が識別子命名規則として用いられることがある[31][32]

識別子とは、変数サブルーチン、及びユーザー定義データ型等の構文要素を区別するために使用される名前を指す[33][34]。多くのプログラミング言語においては、スペースがトークン(字句)の区切りとして機能するため、識別子にスペースを含めることは許されない[35][36]。これにより、識別子には一続きの文字列が必要となる。従って、識別子にはパスカルケース(アッパーキャメルケース)、キャメルケース(ロウワーキャメルケース)、スネークケースケバブケースといった命名規則が適用され、各単語の区切りを明示する。これらの命名規則は、コードの可読性および保守性を向上させ、プログラムの構造を明確にする役割を果たしている[37][38]。一般的な言語では、英数字の他にアンダースコア_を使うことができる[39][40][41]が、古いCOBOLのようにアンダースコアは使えず、代わりにハイフンマイナス-を使うことができるという言語もある[42][43]。また、初期のコンピュータでは、容量等の制約から大文字・小文字を区別することができず、大文字のみが使える環境が主流だった[44][45]C言語の場合、ANSI C(C89)規格では、保証される外部識別子名の長さは6文字まで、内部識別子名の長さは31文字までという互換性制約があった[46][47][注釈 1]

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

Visual BasicWindows APIOLE/COMの影響を[50][51]、また.NETフレームワークや.NET言語(C#VB.NET等)はDelphiObject Pascal)の影響を受けており[52][53]メソッドの名前を大文字で始めるアッパーキャメルケースとなっているが[12][54]Javaはメソッドの名前を小文字で始めるロウワーキャメルケースとなっている[55]。ただし、いずれもユーザー定義型の名前は大文字で始めるアッパーキャメルケースである。

ファイルシステムにおいて、ファイルディレクトリ(フォルダー)の命名にキャメルケース(ロウワーキャメルケース)が使われることも多い[56][57]。特にコマンドラインシェルでファイルシステムを操作するとき、スペースが含まれている名前は問題を引き起こすことが多いため[58][59]、文字数を抑制しつつ可読性を確保できるキャメルケース(ロウワーキャメルケース)はこの点で有利である。ただし、オペレーティングシステムファイルシステムによっては、大文字・小文字が同一視されたり、全て大文字として扱われて区別できなかったりする場合もある[60][61]

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

元を正せば、キャメルケース(ロウワーキャメルケース)は複合語から成る人名に多く使われてきた[要出典]McDonaldマクドナルド[注釈 3]等は日本語話者にもなじみ深くなった名前の内の一つである。日本語話者が日常生活の中で目にするパスカルケース(アッパーキャメルケース)またはキャメルケース(ロウワーキャメルケース)には、商品名やサービス名が多い。PlayStationiPhoneBlackBerryOneDriveYouTube等がその例である。これらはスペースで単語を区切らず、一語に見える固有名詞とすることによって、Web検索エンジンに区別されやすいという利点がある[64][65]

その他の綴り方

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

priority_queue[67]

アンダースコア_)を区切り記号として単語を繋げる。
チェインケース(ケバブケースとも) Get-Process[68]

call-with-current-continuation[69]

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

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

編集

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

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

注釈

編集
  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.と述べている[48][49]。実際に、標準C++ライブラリには、std::runtime_errorstd::vector::push_back()のように、アンダースコアを使った名前が頻出する。しかし彼は、言語組み込みのデータ型や標準ライブラリのデータ型との名前衝突を避けるため、ユーザー定義のデータ型の名前は先頭を大文字にすることを推奨してもいる。
  3. ^ Mc」はゲール語で「息子」を意味する語であり、McDonald は「ドナルドの息子」という意味の複合語である。

出典

編集
  1. ^ a b キャメルケースとは - IT用語辞典”. IT用語辞典 e-Words. 2024年6月29日閲覧。
  2. ^ camel case”. Cambridge Dictionary. 2024年6月29日閲覧。
  3. ^ Camel case - MDN Web Docs Glossary: Definitions of Web-related terms | MDN” (英語). developer.mozilla.org (2024年5月7日). 2024年6月29日閲覧。
  4. ^ camel case - Binnenmajuskel - New entry for LEO: English ⇔ German Forums - leo.org”. dict.leo.org. 2024年6月29日閲覧。
  5. ^ What Is Camel Case? Meaning and Examples Explained” (英語). www.98thpercentile.com. 2024年6月29日閲覧。
  6. ^ Sams, Chris (2024年2月21日). “What Influence Will Capitalization In URLs Have On SEO In 2024?” (英語). JEMSU. 2024年6月29日閲覧。
  7. ^ Editorial style update: Capital letters in websites, email addresses and hashtags” (英語). Brand Updates (2019年8月5日). 2024年6月29日閲覧。
  8. ^ Guideline In Document Name Publication Section Is Written In Camelcase”. Nexedi. 2024年6月29日閲覧。
  9. ^ Pandoc User’s Guide 日本語版 — 日本Pandocユーザ会”. pandoc-doc-ja.readthedocs.io. 2024年6月29日閲覧。
  10. ^ Camel Case Vs Pascal Case Vs Snake Case: What's The Difference And Why Is It Important? - Dataconomy” (英語) (2023年11月3日). 2024年6月29日閲覧。
  11. ^ The Art of Naming”. Zinzin. 2024年6月29日閲覧。
  12. ^ a b c Capitalization Conventions - Framework Design Guidelines | Microsoft Learn
  13. ^ a b dotnet-bot. “CodeIdentifier.MakePascal(String) Method (System.Xml.Serialization)” (英語). learn.microsoft.com. 2024年6月29日閲覧。
  14. ^ a b dotnet-bot. “CodeIdentifier.MakeCamel(String) Method (System.Xml.Serialization)” (英語). learn.microsoft.com. 2024年6月29日閲覧。
  15. ^ The Private Life of a Public API”. www.moserware.com. 2024年6月29日閲覧。
  16. ^ MICROSOFT ® .NET DEVELOPER”. Pearson Education. 2024年6月29日閲覧。
  17. ^ 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 
  18. ^ クリストフ・ツヴァリナ、ブラッド・エイブラムス『.NETのクラスライブラリ設計』日経BP、2009年12月28日、32頁。ISBN 978-4-89100-676-1 
  19. ^ bicapitalizationの意味・使い方・読み方 | Weblio英和辞書”. ejje.weblio.jp. 2024年6月29日閲覧。
  20. ^ InterCaps - definition of InterCaps - synonyms, pronunciation, spelling from Free Dictionary”. freedictionary.org. 2024年6月29日閲覧。
  21. ^ Converting Between Different Naming Conventions - Python Cookbook [Book]” (英語). www.oreilly.com. 2024年6月29日閲覧。
  22. ^ デジタル大辞泉. “キャメルケースとは? 意味や使い方”. コトバンク. 2024年6月29日閲覧。
  23. ^ 新人コーダーに知っておいて欲しい命名規則の考え方[画像・ID・class名|クロノドライブ]”. 株式会社クロノドライブ. 2024年6月29日閲覧。
  24. ^ KrzysztofCwalina (2024年1月27日). “フレームワーク デザインのガイドライン”. learn.microsoft.com. 2024年6月29日閲覧。
  25. ^ A Simple Approach to Optimized Text Compression's Performance”. IEEE. 2024年6月29日閲覧。
  26. ^ Universal Utility Data Exchange (UUDEX) – Information Exchange Structures – Rev 1”. アメリカ合衆国エネルギー省. 2024年6月29日閲覧。
  27. ^ : upper camel case
  28. ^ : lower camel case
  29. ^ Griffin, Dori (2021-12-30) (英語). Type Specimens: A Visual History of Typesetting and Printing. Bloomsbury Publishing. ISBN 978-1-350-11661-0. https://books.google.co.jp/books?hl=ja&lr=lang_ja%7Clang_en&id=-rdREAAAQBAJ&oi=fnd&pg=PP1&dq=%22upper+case%22+%22lower+case%22+origin+%22typesetting%22+%22history%22&ots=yogW2WIhm7&sig=yil1DC2NcXyz_i6YHh2tx_UWlhc#v=onepage&q=%22upper%20case%22%20%22lower%20case%22%20origin%20%22typesetting%22%20%22history%22&f=false 
  30. ^ Wyatt, Christopher Scott; DeVoss, Dànielle Nicole (2017-09-01) (英語). Type Matters: The Rhetoricity of Letterforms. Parlor Press LLC. ISBN 978-1-60235-978-9. https://books.google.co.jp/books?hl=ja&lr=lang_ja%7Clang_en&id=EKwWEAAAQBAJ&oi=fnd&pg=PA3&dq=%22upper+case%22+%22lower+case%22+origin+%22typesetting%22+%22history%22&ots=bfzTiv_Bfp&sig=u7xhGw9f_EzJFZFIexhnETHdExY#v=onepage&q=upper%20case&f=false 
  31. ^ Programming Naming Conventions – Camel, Snake, Kebab, and Pascal Case Explained” (英語). freeCodeCamp.org (2022年8月22日). 2024年6月29日閲覧。
  32. ^ Naming convention”. DNB Bank ASA. 2024年6月29日閲覧。
  33. ^ User Defined Data Types in C++” (英語). GeeksforGeeks (2018年10月22日). 2024年6月29日閲覧。
  34. ^ KathleenDollard (2021年9月15日). “User-Defined Data Type - Visual Basic” (英語). learn.microsoft.com. 2024年6月29日閲覧。
  35. ^ String Tokenization in C” (英語). GeeksforGeeks (2023年10月18日). 2024年6月29日閲覧。
  36. ^ Tokens” (英語). www.ibm.com. 2024年6月29日閲覧。
  37. ^ Team, CodiumAI (2024年4月17日). “Mastering Coding Standards and Best Practices for Software Development” (英語). CodiumAI. 2024年6月29日閲覧。
  38. ^ Herka, Iwo (2022年2月2日). “Naming conventions in programming – a review of scientific literature — Makimo – Consultancy & Software Development Services” (英語). makimo.com. 2024年6月29日閲覧。
  39. ^ Alphanumeric Characters: Uses and Examples” (英語). HowStuffWorks (2024年2月8日). 2024年6月29日閲覧。
  40. ^ Underscores in Numeric Literals”. docs.oracle.com. 2024年6月29日閲覧。
  41. ^ C Identifiers” (英語). GeeksforGeeks (2023年9月6日). 2024年6月29日閲覧。
  42. ^ 6.10 COBOLアプリケーション使用時の注意事項”. software.fujitsu.com. 2024年6月29日閲覧。
  43. ^ Wick, Amanda. “Research Guides: Archives and Special Collections on COBOL and the History of Programming Languages: Home” (英語). libguides.umn.edu. 2024年6月29日閲覧。
  44. ^ Programming Language Statements Oddities: History and idiosyncrasies (or oddities)”. Gavilan College. 2024年6月29日閲覧。
  45. ^ 情報学概論Ⅰ 第4回”. www2.nagano.ac.jp. 2024年6月29日閲覧。
  46. ^ Hewlett Packard Company Conformance Statement”. www.opengroup.org. 2024年6月29日閲覧。
  47. ^ C Identifiers | Microsoft Learn
  48. ^ Stroustrup: C++ Style and Technique FAQ
  49. ^ Stroustrup: C++ Style and Technique FAQ 日本語訳
  50. ^ Petzold, Charles (2013-01-15) (英語). Programming Windows. Pearson Education. ISBN 978-0-7356-7172-0. https://www.google.co.jp/books/edition/Programming_Windows/Da9CAwAAQBAJ?hl=ja&gbpv=0 
  51. ^ Inside COM”. Amazon. 2024年6月29日閲覧。
  52. ^ Hejlsberg, Anders; Torgersen, Mads; Wiltamuth, Scott; Golde, Peter (2008-10-08) (英語). The C# Programming Language. Pearson Education. ISBN 978-0-321-59225-5. https://www.google.co.jp/books/edition/The_C_Programming_Language/ICe7ea4RscUC?hl=ja&gbpv=0 
  53. ^ Watkins, Damien; Hammond, Mark J.; Abrams, Brad (2003) (英語). Programming in the .NET Environment. Addison-Wesley Professional. ISBN 978-0-201-77018-6. https://www.google.co.jp/books/edition/Programming_in_the_NET_Environment/sWhAOMIf4MUC?hl=ja&gbpv=0 
  54. ^ Method Naming · Programming Basics with C# - Free Coding Book with Video Lessons”. csharp-book.softuni.org. 2024年6月29日閲覧。
  55. ^ Java Naming Conventions: PascalCase, camelCase, and more - CRS Info Solutions”. www.crsinfosolutions.com. 2024年6月29日閲覧。
  56. ^ Naming files, folders and other things — The Turing Way”. book.the-turing-way.org. 2024年6月29日閲覧。
  57. ^ File Naming Conventions | Data Management” (英語). datamanagement.hms.harvard.edu. 2024年6月29日閲覧。
  58. ^ McKay, Dave (2022年12月14日). “How to Deal With Spaces in Filenames on Linux” (英語). How-To Geek. 2024年6月29日閲覧。
  59. ^ Dealing with spaces in file names in a shell script” (英語). www.unix.com. 2024年6月29日閲覧。
  60. ^ craigloewen-msft (2022年4月27日). “Case Sensitivity” (英語). learn.microsoft.com. 2024年6月29日閲覧。
  61. ^ Case-sensitivity” (英語). help.hcltechsw.com. 2024年6月29日閲覧。
  62. ^ PURR - Wiki: Help: Wiki Page Names”. purr.purdue.edu. 2024年6月29日閲覧。
  63. ^ Wikis are good for knowlegde management”. arxiv.org. 2024年6月29日閲覧。
  64. ^ SEO: What about spaces in URLs? | Combell” (英語) (2015年9月18日). 2024年6月29日閲覧。
  65. ^ Increasing your site’s visibility to search engines” (英語). Squarespace Help Center (2023年7月10日). 2024年6月29日閲覧。
  66. ^ PHP言語の関数
  67. ^ 標準C++ライブラリに含まれるクラステンプレート。
  68. ^ Windows PowerShellのコマンド。
  69. ^ Scheme言語の組み込み関数。
  70. ^ Microsoft Word”. Microsoft. 2024年6月29日閲覧。
  71. ^ anandmeg (2023年5月24日). “スペル チェック機能の詳細 - Visual Studio (Windows)”. learn.microsoft.com. 2024年6月29日閲覧。
  72. ^ Spell Checker | CodeRush | DevExpress Documentation”. docs.devexpress.com. 2024年6月29日閲覧。
  73. ^ Learn about the Spell Checker - Visual Studio (Windows) | Microsoft Learn
  74. ^ Spell Checking | IntelliJ Platform Plugin SDK” (英語). IntelliJ Platform Plugin SDK Help. 2024年6月29日閲覧。

関連項目

編集