リーダブルコード より良いコードを書くためのシンプルで実践的なテクニック
Dustin Boswell、Trevor Foucher 著 角征典 訳 須藤功平 解説
オライリー・ジャパン 2012年 発行
https://www.oreilly.co.jp/books/9784873115658/
この記事は主観を入れた「感想文」となっていることをご了承ください。
本書に興味があって要約を知りたいという方は、秀逸な記事がたくさんありますので是非調べてみてください!
秀逸な挿絵
本書を未読の方も、内容についてはある程度ご存じということもあるのではないかと思います。
だからこそ挿絵を強く推したい。
一目で「ああ...」と思ってしまう、含蓄に富んだ挿絵は必見です。
僕が好きなのは6章初め。
「コメントは正確で簡潔に」の章タイトルと挿絵の1ページは完璧な構成です。
(そしてクスッときます。)
ソースコードは「斜め読み」できるように書く
本書では「読みやすさの基本定理」として以下のように書かれています。
コードは他の人が最短時間で理解できるように書かなければいけない。(p.3)
例えば新聞やwebの記事であれば、最短時間で理解するためには、まずはタイトルや見出しを見て全体を把握し、さらに情報が必要なところを個別に読み込んでいく「斜め読み」になるでしょう。
ソースコードも同じことです。視界に入った瞬間にどこまで情報を渡せるかなのです。
広告や文章であれば、読みにくければ途中で読まれなくなってしまうものです。
しかし、仕事で出会うソースコードは、読みにくくても読まなければならないので、その状況に甘えて我々プログラマーは「読ませる工夫」をサボってしまっているのかも、と反省です。
「読みやすさ」の重要性について
ソースコードを書いている側からすると忘れてしまうこともあるかもしれませんが、ソースコードそのものは顧客にとって何の価値もないはずです。「動くシステム」だけに価値があるのです。
そして、顧客がシステムに必要とするものは常に変わり続けます。それに合わせてシステムも変わっていかなければ、適切に価値を提供し続けることができません。
品質と変化への即応性、それらを実現する土台となるのが「読みやすいコード」です。
ただ、土台というのは見えないもので、その重要性はしばしば見落とされるものです。
顧客にリファクタリングの必要性を理解してもらうことに苦労している方は大勢いらっしゃるのではないでしょうか。
「一方は知っている、他方は知らない」という状況で相互理解はとても難しいですが、こういう橋渡しができる人がいればいいのにな。。。
また、どんなに読みやすさを維持しようと思っても、改修が重なれば重なるほど、だんだんややこしくなっていくものです。
個人的には、定期的にシステムを「捨てる」ことができたら読みやすさを維持するのに役立つかな、と思ったりします。
システムを使う側の視点として、以前古くなった社内システムを刷新しようとしたものの、過去の資産の移行が大変でスケジュールが延期し続けるといったことがありました。
どんなシステムもいずれ乗り換えなければならないのだから、それを意識して「旧くなったもの、不要になったものは整理」をして身軽にできたら、使う側も作る側もハッピーになるのですが、まぁ人は必要に迫られないと動かないのも事実なのでなかなか難しい。。。
開発の手法について
本書でのソースコードの改善について、機能を満たしてからだんだん読みやすくしています。
展開の都合なのかもしれませんが、最初からいきなり読みやすいソースコードを書くのは難しいのではないかと思います。
ですから、解説の中で「添削コミット」という言葉が出てきますが、リファクタリングの要領で読みやすさを維持していくやり方が良いような気がします。
添削コミットで「どういうものが読みやすいか」という共通認識ができるという利点もあります。
ということを考えると、リファクタリングができる環境があるのが大事になるな、と。
テストの自動化とか、ソースコード管理の仕組みとか、そういうモダンな手法をチームの開発の中に取り込んでいく姿勢も、読みやすさの維持に関わってくるような気がします。
実際のソースコード改善について
ソースコードを読みやすくする具体的なテクニックについては、他の方が書いていらっしゃる読書メモを見ていただいたり、できれば実際に本書を手に取って読んでいただくのがベストなのですが、お勉強もかねて15章でのソースコードの改善のやり方を、Githubにまとめています。
現在作成中です。完成までしばしお待ちを。。。
(2020/07/04)完成しました!
※イシューとかプルリクエストとかいろいろ使おうとしたら、慣れてなくて見づらいかもしれませんが。。。
https://github.com/yoktave-yoknel/ReadableCodeCh15