おはようございますこんにちわこんばんわ。どうもぶたです。
以前、チーム内で「変数や関数の名前に妥協したくないなー。どうしたら上手く命名できるんだろう?やっぱり英語の勉強?」という話になったので、今回は名前付け、命名についてまとめます。
とは言え、自分自身多くの記事やドキュメント、書籍などに助けられているので、ほぼ紹介記事になります。
ただ、順番には気をつけた方がいいと個人的には思っています。
何事もそうですが、なぜやるのかを知ってからどうやるのかを学ぶべきかな、と。
例えば、「この単語とこの単語はニュアンスが違う」「そんな単語存在しないよ」「単数と複数が間違ってる」
そんなレビューを受けたことがある人もいると思います。僕も言われたことがあります。
そういった内容の記事もたくさんあります。僕も読み込んでいますしストックして参照できるようにしています。
それはそれで有用ですし、是非意識していきたいことです。
ただ、そもそも、「良い」名前付けとは何なのか、なんで「良い」名前付けをするのか、という点を忘れてはいけないと思うのです。
その次にプログラミング界隈の慣習、そして英単語・英文法なのかな、と。
この前提や順番を忘れてしまうと、それこそただただそ英単語・英文法の話になってしまいます。
英文ライクに書くことが求められたとしても、僕らはソースコードを書いているわけですから、英文法マニアになってもそれはそれなのではないでしょうか。
紹介する順番で参考にしていただけると、きっと実になると思います。
前提
きれいなソースコードを書くために必要な、たったひとつの単純な事
まずは大前提の理解として、こちらの記事を読んで欲しいです。
その内容にテクニックは全く書いてありません。
正しい名前を付けることのモチベーションは何なのか、どのようなメリットが生まれるのか。
そもそもの話がしっかりと書かれています。
何度も読み返す価値のある素晴らしい記事だと思います。
慣習
Microsoft クラウドスキルチャレンジ
こちらはガイドラインなので動機付けがあまり読み取れませんが、参考になる情報がしっかりと整理されています。
気になるセクションだけでも一読すると良いと思います。
うまくメソッド名を付けるための参考情報/うまくクラス名を付けるための参考情報
メソッドとクラスに分けて紹介されています。
どちらもプログラミングの話なので共通する考えはあると思いますが、
メソッドにはメソッドに、クラスにはクラスに特化した特徴があるのも事実です。
メソッド、クラスそれぞれによく用いられる名前付けやその考え方を確認するといいと思います。
Google Style Guides
コーディング規約なので、名前付けとは意味合いが異なりますが、
大文字/小文字、キャメルケース/スネークケースなどの慣習を知るには参考になると思います。
ご自身で利用されている言語(なければ近しい言語)の情報は見ておくといいと思います。
英語
ここから英語の話になります。
プログラミングでよく使う英単語のまとめ【随時更新】
いいねもストックも万を超えるすごい記事です。
網羅している単語数も圧倒的ですが、その単語の意味など注釈であったり、
どういいのか/悪いのか、などがしっかり書かれており、非常に参考になります。
また、文末のリンク集はいずれも参考になります。
実は最初に紹介したきれいなソースコードを書くために必要な、たったひとつの単純な事もこのリンクから知りました。
是非リンクも辿ってみるとより深まると思います。
またコメントも色々と勉強になります。
モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう
一問一答的に覚えがちの英単語ですが、名詞や動詞、形容詞などの品詞が当然あります。
前文にあるようにRuby/Ruby on Rails前提なので全てが当てはまるわけではないですが、
品詞を意識することの有用性はどの言語でも変わらないのではないでしょうか。
こちらの記事も本文だけでなくコメントまで読むと面白いと思います。
最後に
名前付けについて参考になる記事をまとめてみました。
チームで開発をされている場合は、
チーム内で「良い名前付けってどんな名前付け?」と言った会話をまずしてみるといいと思います。
プロジェクトの特性やメンバー構成、利用している技術スタックなどなどの諸要因によって、「良い」(あるいは「優れた」「正しい」)の見解は変わってくると思います。
紹介した記事本文中やコメントなどでも触れられていますが、正しい英文と理解しやすいソースコードは必ずしもイコールではないと思います。
余談ですが、
アメリカ人に「これをこういう風に形を変換する処理があるんだけど、formatかな?convertかな?」と聞いてみたら「それはstandardizeだろ」と言われました。
「異なるリソースから関連する情報を集める処理はfetchとgatherどっちがしっくり来るかな?」と聞いたら「イメージ的にはamalgamateだよね」と言われました。
英語って難しいですね。
最後の最後に。
今回紹介させていただいた記事/サイトはほんの一部で、他にも沢山の素晴らしい記事やサイトがあります。
「この記事/サイトも勉強になる!」というオススメがありましたら、是非コメントにて教えていただけると幸いです。