リーダブルコードから学ぶ、新卒エンジニアが特に気を付けたいコードの書き方

新卒エンジニアの氏家です。 私は普段読書をしないのですが、私が尊敬するエンジニアは様々な技術書や指南書を読んでいるので、私も読書する習慣を身につけることにしました。

最初の1冊目として、「リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック」を会社の福利厚生で購入しました。

www.oreilly.co.jp

これを選んだ理由は、多くのエンジニアから良書だと勧められていたのと、これから開発する上で「良いコード」を書けるようになりたいと思ったからです。(単純)

リーダブルコードの概要や具体的な内容については他のエンジニアの方々が丁寧に紹介されているので、ここではリーダブルコードを読んで学んだ、新卒エンジニアという立場の僕が特に気を付けたいと思ったコードの書き方について話していきたいと思います。

抽象度の低い単語を選ぶ

例えばcheckStrという関数があったとき、値の有無、文字列の長さ、条件に合致しているかどうかなど、具体的に文字列の何をチェックしているのか分かりません。

checkという単語の意味が広すぎるので、書き方を変えたり、類語を調べるなどして、より抽象度の低い命名を心がけるようにします。 (例えば値の有無を確認したければisEmptyexists、ある条件を満たしているか(有効かどうか)を調べたければisValidなど)

リーダブルコードではこれらを「カラフルな単語を探す」と表記していて、

シソーラス(類語辞典)を使って調べよう。友達にもっといい名前がないかと聞いてみよう。英語は豊かな言語だから、選べる単語はたくさんあるはずだ。

とあります。

たまに抽象的な単語の代替案が思い付かなかったり、仕様と微妙に異なる英単語を選択してしまったりすることがありますが、 英単語が分からないのは単なる知識不足なので、他の方のコードを読んだり自分で調べたりして、自分の中の「命名で使える英単語辞典」を更新していきたいです。 (だからといってあまり使用されないような難しい単語を使わないよう、どこまで明確にするかの線引をする必要があります。)

まだコードを書き慣れてないときだからこそ、意味が明確な命名になるよう、使用する単語を選ぶクセを身に付けたいです。

コメントを書く

まず前提として、見ただけで何をしているか理解できるコードについてコメントを書く必要はないはずです。 というよりも、見ただけで何をしているか理解できるコードを書けるようにならなくてはいけません。

しかし、それでも複雑になってしまうコードや読み手に伝えたいこと(コードからは分からない仕様や前提条件など)はコメントとして残しておく必要があります。

次の定数を見てみましょう。

const ENTERABLE_NUM = 2

なぜENTERABLE_NUM = 2なのか、理由を知らない人が見ても分かるように以下のようにコメントを書きました。

// 東京はまん延防止等重点措置下のため
// 酒類を提供する飲食店に入れるのは2人まで
const ENTERABLE_NUM = 2

このコメントがあることでなぜENTERABLE_NUM = 2なのかが明確になりました。

コメントの書き方

上記の例では仕様をそのまま書いただけなのでコメントの書き方で悩むことは無かったですが、コードによってはどのようにコメントを書けばいいか分からなくなってしまうことがあります。

リーダブルコードではこうした状況に直面したとき、

  • 頭のなかにあるコメントをとにかく書き出す。
  • コメントを読んで、(どちらかと言えば)改善が必要なものを見つける。
  • 改善する。

という3つのステップを踏む方法が紹介されています。 まず伝えたいこと、コメントで残しておきたいことをつらつらと書き出し、文言や書き方を改善したほうが良さそうなものを探し、分かりやすいよう改善する。 たったそれだけですが、悩んだ結果まとまらずコメントを残さないということが無くなります。

他のコードにはコメントが無いから、うまくコメントを書けないから、と躊躇せずに、コメントが必要だと感じたらまずは書き出すようにしたいです。

巨大な式を分割する

例えば以下の様なコードがあったとします。

if(textValue.split(" ").length > 2) {
  ....

このコードでは、入力された名前にミドルネームが含まれているか確認しているのですが、ぱっと見で何をしているか分かりません。次のコードではどうでしょうか。

const containsMiddleName = textValue.split(" ").length > 2
if(containsMiddleName) {
  ....

コード自体は1行増えましたが、このように式を一度変数に代入することで、ミドルネームが含まれているときに特定の処理を実行しようとしていることがすぐに分かります。 この変数は「説明変数」と呼ばれており、名前の通り式の意味を説明してくれています。

他にも、複数の条件が入り組んだ複雑な条件式をそれぞれ分割して書いたり、関数の引数に含まれる長い計算式を一度変数に格納したりすることで、コードが格段に読みやすくなります。

冗長なコードを書かないよう意識していると、なるべく短く書こうと可読性を無視してしまいがちです。 必要ならば変数を増やす、式を分割するというテクニックを覚えておくことで、より「良いコード」が書けるようになると思います。

おわりに

リーダブルコードを読んだからといってすぐに可読性の高いコードが書けるようになるというわけではありませんが、念頭に置いておくことで今までよりも可読性を意識しながらコードを書けるようになると思っています。

また、内容を忘れてしまったり、コードを書いていく上で自然と身についてしまうような「よくないクセ」を矯正する意味でも、定期的にリーダブルコードを読むようにします。

インプットを増やすためにも、今後も色々な本を読んでいきたいです。