天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

『良いコード/悪いコードで学ぶ設計入門』著者トークに参加してきた

modeling-how-to-learn.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていきます。

会の概要

以下、イベントページから引用です。

4/30発売の『良いコード/悪いコードで学ぶ設計入門』を紹介します。
本書のコンセプトや特徴、読み手に身につけていただきたいスキルを解説します。また、本書を通じて筆者が期待する世界を話します。その他おまけ話として執筆の裏話なども。
後半は雑談や参加者からのQ&Aの時間にします。

会の内容

プレゼンテーション

まず、プレゼンテーションという形でミノ駆動さんから本の内容について説明がありました。

本の効用

まず、本を買った効用についてお話がありました。
第一に、悪しきコードがどのようなものなのか?というのが分かる点がポイントだということです。理想のコードを理解することで、理想と比較してどのような点が足りていないのかが分かるということでした。

第二には、変更に強い設計ができるようになることが挙げられていました。変更があった時に大変なコードの仕組みや変更に強いコードとの差分を知れることができるということです。

対象読者

初級~中級のエンジニアを対象にしているということでした。(新人教育にもお勧めということです!)
Clean ArchitectureやEvans本など、設計を学ぶ本は多くあるものの、入門書からそうした本につなぐまでの本が少ないとミノ駆動さんは考えているということで、今回の本はそうした入門書と中上級本をつなぐまでの足掛かりにして欲しいということでした。
そのため、具体的なイメージがわくようにどのページを開いてもソースコードがあるような本になっているということです。

ただ、ミノ駆動さん独自のユニークな設計も取り入れているということで、中級以上の方も楽しんで読めるということです。

特徴

まず、現場で実際に使えるオブジェクト指向設計について記載があるということです。
設計をする際に現場で向き合うであろうトレードオフに対して、どのようなコンテキストに適用できる設計なのか?というのが詳細に書かれているため、実用性が高いし、現場で起きている問題に対して本書を持ち出すことで、理論武装(上司の説得)にも使えるということでした。

また、広い人に読んでもらえるようにJavaで書かれているということです。*1

最後に、他の本と比較して特に差別化となる点として、再現性が高い罠*2についての言及に力を入れているということでした。
Webアプリや組み込み固有の罠の紹介はほとんどなく、どんなシステム開発でも高い確率で再現する罠を記載しているということです。

献本した方からの感想

以下のような感想が既に挙がっているということです。

  • 例が多くて分かりやすい
  • 超重厚で圧倒的なボリューム
  • 知識量のひけらかし感がない
  • ソースコードが至る所に散らばっている
各章の特徴

続いて、章ごとの紹介がありました。なお、副教材としてバグや悪しきソースコードを倒すRPGゲームがあるということです笑

1章2章

設計を全くやったことがない人向けに記載された章ということで、設計を誤った際の痛みについて重点的に記載しているということです。

3章

Value Objectの活用を解説した章で、本書で核となる章になっているということです。

4章

可変なオブジェクトの副作用について記載をしている章ということです。

5章

修正漏れを招く低凝集なコードの副作用と対策法について解説している章ということです。

6章

複雑になりがちな条件分岐やinterfaceの活用方法について重点的に記載をしている章ということです。

7章

6章に引き続き、複雑になりがちな繰り返し処理とその対策を紹介しているということです。

8章

単一結合原則をベースに、密結合なソースコード疎結合に変えるための具体的なプラクティスを紹介しているということです。

9章

設計の健全性を損なうnullや例外の握り潰しなど、設計を難しくしがちである凶悪な罠について紹介しているということです。

10章

本章で一番ボリュームを割いている章ということで、モデリングの基礎ともなる名前付けに関する設計方法を紹介しているということです。

11章

コメントに関する注意点や誤解を招かない記載について解説している章ということです。

12章

メソッド設計について記載をしている章ということです。

13章

クラス設計を中心としたモデリングについて記載している章だということです。

14章

テストがないコードに対するリファクタリングや、リファクタリング時に陥りがちな罠について解説をしている章だということです。

15章

この章からはソースコードが登場しなくなるということです。
我々がなぜ設計をしないといけないのかや。設計を左右する品質の指標について解説をしていく章だということです。

16章

良い設計を妨害する開発プロセスや組織・チームの問題について記載をしている章だということです。

17章

今後設計を学んでいくにあたって、レベル別にどのような過程を経て学んでいくのが良いのか、という点について記載をしているということです。

本のタイトルに込められた想い

技術的負債の影響で毎年12兆円もの損失が出ているという技術的負債に立ち向かうために、エンジニアの設計スキルを高め、当たり前に設計ができるようなレベルになって欲しいという想いで、「エンジニアの当たり前を変える」という副題にしたということです。*3

エンジニアの10.9%*4に認知されることで、この想いを叶えたいということです。

執筆裏話

