コンテンツにスキップ

ローワーキャメルケース

出典: フリー百科事典『ウィキペディア(Wikipedia)』

ローワーキャメルケース: lower camel case[注釈 1]は、ソフトウェア開発において広く利用される命名規則の一つである。

最初の単語の頭文字小文字で表記し、続く各単語の頭文字を大文字で表記し、単語間にスペース やアンダースコア_を用いずに連結する形式を指す(例:lowerCamelCase)。この命名規則は、可読性と一貫性を向上させる目的で用いられることが多い[8][9][10]キャメルケース: camel case)と呼ばれることも多い。.NETのガイドライン[11]では、先頭の語も含めて各単語の頭文字を大文字にするスタイルをパスカルケースアッパーキャメルケース)、先頭の語のみ頭文字を小文字にするスタイルをキャメルケース(ローワーキャメルケース)としており、プログラミングの文脈でキャメルケースといえば後者のスタイルを指すことが多いが、場合によってはどちらもキャメルケースと呼ばれることがある。これらを厳密に区別するために「ローワーキャメルケース」という語が用いられる[注釈 2]。先述のように「キャメルケース」は厳密には.NETの文脈で使用されるものであるため、より広範な文脈では、同じスタイルでも「ローワーキャメルケース」を使用する。

ただし、プログラミングにおける命名規則の形式に対する名前は、国際的に標準化されているわけではない[20][21]

ローワーキャメルケースは、特にオブジェクト指向プログラミング言語においてメソッド名やプロパティ名(変数名)などに用いられることが一般的である[9][10][22][23]。例えば、「customerAccount」や「employeeRecord」のように、最初の単語の頭文字を小文字で始め、続く各単語の頭文字を大文字で始めることで、識別子の構造を直感的に理解しやすくなる。

この命名規則の利用は、コードの可読性やメンテナンス性を高めるための重要な手法の一つであり、特に大規模なシステム開発において、その効果が顕著である[24][25]。さらに、ローワーキャメルケースは、他の命名規則(例:スネークケースケバブケース)と組み合わせて使用されることもあるが、その際には一貫性を保つことが重要である。

ローワーキャメルケースは、英語圏を中心に広く普及しているが、非英語圏においても、その利便性から多くのプログラマーに支持されている[9][26][27]。本ページでは、ローワーキャメルケースの歴史、利点、適用例について詳細に解説する。

歴史

[編集]

歴史については、「アッパーキャメルケース」の「歴史」項目で説明されている。

ローワーキャメルケースについて、歴史という点でアッパーキャメルケースの歴史と比較して特筆すべき点はないため、このページでは省略する。

利点

[編集]

以下の点について以外は「アッパーキャメルケース」の「利点」項目で説明されている。

ローワーキャメルケースについて、利点という点でアッパーキャメルケースの利点と比較して以下の点について以外に特筆すべき点はないため、このページでは省略する。

言語間の互換性

[編集]

ローワーキャメルケースは、複数のプログラミング言語で広く採用されている[9][28][29][30]ため、異なる言語間でのコードの移植性が向上する。

例えば、Java、JavaScript、Pythonなど、様々な言語でローワーキャメルケースが標準的に用いられているが、具体的には、JavaScriptではメソッド名やプロパティ名にローワーキャメルケースが多用される一方、Javaではメソッド名に主に使用されている。異なる言語での開発プロジェクト間でも命名規則の違いによる混乱を避けることができる。特に、マルチプラットフォーム開発やマイクロサービスアーキテクチャにおいて、その利点は顕著である。

欠点

[編集]

頭文字が欠けているという誤解を招く可能性

[編集]

ローワーキャメルケースでは、最初の単語の頭文字が小文字であるため、文脈によってはメソッド名や変数名が正しく認識されない可能性がある。例えば、「are(〜である)」という単語をローワーキャメルケースの最初の単語として用いると、「care(気にする)」の頭文字が欠けていると誤解される可能性がある。また、「lass(少女)」は「class(クラス)」と、「cope(対処する)」は「scope(スコープ)」と、「lock(ロック)」は「block(ブロック)」と、「it(それ)」は「bit(ビット)」と誤解される可能性がある。このように、英単語には頭文字を小文字とすることで、文脈によっては頭文字が欠けていると誤解される可能性を持つ単語が存在する。このような例に該当する文脈は限定的ではあるが、場合によっては注意が必要である[31][32]

