オススメ記事
リーダブルコード

どうも、プログラムを書き始めて13年、未だに中級者にしか思えないオクダです。

Aさん
仕事していると、めちゃくちゃ読みにくいコードと遭遇するんですけど・・・

Bさん
この前作ったプログラム、何か上手く書けずに読みにくくなってしまった・・・

 

ITエンジニアでプログラムを書く仕事をしていると、高確率で読みにくいコードと出くわします。特にレガシーな技術を用いている業務系のシステムに多いです。僕も何度苦労を味わったことか。

そんな読みにくいコードには頭を抱えつつも、自分でも読みにくいコードを書き上げてしまうことがあります。もちろん全てが読みにくいことはありませんが、一部のモジュールが複雑になったとかは往々にして起こるものです。

その現象がなぜ発生するのか?

仕様が複雑とかそういう要因ももちろんありますが、それよりも良いコード、悪いコードの本質を理解できていないことが原因です。つまり雰囲気でプログラムを書いているとw

でも僕たちには「リーダブルコード」という強い味方がいます。この本を読めば良いコード、読みやすいコードが何かが判明し、今後作成するコードの品質も向上するというもの。

良いコード、読みやすいコードを書きたい人はぜひともお読みください。

早速購入する方はこちら▼

created by Rinker
¥2,640 (2019/11/13 15:24:02時点 楽天市場調べ-詳細)

リーダブルコードの構成

リーダブルコードは、「より良いコードを書くためのシンプルで実践的なテクニック」を集めた書籍です。

著者はGoogle社での勤務実績があるDustin Boswell、Microsoft社、Google社での勤務実績があるTravor Foucherの2人。これだけで良い本に思えてくるのが不思議。

本書は全部で4部、15章で構成されています。見出しは以下の通り。

リーダブルコードの目次
    • 1章 理解しやすいコード
  • 第I部 表面上の改善
    • 2章 名前に情報を詰め込む
    • 3章 誤解されない名前
    • 4章 美しさ
    • 5章 コメントすべきことを
    • 6章 コメントは正確で簡潔に
  • 第II部 ループとロジック単純化
    • 7章 制御フローを読みやすくする
    • 8章 巨大な式を分割する
    • 9章 変数と読みやすさ
  • 第III部 コードの再構成
    • 10章 無関係の下位問題を抽出する
    • 11章 一度に1つのことを
    • 12章 コードに思いを込める
    • 13章 短いコードを書く
  • 第IV部 選抜テーマ
    • 14章 テストと読みやすさ
    • 15章 「分/時間カウンタ」を設計・実装する

15章は少し毛色が異なるものの、それ以外の章の見出しを見ると、そんなに複雑そうには思えないですよね。実際そうです。リーダブルコードは極端に難しいノウハウが書かれているわけではありません。

ただし、読みやすいコードとは何かを言語化してくれているのがやはり最大のポイントです。そして、その内容をプログラマが読むことで、明確な知識として吸収できる点が非常に良質であると気付かされます。

リーダブルコードが教えてくれる重要ポイント3つ

構成については前段で記述しましたが、本を読んで分かった重要なポイントを3つ、僕の解釈を交えて説明していきます。

そもそも読みやすいコードとはどんなコード?

プログラムには良いコード、読みやすいコードがあります。でも、良いとか読みやすいという言葉は、何がそうさせているのかが漠然としていて、もやもやとした気持ちになります。

リーダブルコードでは以下の考えを重要視しています。

鍵となる考え
コードは他の人が最短時間で理解できるように書かなければいけない。

「他の人」とは自分以外の人を指しますが、プログラミングの現場では現在の自分以外の人と考えます。つまり、未来の自分もその対象

開発経験が少ない人はあまりピンとこないかもしれませんが、どれだけ時間をかけて書いたプログラムも、しばらく触っていなければ忘れます。自分が書いているから大丈夫だろうという慢心は捨てないといけません。

そして、企業のプログラムは人の手から人の手に渡っていきます。他の人に渡ったときに、そのコードを素早く理解できることが最高の引継ぎといえますね。

ここでいう理解とは、改修やバグの発見が可能になるレベルまでの話。リーダブルといいつつ、読めると同時に書けるを可能にすることが求められるということです。

そして、なるべく短く、コメント無くても読めるを基本形としつつ、適切な粒度で分解されていることを意識する必要があります。

