はじめに
自己紹介
はじめまして。 レバレジーズに18年4月に入社したMKです。 大学まで文系で、プログラミングをはじめたのは2016年なので実質ほぼ未経験みたいな状態で入社しました。 現在は社内向けツール開発がメイン業務で、今後は作成したツールに関しても本ブログで触れていきたいです。
何について書くの?
今回は、良質なコードを知るためにおすすめと言われる「リーダブルコード」(表紙が楽譜で最初はエンジニアの本とは思いませんでした)の紹介を、自分の経験と照らし合わせて書いていきます。
冒頭でもお話しましたが、自分がほぼ未経験から入社して開発に携わっているので、入社してからの数ヶ月(配属されて実質2ヶ月)でこれは他の新卒やほぼ未経験の人におすすめ、と思ったことを中心に書いていけたらなと思います。
どうしてこのテーマなの?
このテーマにした理由は、いわゆる「良いコード」を知っていると自分が楽になりますよねってことを伝えたいからです。 知ってるだけで意識することができるので、どんどんコードが読みやすくなっていくのが自分でもわかります。 実際自分でも自分のコードが読みづらすぎて苦労しました。
入社後の学び
「リーダブルコード」の紹介
リーダブルコードを知らない人もいると思うので、まずは本の説明から。
簡単に言えば、何を意識すれば読みやすいコードが書けるかを丁寧に教えてくれている本です。
もう少し具体的にいうと、変数名や関数名の付け方やコメントの付け方などを書いてくれています。
弊社のテックブログ内にも、上記の命名規則を新卒がどのように指摘してもらってどう改善したかが書かれている記事もあります。 興味がある方は是非下記のKFくんの記事も合わせてご覧ください。
個人的に意識することが多かった章
個人的に意識する機会が多かったのは、ズバリ、第7章です。と言っても章番号だけで分かる人はすごいですよね。 第7章は「制御フローを読みやすくする」について書かれたもので、関数から早く返そうやネストを浅くしようなどの内容も記されています。
最初に任された業務で書いたコードは、ネストだらけでした。 とりあえず動くものを作ろうという思いから早く形にしようという一心で作ったら、if文の中にif文が入りまくるif文祭りになってしまっていました。 このままでは流石にまずいと感じ、リーダブルコードを業務後すぐ買いに行き、そこから毎朝1章ずつコードを書く前に読むようにしました。
そもそも何でif文を減らしてネストを浅くすることがコードを読みやすくすることに繋がるのか。
文字で説明するより実際の例を見た方が早いと思うので、sample.php
で例を見ていただきたいと思います。
// sample.php <?php if ($request['status'] === 'success') { if ($user['is_admin']) { if ($request['action'] === 'add') { } elseif ($request['action'] === 'delete') { } } else { // code for no permission user } } else { // code for failure } ?>
上のような sample.php
だとコードを読んでいる人は、
- 今どこのif文に入っているか
- 閉じ括弧はどこのものなのか
などの要素を読んでいる時に常に意識していないといけません。
今回はこれらの読み手(書いている自分も含む)にかかるストレスを軽減してあげられる方法を紹介していきます。
紹介する方法としては、実際にどのようなコードを自分が最初書いていて、それをどう修正したかを先ほど見ていただいたsample.php
とsample_after.php
で表したいと思います。(実際のコードではないですが、割と書き方は似てます。)
さきほどの sample.php
ですが、if文の中にif文が入っていて普通に読みにくいですよね。
この中に何行ものコードが含まれるので、実際のコード内だと読みづらさはかなり上がります。
次が sample_after.php
です。
// sample_after.php <?php if ($request['status'] !== 'success') { // code for failure return; } if (!$user['is_admin']) { // code for no permission users return; } if ($request['action'] === 'add') { } elseif ($request['action'] === 'delete') { } ?>
元々のsample.php
より読みやすくなったのではないでしょうか。
ここで意識したことは、
- 早く返すこと
- 改行を入れること
の二つです。
「早く返すこと」はリーダブルコードに書いてあるテクニックで、「改行を入れること」はレビューの際に言われたことです。
if文などで、肯定して条件を作っているときは逆に否定して試してみるとネストを浅くできたりして読みやすさが上がりますね。
まだまだ改善の余地はあるのはもちろんですが、一つ目のコードよりは「読みやすさ」を意識して書くことができるようになっている気がしませんか?
まとめ
長々と書いてきましたが、結局言いたかったことは一つです。
とりあえず、良いコードを知ろう
です。
まずは何が一般的に良いコードと言われているのかを知るところから。知っていれば実際に書けるかは別として、意識することができます。 何度も意識して何度も修正することでコードが読みやすくなるので、開発にかかる時間も減ってくるのではないでしょうか?
その良いコードとはどういうものかをわかりやすく書いてくれている例の一つが「リーダブルコード」です。 特に新卒や開発経験があまりない人たちにはとても良い教科書になると思うので、少しでも興味を持たれたら是非一読を。