日々積み重ねていたクソコード動画が執筆のきっかけだったということです。
また、本を執筆できるかの関門となる提案時にも、ミノ駆動さんがゲームで作っていたバグハンターが関門突破に大きく寄与したということで、これまでのクソコード動画の積み重ねが本書であり、クソコードを退治するバグハンターアプリが副教材として挙げられていたバグや悪しきソースコードを倒すRPGゲームになるということでした。

質問会

会の参加者からミノ駆動さんに向けて、色々と質問をしていき、それに答えるという時間を後半戦は過ごして行きました。

パッケージ原則は盛り込まれている?

記載があるということで、どのクラスをどのようなパッケージにおくかなど、凝集性の文脈で幾つか言及しているということでした。

本を読むとバグハンターを攻略できる?

勿論それはあるし、逆も然で相乗効果ということです。
なお、1部の方が2部よりも難度が高いということでした。

技術的負債にどこからどのように手を付けるか?

変更が頻繁に生じる部分から手を付けるということでした。
戦術レベルで言うと、「クソコードの弱点」と呼んでいる、設計することで投資対効果が高い戦略を考えるということです。

心を折れたコードは?

コードに対しては折れたことはないということです。*5ただ、リファクタリングを妨害するような人に対しては心が疲弊したことはあるということでした。

実際に遭遇したコードが載っているの?

回答はYesで、エッセンスだけを抜き出したコードを記載しているということでした。

スキルの習得方法

ここは、自転車に乗るのと同様に、やはり手を動かしてみるというのが重要だということでした。
また、設計をしたことで本当に効果が出たのか?という確認をすることも重要だというお話が出ていました。

リファクタリングと性能

リファクタリングをすると性能劣化を騒がれるということで、これに対してどのように対処するか?という質問が出ていました。
変更容易性を妨げるような指標を出して、性能がどれくらい悪化するか示した指標と比較することが重要だということです。

みんなコピペをしているのですが。。

チーム全員がコピペをしているような場合、どのように対応していくといいか?という質問が出ていました。
まず、これは単にコピペをすることしか知らない場合があるので、コピペ以外の方法を教えるのがいいという答えが挙がっていました。

また、印象が強く残りやすいようにコピペをした結果起こる惨事を示すような動画を見せるといいかもしれないということでした。

設計をする際にメンバーをどのように選ぶか?

設計に興味がある人を集め、設計をすることだけにコミットするような人を集めるといいのではないか?というお話でした。

コンテキストマップについての記載は?

こちらは、記載がないということでした(ただしキーワード的に境界付けられたコンテキストと言ったワードを記載している部分はある)

モデリングの意識や知識がなくても活用できる?

会話の題材として活用できるのではないかということで、モデリングをしないと怒る問題にも触れられているという話が出ていました。

悪しき思い出ベスト3
  • 同じ条件のSwitch文が20-50個あってリファクタリングを提案したが、誰にも理解されなかった
  • 8000行の神クラスが5個あってリファクタリングを提案したが、なんてことをしようとするんだと怒られた
  • 腐敗防止層を作ったのにそれが全部なくなった
テストコードの目安

基本的にテストは書くということで、単一責任原則を特に意識しながら必要十分なテストを書いていくということでした。

なぜクソコードに立ち向かい続けるのか?

正しいコードを書きたい、健全なコードを書きたい、という負の気持ちに立ち向かってきたというお話がありました。

また、増田さんから、ミノ駆動さんは怨念を人ではなく自分に持つように見えるという話が出ていて、怨念を自身のスキルアップにつなげているのでは?と意見されていました。

雑談

執筆の苦労

執筆しながらアプリを作り、仕事も大変な局面をこなすという生活は本当に大変だったということで、身体を壊しかけながら仕事をしていたという話がありました。

同じように本を執筆した増田さんも、本の納期を守ったことに感服していました。

その分売れ行きもすさまじいということで、和書で一位を獲得したりして、ミノ駆動さんの両親や親せきも喜ばれているということです。

増田さんの本に対する印象

リファクタリング本やリーダブルコードよりも、実際に現場であったことが分かる生々しさがあり、怨念がにじみ出ているということでした。
また、設計本を読み漁っていくレベルと入門とのミッシングリンクになるような本になる印象を受けたということです。

読者へのお願い

是非感想を書いて欲しいということです!
また、17章の1-1をよく見て欲しいということでした笑*6

全体を通した感想

本の紹介をしてもらったことで読み方のイメージがついたり、素敵な裏話が聴けて楽しかったです!

次回もあるということで、期待して待ちたいと思います。

*1:ただしJava固有の文法などはほとんどないため、Javaが分からない人でも楽しめるような本になっているということでした

*2:特に仕様変更時に起きる罠について重点的に記載

*3:そして、設計の深みにはまっていった人は、アーキテクトの道を歩んでいくような人材になって欲しいということでした

*4:市場に広まるために必要とされるために必要な認知率

*5:誰も手をつけられないであろうコードに対して攻略をしていくのが楽しいということでした

*6:増田さんの本が紹介されている箇所