いまさら「リーダブルコード」
Tweet(image from https://www.oreilly.co.jp/books/9784873115658/)
春もうららか、読書が気持ちいい季節になってきました。しばらくの間、夏ぐらいまで自由な時間が増えるので、積んでいる技術書を崩していく活動を始めました。
その中で、プログラマなら誰でも知ってるであろう、「リーダブルコード」をいまさらながらキチンと読んだので、印象に残った部分を読書メモとして残しておきたいと思います。
気づき
全体として 4 部に別れており、第 1 部で「表面上の改善」、第 2 部で「ループとロジックの単純化」、第 3 部で「コードの再構成」、第 4 部で「選抜テーマ」というように、部を追うごとにリファクタリングのレイヤーを上げていくような構成になっています。
特に第 3 部の 13 章「短いコードを書く」と第 4 部の 14 章「テストと読みやすさ」から、特に興味深い気づきがありました。
仕様を削れるだけ削る
前線でサービス開発に携わっていたときは、いわゆる ディレクター と呼ばれる役割の方と協業することがほとんどでした。会社のカルチャーによってディレクターの役割は異なると思います。ここでは、プロダクトについて常に考えていて、仕様を考えてディレクションをする人 とします。
この本にも書かれているように、エンジニア(特にわたし)は往々にして甘い見積もりをしてしまいます。コードを書き始める前は「よし!こんなにイケてる機能を実装するぞ〜!」と思ってしまい、アレもコレも二つ返事で実装しようとするので、最初の計画よりもリリースが遅れてしまうことがありました。
シニアなエンジニアは、ディレクターのやりたいことを聞いて、工数を考慮しながら巧みに仕様を削り、実現が難しい場合は代案を考えて、キッチリと期限に成果を出します。そして、そこから生まれるコードは簡潔で、過度に複雑ではなく、あとから触るのも苦痛でないコードになります。
テストフレームワークはデザインパターン
何気なく使っている RSpec や test/unit ですが、「リーダブルコード」に書かれてている「良いテスト」を書くためのデザインパターンを、そのままフレームワーク化したものであることに気づきました。
たとえば、RSpec ではテスト対象のアサーションとして、以下のような記法で書けます。
expect(user.name).to eq 'Alice'
これは、本文中で紹介されている「テストの本質を 1 行にまとめる」の実践であるといえます。
また、テストが fail したときの親切なエラーメッセージは、本文中の「手作りのエラーメッセージ」の実践であるといえます。
このように、テストフレームワークは良いテストを書くためのデザインパターンを実装したものであるので、その裏にある概念をしっかり理解してテストフレームワークを使っていくことは価値が高いなと思いました。
まとめ
「これってほんとかな?」と思う部分もちらほらあって、ちょっとのどごしが悪いですが、時間をかけて読む価値はある本だと思います。キレイなコードを書けるようになりたいですね。