コード内の単語を表現する際の、記法の種類

先日の先輩との ZOOM ミーティング中のこと。

先輩「ここ、キャメルケースで書いた方がいいよねー」
私「！？？？」

即座に Google 検索 ('Д')

・・・なるほど。
単語と単語を繋げるときに `_` アンダーバーを使うか `-` ハイフンを使うか、はたまた単語の最初を大文字にするか。

つまり、ここは２つ目の単語を大文字にするキャメルケースが有効だと言うこと！

私「そそそ、そうですよね！なーんでスネーク記法なんですかねー。あははー」

私の磨き抜かれたコミュニケーションスキルを駆使して事なきを得たのですが、これはしっかりと勉強しとかないとな、と思いました(ﾟДﾟ)

学生時代に「最初は小文字、次の単語は大文字」と先生に言われて以来、ただひたすらその通りにしてきましたが、ちゃんと名前があったんですね。

いやー、恥ずかしい (*´Д｀)

ちゃんと調べて勉強することにしました。

# 記法の種類

ネットでも色々と調べみたところ、以下の３つが代表的な記法のようです。

- キャメルケース
- パスカルケース
- スネークケース
- スパイナルケース（チェインケース / ケバブケース）

私は JavaScript を主に使用しているのですが、変数や関数はキャメルケースを使い、 クラス（コンストラクタ）はパスカルケースを使うのが一般的のようです。

検索していて少々混乱したのですが **キャメル記法** のようにケースを日本語訳して書くこともあるようです。
なので ~~**キャメルケース記法**~~ というのは厳密に言うと誤りな様子。

気を付けていきたい所存です(｀･ω･´)ｷﾘｯ

ではでは、それぞれの特徴をまとめていきます。

## キャメルケース

```js:javaScript
const camelCase
function getMyName(){ return 'Jagi' }
```

キャメルケースは**最初の単語の先頭を小文字**にして、２つ目以降の単語の先頭を大文字にして繋ぐ記法です。

Java、JavaScript などの関数（メソッド）の命名ではこの記法が多いようです。

正確にはロウワーキャメルケース（Lower camel case）と言うそうですが、単にキャメルケースと言われることが多いようです。

## パスカルケース

```js:JavaScript
class PascalCase {
    constructor() {
        this.name = 'Jagi'
    }
}
```

パスカルケースは**先頭を含むすべての単語の先頭を大文字**にして繋ぐ記法です。

Java、JavaScript、Python などのクラスの命名にはパスカルケースが使われることが多いようです。

パスカルケースは別名だそうで、正確にはアッパーキャメルケース（Upper camel case）と言うようです。

## スネークケース

```python:python
DEATH_SIGN_STAR = "Alcor"
my_name = "Jagi"

def get_my_name():
    return my_name
```

スネークケースは**単語をアンダーバー `_` で繋ぐ**記法です。

データベースのテーブルや Python での関数（メソッド）や変数の命名にはスネークケースが使われることが多いようです。

小文字をアンダーバーで繋ぐのが**ロウワースネークケース（Lower snake case）**
大文字をアンダーバーで繋ぐのが**アッパースネークケース（Upper snake case）**

大文字のアッパースネークケースは定数を宣言するときによく使われるようです。

## スパイナルケース

```html:URL
https://spinal-case.com
https://chain-case.com/jagis-chain-gallery.html
https://kebab-case.com/world-kebab.html
```

スパイナルケースは**単語をハイフン `-` で繋ぐ**記法です。

URL（HTML ファイル名）によく使われているようです。
と言うのも、URL を構築する要素のひとつ、インターネットホスト名では使用できる記号がハイフン `-` のみのため、URL ではハイフンで統一することが多いようです。

[Web APIの設計](https://www.amazon.co.jp/API%E3%81%AE%E8%A8%AD%E8%A8%88-Programmers-SELECTION-Arnaud-Lauret/dp/4798167010) という本に、スパイナルケースと言う名称が記載されていたので、これが正式名称っぽいのですが、WEB 上の検索ではチェインケースやケバブケースの方が多く見られる気がします。

知人は「ケバブの方が串ぐさーって感じでわかりやすくない？」と言っていました。
串ぐさー(ﾟДﾟ)ー

# おわりに

ここまでお付き合いいただきありがとうございました。

独学でやってると、不意にこういう基礎的なところが抜け落ちてるんですよね。
気づかせてくれる先輩の存在ってありがたい。

そんな先輩におススメされた書籍。ちゃんと読破しましたよ！
一回じゃ頭に入らないので何回か読めないと覚えられなそうですが。。。

頭良くなりたいなー(ﾟ∀ﾟ)

ではまた！(^^)/

# 参考にさせていただきましたm(_ _)m

#### 書籍

[Web APIの設計](https://www.amazon.co.jp/API%E3%81%AE%E8%A8%AD%E8%A8%88-Programmers-SELECTION-Arnaud-Lauret/dp/4798167010) 
[Web API: The Good Parts](https://www.amazon.co.jp/Web-API-Parts-%E6%B0%B4%E9%87%8E-%E8%B2%B4%E6%98%8E/dp/4873116864/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=WEB+API&qid=1611564811&s=books&sr=1-1)

#### Web site

[WebAPI設計 〜スネークケースにするか、キャメルケースにするか〜](https://qiita.com/mkin/items/13b0e78b69969097c267)
[スネーク？キャメル？なんちゃらケースのまとめ](https://qiita.com/terra_yucco/items/ec437c6005932fd73fb9)
[Python命名規則一覧](https://qiita.com/naomi7325/items/4eb1d2a40277361e898b)
[大文字小文字区切り、ハイフン区切り、アンダースコア区切り](https://hack-le.com/camel-spinal-snake/)
[ウィキペディア（Wikipedia） - キャメルケース](https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%A1%E3%83%AB%E3%82%B1%E3%83%BC%E3%82%B9)
[ウィキペディア（Wikipedia） - 有効なホスト名の制限](https://ja.wikipedia.org/wiki/%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D#%E6%9C%89%E5%8A%B9%E3%81%AA%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D%E3%81%AE%E5%88%B6%E9%99%90)