複数言語使用時の混乱の可能性

[編集]

一つのプロジェクトで複数のプログラミング言語を使用している場合、ローワーキャメルケースの使用において混乱が生じることがある。例えば、JavaScriptではメソッド名や変数名にローワーキャメルケースが標準とされている一方で、JavaやC#ではクラス名にアッパーキャメルケースが標準とされている。この違いにより、プロジェクト内で命名規則を正しく定めていない場合、異なる言語間での一貫性が失われ、可読性やメンテナンス性が低下する可能性がある[32][33]

適用例

[編集]

オブジェクト指向プログラミングにおけるメソッド名とプロパティ名

[編集]

ローワーキャメルケースは、オブジェクト指向プログラミング(OOP)においてメソッド名やプロパティ名の命名に広く利用されている。例えば、JavaやJavaScriptといった言語では、メソッド名やプロパティ名をローワーキャメルケースで命名することが標準となっている。

以下に具体的な例(JavaScript)を示す。

let customerAccount = {};
function getEmployeeDetails() {
    // 実装
}

この例では、「customerAccount」や「getEmployeeDetails」という識別子がローワーキャメルケースで命名されており、最初の単語の頭文字が小文字で、続く単語の頭文字が大文字で表記されている。これにより、識別子の名前が一目で理解しやすくなり、他の識別子との区別が明確になる。

メソッド名やプロパティ名

[編集]

ローワーキャメルケースは、メソッド名やプロパティ名にも適用されることが多い。

特に、JavaScriptやPythonなどの言語では、プロパティ名をローワーキャメルケースで命名することが推奨されている。

以下にその例(Python)を示す。

class Person:
    def __init__(self, first_name, last_name, employee_id):
        self.firstName = first_name
        self.lastName = last_name
        self.employeeId = employee_id

    def display_employee_info(self):
        print(f"{self.firstName} {self.lastName}")

person = Person("John", "Doe", 1234)
person.display_employee_info()

この例では、「firstName」「lastName」「employeeId」というプロパティ名がローワーキャメルケースで命名されており、視覚的に識別しやすくなっている。

デザインパターンの実装

[編集]

デザインパターンの実装においても、ローワーキャメルケースが利用されることが一般的である。

例えば、シングルトンパターンファクトリーパターンなどのメソッド名やプロパティ名にローワーキャメルケースが適用される。

以下にシングルトンパターンの実装例(Python)を示す。

class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance

    def showInstanceDetails(self):
        print(f"Singleton instance: {id(self)}")

singleton = Singleton()
singleton.showInstanceDetails()

この例では、「showInstanceDetails」というメソッド名がローワーキャメルケースで命名されており、役割が明確に示されている。

Web開発における命名規則

[編集]

Web開発においても、ローワーキャメルケースが広く利用されている。

特に、JavaScriptやTypeScriptでは、メソッド名やプロパティ名にローワーキャメルケースが適用されることが多い。

以下にJavaScriptのクラス定義の例を示す。

class UserProfile {
    constructor(userName, userEmail) {
        this.userName = userName;
        this.userEmail = userEmail;
    }

    getUserInfo() {
        return `${this.userName} (${this.userEmail})`;
    }
}

この例では、「getUserInfo」や「userName」というメソッド名およびプロパティ名がローワーキャメルケースで命名されており、コードの可読性と一貫性が保たれている。

フレームワークやライブラリの命名規則

[編集]

ローワーキャメルケースは、様々なフレームワークやライブラリの命名規則にも取り入れられている。

例えば、AngularReactなどのフロントエンドフレームワークでは、メソッド名やプロパティ名にローワーキャメルケースが使用される。

