プログラミングの変数名、関数名を命名する際に便利なサイト・記事

## **はじめに**

新規追加する関数名に悩むとき、通常の翻訳サイトだと物足りないこともありますよね。
で、「確かQiitaで命名に関するチートシート記事があったよな～」という記憶だけが残っており、その時に見つけ出せなかったので半分自分用にサイトをまとめておこうと思います。
何かいいものがあったら随時更新していきます。

## **命名するその前に：既存プロジェクト開発ならプロジェクトの規則・文化も考慮する**

もし既存プロジェクトに参入し、そこで新規関数や変数を作ろうとしている場合には、以下のような点があるかも意識した方がいいと思います。

- そのプロジェクトでの命名規則
- 「こういう機能ではこの単語を使うべし！」みたいな暗黙の文化

既存プロジェクト内のソースコードと全然違う命名をしてしまうと、同一機能のgrepに引っかからなくなる等デメリットもあるので。
特に歴史の長いプロジェクトに新規参入した場合等は、正当な理由での命名方針変更でもすごく反発されたりするので難しい面がありますよね。
そんな場合はボーイスカウト精神をもってちょっとずつ良くしていくのがいいのかな。

## **命名する際の参考サイト・記事**

###[**プログラミングでよく使う英単語のまとめ【随時更新**](https://qiita.com/Ted-HM/items/7dde25dcffae4cdc7923)

私が最初に探したかった記事がこちら。

基本となる単語情報は対義語や意味合い、ユースケース付きでシンプルかつ丁寧に説明されているため記事内の検索性もよく、非常に便利な**正しくチートシート**です。
また、単語の話だけでなく、使わない方がいい単語や記法の説明、命名に対する考え方等の説明もされており、タイトルとなっている英単語に留まらない「命名」に関するチートシートだなと感じました。

### [**Codic**](https://codic.jp/)

プログラマ向けの辞書サイトです。
UIはこんな感じになっており、翻訳時の記号 "_"を使うのか"userAccount"のように大文字区切りにするか等の記法も設定することが出来ます。

<img width="768" alt="codec.png" src="https://qiita-image-store.s3.amazonaws.com/0/252277/96af3d8d-6ce2-008f-bef8-727f1d69870a.png">

デフォルトでも参考になりますし、ログインすれば辞書をカスタマイズすることも出来るので、自分やプロジェクト内での開発用辞書として育てていくことも出来そうです。
使い方の参考記事も乗っけておきます。[関数や変数のネーミングに悩んだら「codic」に日本語名を入力するとある程度解決するかも](https://nelog.jp/codic)

### **[プログラミングで変数名や関数名のネーミングに迷ったときに便利なカンニングペーパーまとめ](https://nelog.jp/programming-words)**

codicを見つけるきっかけとなったサイトです。
本記事で記載しているサイト以外にも「命名」という観点で色々なサイトを紹介しているので、純粋に勉強になりました。

### **一般的な翻訳サイト**

上記紹介してみましたが、まずは翻訳サイトを使いますよね。最近の自分を振り返るとこの辺を使っています。

google翻訳
⇒google検索で「XXX(日本語名)　英語」検索すると自然とgoogle翻訳が開かれるのが便利。違和感あれば別のサイトを見ればいいし。

[Weblio辞書](https://ejje.weblio.jp/)
⇒意味合いが似た単語の候補をいくつか挙げてくれるので、プログラミングとして、プロジェクトとして違和感のないものを選ぶことが出来るのがいい。何故か検索候補に上がりやすい。

[アルク](https://www.alc.co.jp/)
⇒google翻訳が今くらい便利になるまでは利用していたサイト。理由はWeblio辞書と同じ。
　最近は「XXX(日本語名)　英語」で検索⇒google翻訳確認⇒違和感ある場合に次の記事を覗いた結果、Weblio辞書に飛ぶ」というパターンが多くなるため、利用頻度が減っています。

## **その他命名に関する参考サイト・記事**

### **[[ソフト開発]きれいなソースコードを書くために必要な、たったひとつの単純な事](http://d.hatena.ne.jp/r-west/20090510/1241962864)**

「プログラミングでよく使う英単語のまとめ【随時更新」の参考リンク記事の一つ。
**命名について考えることの重要さ**ということがよくわかる良記事でした。可読性？そんなの沢山あるメリットの1つですよ。

### **[クラスの命名のアンチパターン](https://qiita.com/magicant/items/8134edf969f9629fa66e)**

本記事をまとめる際に、「アンチパターンがまとまった記事ないかな？」と探して見つけた記事がこちら。
自分がよく使う命名もかなりあり、勉強になります。

### **[プログラミングの英語表現 / 文章作成に迷ったら「クオートで囲ってGoogle検索」](https://qiita.com/YumaInaura/items/76f8242ae58d017d69f6)**

趣旨は少しずれてしまいますが、関数名は英文として違和感ないものにしておくと分かりやすいですよね。
ということで違和感ない英文を作る為のアイディア記事を紹介しておきます。
命名の妥当性を確認するひとつの指標として、簡単に実践できるいいアイディアだと思います。

-------

## **おまけ: 命名に関する個人的趣味**

記事にするなら仕事でも共有すると思うので、せっかくなので上記サイトに出てこなかった自分の趣味も書いておこうと思います。

### **対となる関数があるなら、否定の意味を持つ接頭辞(dis-, de-, un-, in-/im-/il-/ir-, non-)を活用したい**

**否定の意味を持つ接頭辞を使うメリット**

例えばユーザー登録と解除の機能に対する関数を作るなら、解除側が`release_account`とかでも意味は通じるんですが、unを利用して以下のようにするのがいいと思っています。

- 登録⇒`regist_account`
- 解除⇒`unregist_account`

メリットは2つあります。

1. 全体検索で対となる機能が使われているか確認できる。
2. 単語の意味を知らなくても対となっていることが分かる。

1つめについて、接頭辞を利用してもらえると"regist_account"と同一キーワードで登録・解除の機能が使われているかが1キーワードの全体検索でわかります。
特にLock/Unlockのような解放漏れでバグを引き起こすようなものに対しては効果的だと思います。

2つめについて、複雑な機能だったら単語も馴染みのないものを使いざるを得ないことがあったりします。そんな時に`謎の単語_account()`と`dis謎の単語_account()`となっていれば、
関数の意味は置いといて、対になっているということはわかります。単語が難しくても情報が落とせるのは結構大きいと思います。

**ただし、機能の意味と同じ意味合いの単語であることが大前提**

ここで言いたいのは「とにかくdisなりunなりをつければいいのね」ということではなく、「対義となる単語の候補にdisなりunなりがあるなら、そちらを採用するとメリットがあるよ」ということです。

例えば保存する/読み込むという機能の関数を作る際に、保存する⇒saveを選んだとします。
この時saveの否定語としてunsaveがあるようですが、保存するの逆は保存しない。読み込むと意味合いが異なるので、命名候補にもなりません。普通にsave/loadでいいですよね。

## **サイト検索時の参考(リンク外のもののみ)**

「関数や変数のネーミングに悩んだら「codic」に日本語名を入力するとある程度解決するかも」記事を見つけたきっかけ:[命名に困ったら](https://qiita.com/mrd-takahashi/items/b4cb9275aca1039adabe)