All Articles

今更リーダブルコードよんでみた

要約

  • リーダブルコードを読み返して気になったところをまとめる
  • 他人が最短時間で理解できるように書く
  • 日頃からリーダブルコードを意識しないと身につかなそう

内容

個人開発しているとどうしてもコードは汚くなりがちです。原因としては機能を実装することに意識がいき過ぎてしまう事が多いいことと、一度機能を実装したらそのコードを読み直さないことなどがあげられます。(自分のことです)

開発を継続的に続けるためには、やはりコードの綺麗さを保つ必要があるななんて常々おもっていましたが、そもそも綺麗なコードってなんだろうという部分が自分の中であいまいでした。

そんなこんなで、本屋で久しぶりにリーダブルコードを立ち読みする機会があり、やはりいい本だなと思ったので購入して読んでみました。

実は2年前くらいに大学一年生のころ一回読んだ事があったのですが、再度読み返してみると実践できていないことばかりでとてもためになりました。なので、自分が気になったところを引用しながらまとめていきます。


鍵となる考え コードは他の人が最短時間で理解できるように書かなくてはならない p4

これが、リーダブルコードにおける「いいなコード」の定義でしょう。いいコードと言うのは他人が読んで(もちろん自分も含め)最短時間で理解できるように書かなくてはならない。もちろん綺麗なアーキテクチャなどはありますがそれはソフトウェア全体の話で、もう少し範囲を狭めて綺麗なコードという観点で言えばなるほどと思える定義だと思います。

理解する時間が短くなるというのはとてもいいメリットで、昔自分が書いていたコードを読み返すと何をしているのかが分からず、一から理解していかなくてはならない作業の時間を短縮できます。

また、チーム開発でもいちいち説明せずにチームメンバーが理解できればスムーズ進みそうです(自明)。


コードを「段落」に分割する p53

こちらは、何行かのコードを書く際に処理のまとまりごとに段落をつけろという文脈です。 DB処理を書く段落、データを整形する段落、データを表示する段落と処理ごとに分けることでみやすくする事ができるようです。


関数から早く返す p91

これは自分でも実践できていたもので、if文のネストを小さくする際にはまずはこの工程ができないか確認してみます。 実践もしやすくコードも読みやすくなるのでおすすめのやり方です。

if (empty($key)) {
    return;
}

...

要約変数を使う p101

サンプルコードとしてはこんな感じ。isAdultが要約変数、human.age >= 20でも十分にわかるけどisAdultの方が変数が何を示しているのかわかりやすい。条件式が二つ以上のになるともっと効果がありそう。

const isAdult = human.age >= 20;
if (isAdult) {
    console.log("お酒買えるで")
}

巨大な文を分割する p106

本書ではjQueryのサンプルコードで記載されていた。繰り返し使用する処理などは変数にしてまとめておいたりする。 できるだけ巨大な文を分割するようにしていく。 DRY(Don’t Repeat Your Self:繰り返しを避けること)原則などとよばれているものでもある。

よく言われている事だけど結構できていないこともある。 あるロジックの処理を変更しようとしたときに複数箇所変更しなくちゃいけなくなると、たぶんDRYができてない。


「このライブラリにXYZ()関数があればなぁ」と思ったら、その関数を自分で書けばいいのだ! p133

それで書ければ苦労しない

だいたいやりたい処理は標準ライブラリにあるのでそれを調べたあとの話。 素だと使いづらい処理をまとめて一つの関数にするとかでも有効。


その機能の実装について悩まないで --- きっと必要ないから p168

まじこれ、使う処理だけ書きたい。 個人開発でもコード書く前にユースケースの確認くらいしておきたい。


クラスのインターフェースを定義する p198

どんなクラスが欲しいのかを設計してインターフェースを定義しておく。 設計しながらコードを書くとだいたいろくなことにならない。

まとめ

ぶっちゃけ本書に書いてあることの二割くらいしか実践できていない(もちろん本書に全部従うつもりはないが)。 コードを書く時は手元に置いて時々見直そうと思います。

そもそも、コードをなぜ綺麗に保たなくてはいけないのかですがこれは開発するモチベーションにとても関わってくる(汚いコードだとモチベーションは下がる)部分だからです。 このコードはいいコードか?と立ち止まって考え、きちんと意識しながらコードを書いていきたいと思います。