以下にAngularを用いたTypeScriptの例を示す。

class UserService {
    private userName: string;
    private userEmail: string;

    constructor(userName: string, userEmail: string) {
        this.userName = userName;
        this.userEmail = userEmail;
    }

    getUserInfo(): string {
        return `${this.userName} (${this.userEmail})`;
    }
}

この例では、「getUserInfo」や「userName」というメソッド名およびプロパティ名がローワーキャメルケースで命名されている。Angularの命名規則に従うことで、コードの一貫性と理解のしやすさが保たれる。

API設計における命名規則

[編集]

API設計においても、ローワーキャメルケースは重要な役割を果たす。

RESTful APIのエンドポイントやGraphQLスキーマ定義において、ローワーキャメルケースを使用することで、エンドユーザーにとって理解しやすいインターフェースを提供することができる。

以下にGraphQLスキーマの例を示す。

type Query {
    getUserInfo(userId: ID!): User
}

type User {
    userId: ID!
    userName: String!
    userEmail: String!
}

この例では、「getUserInfo」や「userName」というフィールド名がローワーキャメルケースで命名されており、スキーマの構造が直感的に理解できる。

教育・学習資料における使用例

[編集]

教育学習資料においても、ローワーキャメルケースの使用は推奨されている。

特に、プログラミング入門書やオンライン教材では、ローワーキャメルケースを使用することで、初心者に対して一貫した命名規則を教えることができる。

以下にJavaScriptの入門書の例を示す。

class Student {
    constructor(studentName, studentId) {
        this.studentName = studentName;
        this.studentId = studentId;
    }

    displayStudentInfo() {
        console.log(`Name: ${this.studentName}, ID: ${this.studentId}`);
    }
}

この例では、「displayStudentInfo」や「studentName」というメソッド名およびプロパティ名がローワーキャメルケースで命名されている。これにより、学習者は命名規則の重要性を理解しやすくなる。

商標など

[編集]

商品名商標としてもローワーキャメルケースが採用されることがある。

iPhone[34]bitFlyer[35]など。このように、ローワーキャメルケースは特別にプログラミングにおいてのみ使用されるというものでもないが、この用語を強いて使うのはプログラミングの分野であることが多い[36][37]

命名規則一覧

[編集]
名称 英語表記 説明 表記例
スネークケース snake case 単語間をアンダースコア(_)で繋ぐ形式。 example_variable
スクリーミングスネークケース screaming snake case 単語間をアンダースコア(_)で繋ぎ、全て大文字にする形式。「アッパースネークケース(upper snake case)」や「コンスタントケース(constant case)」とも呼ばれる[38] EXAMPLE_VARIABLE
キャメルケース camel case 各単語の頭文字を大文字にし、単語を連結する形式(最初の単語のみ頭文字が小文字)。.NETの文脈で使用。 exampleVariable
ローワーキャメルケース lower camel case キャメルケースと同じ形式だが、フレームワークや言語に依存しない表現。 exampleVariable
パスカルケース Pascal case

[注釈 3]

各単語の頭文字を大文字にし、単語を連結する形式(キャメルケースと似ているが、最初の単語の頭文字も大文字)。.NETの文脈で使用。 ExampleVariable
アッパーキャメルケース upper camel case パスカルケースと同じ形式だが、フレームワークや言語に依存しない表現。 ExampleVariable
ケバブケース kebab case 単語間をハイフン(-)で繋ぎ、各単語の頭文字を小文字にする形式。

「チェインケース / チェーンケース(chain case)」とも呼ばれる[38]

example-variable
トレインケース train case 単語間をハイフン(-)で繋ぎ、各単語の頭文字を大文字にする形式。 Example-Variable
ドットケース dot case 単語間をドット(.)で繋ぐ形式。 example.variable

脚注

[編集]

注釈