コードの読みやすさ8割は名前で決まる

プログラムのコードで読みやすくするための簡単で一番効果がある方法は、名前の付け方を改善することです。これはプログラマならほぼ全員が知っていることですが、案外実践できていないものです。

名前を付けるものは、クラス、フィールド、メソッド、変数といったものが挙げられます。特に重要なのはメソッドですね。

本でも紹介されていることですが、例えばメソッドの getter (例:getMax()) は、軽量のフィールドアクセス手段として認知されていて、ある意味誤解されてしまう名前です。

でも、値を取得するという意味では、ファイルから読み込んで値を取得しても、DBから値を取得しても get であることは間違いではなく、getXXX() という名前を付けてしまう人もいるでしょう。

でも、下記の通りに名前にニュアンスを込めるすることで、もっと正確に内容を理解できます。

メソッドの名前付けの改善
  • ファイルから読み込むのであれば、readMax()
  • DBから取得するのであれば、selectMax()とかfindMax()とか

本当にちょっとしたことですが、getMax() より何をやっているのかが想像しやすくなりました。

この名付けの改善はプロジェクトの方針にも左右されそうですね。というのも、インタフェースで抽象化して内部的な実装を隠蔽する方式を採用すると、getXXX() のような汎用的なメソッドしか書けない場面が増えます。

なので、本来はインタフェースの設計時点でも、ニュアンスの違いを表現できるようにしておくのが望ましいのでしょう。ちょっと難しそうだけど。

一度に一つのタスクを行う

リーダブルコードを読んだ中で今後強く意識しようと思ったことの中に、この一度に一つのタスクを行うことがあります。本でも紹介されているコードでその効果を確認します。

以下はいくつかの地域の情報から最終的に表示する地域名を決定します。

改善前

var place = location_info["LocalityName"]; // ex. "Santa Monica"
if (place) {
    place = location_info["SubAdminstrativeAreaName"]; // ex. "Los Angeles"
}
if (place) {
    place = location_info["AdminstrativeAreaName"]; // ex. "California"
}
if (place) {
    place = "Middle-of-Nowehere";
}
if (location_info["CountryName"]) {
    place += ", " + location_info["CountryName"]; // ex. "USA"
} else {
    place += ", Planet Earth";
}

 

改善後
var town = location_info["LocalityName"]; // ex. "Santa Monica"
var city = location_info["SubAdminstrativeAreaName"]; // ex. "Los Angeles"
var state = location_info["AdminstrativeAreaName"]; // ex. "California"
var country = location_info["CountryName"]; // ex. "USA"

// 後半部分を決定
var second_half = "Planet Earth";
if (country) {
    second_half = country;
}
if (state && country) {
    second_half = state; 
}

// 前半部分を決定
var first_half = "Middle-of-Nowehere";
if (state && country !== "USA") {
    first_half = country;
}
if (city) {
    first_half = city; 
}
if (town) { 
    first_half = town; 
}

return first_half + ", " + second_half;

 

改善前と改善後での大きな違いですが、以下の通りです。

メソッドの名前付けの改善
  • 改善前:値の取得、値の判断、文字列の結合を同時に行っている
  • 改善後:値の取得、値の判断、文字列の結合を一箇所で行っている

改善後は変数が一箇所にまとまることで使用するものが見渡せるし、判断文が一箇所にまとまることで、頭を使う箇所が分散されなくなります。

一度に1つのタスクを行うことで、コードを流し読みできるようになり、理解の速度がぐっと上がることでしょう。

最後に:プログラマならリーダブルコードは必ず読もう

プログラマは勉強することが大変に多い職業です。自分の価値を高めるべく、数多くの技術を学ぶ人が多いことでしょう。でも、プログラマとして必要なことは数多くの技術を知ることではなく、今使うプログラムの品質を高めることです。

「リーダブルコード」は自分も他人も読みやすく、書きやすいコードに仕上げるための情報が数多く詰まっています。そして、その情報は実はごく基本的な内容です。

プログラムがまだ分かっていない初心者はもちろん、10年以上のベテランでさえも重要さに気付かされます。この記事でも全然紹介しきれていないので、ぜひとも読んでもらえれば。

購入する方はこちら▼

created by Rinker
¥2,640 (2019/11/13 15:24:02時点 楽天市場調べ-詳細)
おすすめの記事