レビューの指摘を8割減らしてくれた書籍
この記事の内容
レビューの指摘を大幅に減らすことに貢献してくれると同時に自分の中での実装ルール(考え方)を構築してくれた書籍を紹介します。
- 可読性、保守性の高いコードを書くために参考になる3点の書籍を紹介
- 各書籍にどのようなことが書かれているか概要の紹介
- 執筆者がこれらの書籍を通じて何を得られたか、また自身の具体的な変化について説明
対象読者
- これから現場に入っていく(現場に入ったばかり)人
- レビューでボコボコにされすぎて凹んでいる人
- 自分の中の実装のルールが確立していない人
- レビューを依頼されてもどこをレビューしたらいいか分からない人
- リファクタリングや(テストや仕様が存在しないような)レガシーコードについて学びたい人
紹介する書籍3選
①リーダブルコード
対象読者:現場にこれから入るエンジニア、現場に入ったばかりのエンジニア
内容:コードを書く上で守らなければいけない基本的な理念が書かれている
コードを書く際にどのようなことを考えて書かなければいけないか教えてくれた本でした。動けばいい、シンプルに行数を短く書ければいいではなく、可読性が高く(分かりやすく)、保守性の高いコードを書くことが大切であることを学べます。時間が経ったり、担当者が変わってもきちんと意味が分かり、効率よく改修していけるコードの書き方を学ぶことができます。
丁寧に要点をまとめられている記事がありますので以下に2つ紹介します
かなり詳細にまとめられているのでこちらの記事を参考にしてもいいかもしれません
小話:配属当初の開発よりも修正が多かった話
現場に配属された当初は仕様や要件は満たし、テストも問題なく通ってもレビューで大量に修正依頼を受けてしまう状況でした。機能を実装する時間よりもレビューにより発生した修正が多いぐらいにレビューではボコボコにされ、修正に追われた経験があります。
社内に教育システムが存在しなかったので、原因を自分なりに考え、さまざまな知識を得る中で開発をする上で開発をする上での基本ルールを自分の中に確立できました。
②Clean Code
対象読者:さらに可読性が高く、保守性の高いコードを書きたいエンジニア
内容:リーダブルコードで学んだ内容よりも深く、広くコードを書く際のルールを学ぶことができる。設計の原則に一部触れられており、設計の重要概念に基づいた開発の仕方が記載されている。
リーダブルコードで書かれている可読性、保守性のヒントをさらに深化させて説明した書籍。
関数の引数の数について言及したり、クラス名や関数名の付け方、コメント、テスト、設計の基本原則(関心の分離、高凝集と疎結合、KISSの原則、YAGNI、SOLIDなど)に基づいた開発についてコード例を挙げながら説明されています。
小話:可読性や保守性の高いコードを書く重要性を実感した出来事
途中参加のプロジェクトで機能追加など改修を行うことがありましたが、仕様がドキュメント化されておらず、機能や仕様を理解するためにコードを読み解くしかないという状況に至ったことがあります。
メソッド名も何を指しているか分からず、内容を全て読まなければいけなかったりしました。コードの内容をそのまま説明したコメントがあり、どのような意図でその処理をしているのか分からず、別途調査の時間が必要でした。
このような経験を通して可読性や保守性の高いコードを書くのがいかに大切か実感しました。
③リファクタリング
対象読者:改修業務にあたるエンジニア、改修のケーススタディから実装の完成度を上げたい人
内容:リファクタリングの手法、リファクタリングを行わなければならないケースを解説しています
リファクタリングが必要なケース、そしてどのようにそれらのコードを改善するのかケーススタディで学ぶことができます。具体例が豊富で、リファクタリングが必要なケースとリファクタリング後のコードを比較することができ、直感的に理解することができます。Javascriptで記載されています。
Clean Codeでは触れられていなかったリファクタリング例も載っており、プラスして知識を増やすことができ、頭にも残りやすいのでおすすめです。
番外編① Clean Architecture
SOLID原則など設計の基礎知識を学ぶことができます。Clean Codeでも触れられている設計原則をより詳しく学ぶことができ、これらを意識した実装につながります。またクリーンアーキテクチャの入門書として有用な書籍です。
番外編② レガシーコード改善ガイド
この書籍はテストが書かれていなかったり、システムの仕様文書が存在しなかったりするような、所謂レガシーコードをテーマに書かれています。改善のための手法やテストの書き方について学ぶことができます。
前述の書籍である『リファクタリング』よりもレガシーコードに特化して書かれた書籍です。レガシーコードに対する作業の指針、手法、テストに特化した内容です。ただ内容が難しいので、Javaの知識があり、かつシステム関連の知識にある程度精通していないと読み進めるのが大変かもしれません。
学習を通して得られたこと
これらの書籍を学ぶことを通じて以下の体験が得られました。
- 命名規則や基準が明確化され、命名の部分で直されることがなくなった
- 自分の中に実装のルール(指針)が確立され、実装する際、書き方の部分で悩むことが減った
- アンチパターンが分かり、他の人が書いたコードを直したり、リファクタリングする機会が増えた
- 設計原則やリファクタリングパターンを学ぶことでそれらを考慮した実装を考えられるようになった
- レビューによる修正が減り、レビュワーの負担を減らし、また自分自身の作業量も増えた
- リファクタリングが必要なコード、またリファクタリングする際の手法やテストのやり方を学ぶことができた
これらの書籍から学んだ時間は非常に有益な時間でした。自分の中のルールの確立、可読性や保守性の高いコードとは何か。改修やリファクタリングする際の手法やテスト手法について学ぶことができました。
Discussion