[編集]
  1. ^ 「ローワー」という読み仮名表記は、「大辞林第四版[1]」「大辞泉[2]」「日本語シソーラス第2版[3]」「コトバンク[4]」「IT用語辞典[5]」「goo辞書[6]」「シマウマ用語集[7]」など、様々な辞書で採用されている表記である。
  2. ^ キャメルケースと同じ意味でも、他の言語では「ローワーキャメルケース」が用いられる。Java[12][13][14][15]、Objective-C[16][17][18][19]など。
  3. ^ 「Pascal」は固有名詞であるため、先頭を小文字にしてはならない。

出典

[編集]
  1. ^ 大辞林第四版”. 三省堂. 2024年7月1日閲覧。
  2. ^ 大辞泉”. 大辞泉. 2024年7月1日閲覧。
  3. ^ 日本語シソーラス 第2版 類語検索辞典”. 大修館書店. 2024年7月1日閲覧。
  4. ^ ローワーキャメルケース”. コトバンク. 2024年7月1日閲覧。
  5. ^ キャメルケース”. IT用語辞典. 2024年7月1日閲覧。
  6. ^ ローワーキャメルケース”. goo辞書. 2024年7月1日閲覧。
  7. ^ キャメルケース”. シマウマ用語集. 2024年7月1日閲覧。
  8. ^ Programming Naming Conventions – Camel, Snake, Kebab, and Pascal Case Explained” (英語). freeCodeCamp.org (2022年8月22日). 2024年6月28日閲覧。
  9. ^ a b c d TW-Redaktion: “Was ist CamelCase? Die Unterschiede zwischen camelCase und PascalCase Test 2024 [Juni] • Techwatch.de” (ドイツ語). Techwatch.de (2023年9月8日). 2024年6月28日閲覧。
  10. ^ a b Camel Case vs. Snake Case vs. Pascal Case — Naming Conventions | Khalil Stemmler” (英語). khalilstemmler.com. 2024年6月28日閲覧。
  11. ^ KrzysztofCwalina: “Naming Guidelines - Framework Design Guidelines” (英語). learn.microsoft.com (2022年10月4日). 2024年6月28日閲覧。
  12. ^ NamingConventions.UpperCamelCase (DataStax Enterprise Java Driver - Binary distribution 1.9.0 API)”. docs.datastax.com. 2024年7月10日閲覧。
  13. ^ XML Standards and Conventions”. docs.oracle.com. 2024年7月10日閲覧。
  14. ^ Style Guide | SoftConst2x | edX”. courses.edx.org. 2024年7月10日閲覧。
  15. ^ Google Java Style Guide”. google.github.io. 2024年7月10日閲覧。
  16. ^ clang-tidy - objc-property-declaration — Extra Clang Tools 7 documentation”. releases.llvm.org. 2024年7月10日閲覧。
  17. ^ clang-r450784e/include/clang-tidy/objc/PropertyDeclarationCheck.h - platform//prebuilts/clang/host/linux-x86 - Git at Google”. android.googlesource.com. 2024年7月10日閲覧。
  18. ^ Common Definition-Wallet Server Callback Notification APIs-REST-Wallet Kit | HUAWEI Developers”. HUAWEI. 2024年7月10日閲覧。
  19. ^ Rheinwerk Computing :: Apps programmieren für iPhone und iPad - 2 Die Reise nach iOS”. openbook.rheinwerk-verlag.de. 2024年7月10日閲覧。
  20. ^ Cwalina, Krzysztof; Abrams, Brad (2008-10-22) (英語). Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries. Pearson Education. ISBN 978-0-321-60500-9. https://www.google.co.jp/books/edition/Framework_Design_Guidelines/39d1wZ598ecC?hl=ja&gbpv=1&dq=Framework+Design+Guidelines:+Conventions,+Idioms,+and+Patterns+for+Reusable+.NET+Libraries&printsec=frontcover 
  21. ^ Skeet, Jon (2019-03-23) (英語). C# in Depth: Fourth Edition. Manning Publications. ISBN 978-1-61729-453-2. https://www.google.co.jp/books/edition/C_in_Depth/yEoZtAEACAAJ?hl=ja 
  22. ^ Wang, Shangwen; Wen, Ming; Lin, Bo; Liu, Yepang; Bissyandé, Tegawendé F.; Mao, Xiaoguang (2023-09-29). “Pre-implementation Method Name Prediction for Object-oriented Programming”. ACM Trans. Softw. Eng. Methodol. 32 (6): 157:1–157:35. doi:10.1145/3597203. ISSN 1049-331X. https://doi.org/10.1145/3597203. 
  23. ^ CS 1110: Notes on Style”. www.cs.cornell.edu. 2024年6月28日閲覧。
  24. ^ Python Naming Conventions: Pythonic Style Guide - Linux Dedicated Server Blog” (英語). ioflood.com (2023年9月13日). 2024年6月28日閲覧。
  25. ^ Strategies for Successful Collaborative Coding Projects” (英語). moldstud.com (2024年2月8日). 2024年6月28日閲覧。
  26. ^ Kita, Hajime; Morimura, Yoshitaka; Okamoto, Masako (10 2023). Programming Practice Python 2023. pp. 1-245. hdl:2433/285600. https://hdl.handle.net/2433/285600 2024年7月16日閲覧. "大学における非専門学生向けプログラミング教育のカリキュラム開発" 
  27. ^ Pandey, Maulishree; Oney, Steve; Begel, Andrew (2024-05-11). “Towards Inclusive Source Code Readability Based on the Preferences of Programmers with Visual Impairments”. Proceedings of the CHI Conference on Human Factors in Computing Systems (New York, NY, USA: Association for Computing Machinery): 1–18. doi:10.1145/3613904.3642512. ISBN 979-8-4007-0330-0. https://doi.org/10.1145/3613904.3642512. 
  28. ^ What is CamelCase?”. www.lenovo.com. 2024年6月28日閲覧。
  29. ^ Snake Case VS Camel Case VS Pascal Case VS Kebab Case – What's the Difference Between Casings?” (英語). freeCodeCamp.org (2022年11月29日). 2024年6月28日閲覧。
  30. ^ Camel case - MDN Web Docs Glossary: Definitions of Web-related terms | MDN” (英語). developer.mozilla.org (2024年5月7日). 2024年6月28日閲覧。
  31. ^ McConnell, Steve (2004-06-09) (英語). Code Complete. Pearson Education. ISBN 978-0-7356-3697-2. https://www.google.co.jp/books/edition/Code_Complete/LpVCAwAAQBAJ?hl=ja&gbpv=1&dq=Code+Complete+Steve+McConnell&printsec=frontcover 
  32. ^ a b Martin, Robert C. (2008-08-01) (英語). Clean Code: A Handbook of Agile Software Craftsmanship. Pearson Education. ISBN 978-0-13-608325-2. https://www.google.co.jp/books/edition/Clean_Code/_i6bDeoCQzsC?hl=ja&gbpv=0 
  33. ^ Thomas, David; Hunt, Andrew (2019-07-30) (英語). The Pragmatic Programmer: Your journey to mastery, 20th Anniversary Edition. Addison-Wesley Professional. ISBN 978-0-13-595691-5. https://www.google.co.jp/books/edition/The_Pragmatic_Programmer/LhOlDwAAQBAJ?hl=ja&gbpv=1&dq=The+Pragmatic+Programmer:+Your+Journey+to+Mastery&printsec=frontcover 
  34. ^ iPhone”. Apple(日本). 2024年6月29日閲覧。
  35. ^ bitFlyer”. bitFlyer. 2024年6月30日閲覧。
  36. ^ キャメルケースとは 意味/解説 - シマウマ用語集”. makitani.net (2022年3月4日). 2024年6月29日閲覧。
  37. ^ ローワーキャメルケース(LCC)とは?プログラミングで使われる命名規則の基本概念をわかりやすく解説 | THE SIMPLE”. the-simple.jp (2023年5月15日). 2024年6月29日閲覧。
  38. ^ a b スネークケースとは - IT用語辞典”. IT用語辞典 e-Words. 2024年7月7日閲覧。

関連項目

[編集]