litamemo

Outputの練習がてら、思ったことや自分の考えをまとめていきます。

読みやすいコードを書くということ - まずはリーダブルコードを読もう -

読みやすいコードを書くのは当たり前?

最近、とある企業の面接で「コードを書く時、大事にしていることはなんですか?」という質問をされました。 私は『読みやすいコードを書くことです』と答えたのですが、面接官の人にそれだけ??って感じの顔をされました。

『読みやすいコードを書くことで、可読性が増して他人への引き継ぎを含めた運用コストが低くなるんです』とか 『バグが見つけやすくなったり、改修がしやすくなったりメリットが大きいんです』とか、 頑張って説明してみたものの、自分の理解が足りなくてうまく説明できなかったのでちゃんとまとめてみることにしました。

その前にちょっと自分の話

ちなみに言っておきたいのですが、私自身はコードを書くことが苦手です。 全然うまく書けない。知識も経験も足りない認識がありまくるし、本当実装に関してはコンプレックスしかないです。

それでも、コードを書く時は読みやすくしようという思いはあって、うまく書けなくても、これだけは意識しています。

読みやすいコードを書くって、当たり前に大切で、みんな「そうだよね、大事だよね」って感じなんだと思ってたけど、 自分が思うほどこれを大事と思っている人がもしかしたら少ない説もあるのかもしれない…?

いや、流石にないか。

読みやすいコードとは

読みやすいコードを書くためのエッセンスが詰まった"リーダブルコード"という素晴らしい本があります。

www.amazon.co.jp

大体そこに書いてあるんですが、読みやすいコードとは下記のような特徴があります。

  • 誰が見ても理解しやすい
    • 自分だけが理解できるコードではなく、初めてみる人も読みやすいコード
    • どこで何をしているかが理解しやすいことで、バグや問題点を見つけやすい
      • 統一されたルールがある
      • 価値のあるコメントがある
        • 価値のないコメント: 見ればわかることが書いてある
        • 価値のあるコメント: コードを見るだけではわからないが、コードを後から触る人が知っておいた方が良い補足など
      • 誤解されにくい名前がついている
      • インデントなどが適切で、読みやすい
      • クラスや変数が適切に分割されている
      • テストしやすい

誰が見ても理解しやすいって、一言で言えばとても単純で簡単そうに見えるかもしれないんですが、 やろうと思うと考えることがたくさんあって、めちゃめちゃ難しいんです。 少なくとも私には死ぬほど難しい。

自分の経験として感じたのは、特に命名に関してはすごく重要なのに軽視されていることが多すぎると思うんです。 いい機会なので、ちょっとまとめてみたいと思います。

命名に関する話

メソッド名やクラス名、ぶっちゃけ初めは私も動けば何でもいいと思ってました。 でもそれは違いました。というかはじめの指導係にめっちゃ怒られて気づきました。

怒ってくれてありがとう…。 その人は私の尊敬するできるエンジニアの一人で、普通の人が1ヶ月くらいかかって実装するプログラムを、1週間あれば全部完成させてしまえるくらいのスキルを持っていたんですが、名前を考えるのにはすごく時間を使っていました。

クラス名、変数名、メソッド名、DB名、テーブル名…。 名前をつけなければならないものはたくさんあります。

たくさんあるということは、影響が大きいとも言えます。 これらが誤解されにくく適切で統一された名前なのと、適当につけた名前なのとでは全然違います。

命名を適切にすることによるメリットを下記に書いてみます。

  • 誤解されにくい名前
    • 初めて読んだ人がコードを正しく理解できる可能性が上がる
    • 仕様と実装の齟齬に気づきやすくなる
    • バグに気づきやすくなる
  • 統一された名前
    • 後から手を入れる人も統一されたルールがあると名前をつけやすい
    • 変更や修正が入った場合に、容易に一括置換ができる

私が知っているできる人たちは、みんなここに結構な時間をかけています。 名前を考えるだけで数時間かけているのもみたことがあるくらいです。

でも、これがどれだけ大事な部分なのか知っているからこそ、それくらい時間をかける価値があると判断しているんです。 わかりやすく認識齟齬を引き起こしにくい名前をつけるのは、できる人でも難しいんですから、自分が頭を悩ませて考えても適切な名前がつけれないって失敗してもめげずに経験を積んでいきたいと思います。

まとめ

読みやすいコードのよる恩恵は、未来の自分だけじゃなくて、他の人にも与えられます。

引き継ぎを含めた運用コストや品質を考えると、読みやすいコードを書くというのが一番重要なんじゃないかと思いますし、 読み手のことを考えて書くというのは、実装だけではなくて仕様書や本などドキュメンテーションにも必要なことだと感じています。

未来の自分や誰かのために、読みやすいコード書いていきましょー。