Slide 1

Slide 1 text

『良いコード/ 悪いコード で学ぶ設計入門』で エンジニアリングの 当たり前を変える 2022/4/26 ミノ駆動

Slide 2

Slide 2 text

#ミノ駆動本 公式ハッシュタグです。 本日のイベントや、拙著のご感想ツイートなどは、 このハッシュタグをお使いいただけると嬉しいです。

Slide 3

Slide 3 text

おしながき ● 自己紹介 ● 本書概要 ● 本書で向上が期待できるスキル ● 本書の特徴 ● 評判の声 ● 各章紹介 ● この先に目指す世界 ● 執筆裏話

Slide 4

Slide 4 text

自己紹介 ミノ駆動 @MinoDriven 仙塲 大也 電子機器メーカーや大手精密機器メーカー、そし てクラウドワークスを経て、2021年4月に READYFOR株式会社にジョイン。 アプリケーションアーキテクトとして、レガシーシス テムのリファクタリングや拡張性向上設計など、シ ステム設計に従事。 悪しき構造が招く凄惨な結末を風刺した「クソコー ド動画」シリーズの作者。

Slide 5

Slide 5 text

クソコード爆殺本 良いコード/悪いコードで学ぶ設計入門 〜保守しやすい成長し続けるコードの書き方〜

Slide 6

Slide 6 text

様々な悪しきコードを例に 設計を学べる技術書

Slide 7

Slide 7 text

Amazonほしい物ランキング和書No.1

Slide 8

Slide 8 text

ヨドバシ.com 楽天ブックス 予約段階で在庫切れ発生 (現在は回復しています)

Slide 9

Slide 9 text

4/7 初版部数 2倍増刷

Slide 10

Slide 10 text

4/25 発売前部数 1万部突破! ほぼ前例なし

Slide 11

Slide 11 text

4/26 各種電子版発売 Amazon Kindle 楽天Kobo Gihyo Digital Publishing いちはやく読んでみたい方はどうぞ

Slide 12

Slide 12 text

そして4/30 紙版 全国発売

Slide 13

Slide 13 text

本書で向上が期待できるスキル

Slide 14

Slide 14 text

習得スキル① 悪しきコードが見えるようになる

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

理想形を知ると 理想と違うものを認識できる

Slide 18

Slide 18 text

大昔、疫病は悪魔のシワザだと恐れられた

Slide 19

Slide 19 text

悪魔の正体が病原菌だと分かり 対処方法が劇的に革新

Slide 20

Slide 20 text

悪しきコードも同じ 理想形を知り 正体を見破ることで 正しく対処できるようになる

Slide 21

Slide 21 text

どこが悪しきコードなのか 見えない、よく分からない

Slide 22

Slide 22 text

(悪しきコードが)見える、見えるぞ! ムスカ大佐の気分になれる とてもうれしい

Slide 23

Slide 23 text

悪しきコードが光って見える

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

動悸、息切れ、引きこもり になるかもしれない

Slide 27

Slide 27 text

習得スキル② 変更に強い構造を設計するスキル

Slide 28

Slide 28 text

なるべくバグを埋め込まず 素早く正確にコード変更できる スキルが身に付きます ただし、練習は必要です

Slide 29

Slide 29 text

本書の特徴

Slide 30

Slide 30 text

特徴① 初級~中級向けの設計入門書

Slide 31

Slide 31 text

入門書

Slide 32

Slide 32 text

現実には… 入門書

Slide 33

Slide 33 text

入門書 わーい、ゴールに到着したぞー! 今日から月収7桁万円だー!! この先の世界が 認知されていないケースも! (むしろこちらが多いのでは…)

Slide 34

Slide 34 text

入門書 初級と中級の間にかける橋

Slide 35

Slide 35 text

新人さんに命名や責務の重要性を説明しようにも、それらをおろ そかにしたら何が起こるのか、いちいち例えを出すのはとても大 変。 また、設計上おさえるべきポイントを説明しようにも、都度口頭だ と、説明が五月雨になったり抜け漏れが生じたりして、いまいち意 図が伝わらない、といった事態に陥りがち。

Slide 36

Slide 36 text

本書は、どういうのが悪しきコードなのか、何がマズいのか、設計 でどう解決すればいいのか整理して記述されています。新人教育 にピッタリ。 チーム全体の設計力向上、底上げを期待できます。

Slide 37

Slide 37 text

本書ならではのユニークな設計観点をいろいろ盛り込んでいるの で、中級以上の方にもオススメです!

Slide 38

Slide 38 text

特徴② 膨大なサンプルコードと事例で解説

Slide 39

Slide 39 text

どこのページを開いても、ほぼソースコードで満たされています。 それほど具体事例を示すコードが豊富です。圧倒的ボリュームで す。 イメージの難しい抽象的な設計論ではなく、具体的なソースコード を提示してイメージしやすい構成になっております。

Slide 40

Slide 40 text

特徴③ 実践で使えるオブジェクト指向設計

Slide 41

Slide 41 text

私は業務でアプリケーションアーキテクトとして、リファクタリング や設計全般を推進しています。普段から泥臭いコードと格闘して いるのです。 私が普段の仕事で用いている、構造改善のためのオブジェクト指 向設計の実践的ノウハウを記載しています。

Slide 42

Slide 42 text

設計の理論武装ができます! かつてリファクタリングするかどうかで血みどろの戦いをしていた とき、反対勢力を説得するために理論武装する必要がありまし た。 そのときに得たノウハウが本書には活きています。

Slide 43

Slide 43 text

特徴④ Javaで書かれています

Slide 44

Slide 44 text

広く読んでいただくことを意図し、Javaを採用しました。 利用者数が最も多いためです。 ですがJavaの本ではありません。広く読まれることを意図している ので、Java独自の言語仕様やフレームワーク知識はあまり用い ていません。 他の言語でも読み替えが容易になるよう配慮しています。

Slide 45

Slide 45 text

Webアプリ、ネイティブアプリ、組込みソフトウェア、ゲーム……特 定のIT領域に限定せず、オブジェクト指向言語ならばどのIT領域 でも広く適用可能な設計手法として記述しています。 DBやhtml、ファームウェア技術や特定のフレームワークといった 知識は、本書では取り扱っていません。

Slide 46

Slide 46 text

特徴⑤ ドツボにはまりそうなパターンを網羅 本書最大かつ 他にはないユニークな特徴

Slide 47

Slide 47 text

再現性のある罠

Slide 48

Slide 48 text

私は分野の異なる様々なサービス開発の経験。 どのサービスでも、悪しきコードの傾向はほとんど皆同じ。 みーーーーーーーんな同じ罠にハマっている。 そうした再現性のある罠に対応する、再現性のある対処方法を豊 富に解説しています。

Slide 49

Slide 49 text

つまり

Slide 50

Slide 50 text

この本に書かれてることを 遵守すれば 大抵の悪しきコードは解決する(豪語

Slide 51

Slide 51 text

悪しきコードが最も書かれるタイミングは、仕様変更時。 仕様変更時にやってしまいがちな悪しき実装、悪しき行動に着目 し、どう改善すれば良いかを解説します。 仕様変更時の罠について記述した書物は、(私の観測範囲では) ほとんどあまりない印象。本書最大のユニークさであり、皆さんの スキル向上に貢献する内容だと自負します。

Slide 52

Slide 52 text

評判の声

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

各章の紹介

Slide 57

Slide 57 text

第1章 悪しき構造の弊害を知覚する 1, 2章は新卒プログラマさん向けの章です。 そもそも設計には、「設計しなければ」という危機意識が必要。 危機意識の醸成には、悪しきコードによる弊害を知覚する必要があります。 悪しきコードの弊害をダイジェスト的に紹介する章です。

Slide 58

Slide 58 text

第2章 設計の初歩 いきなりクラス設計の話となると、新卒プログラマさんにとっては重いので、簡単な命名 やメソッドの設計をベースに、どういうことをするのが設計なのかを学ぶ章です。 1, 2章を通じて、設計が全く分からない新人さんでもステップアップしやすい構成になっ ています。

Slide 59

Slide 59 text

第3章 クラス設計 すべてにつながる設計の基盤 3章から設計解説の本番スタート! 低凝集で貧弱なデータクラスを、高凝集なValueObjectへ成長させる例を用いて、クラス 設計の基本を解説します。 本章で解説する設計の考え方が本書全体の基盤になる、超重要な章です。 本書全体の理解には、この章の理解が必須です。

Slide 60

Slide 60 text

第4章 不変の活用 安定動作を構築する 変数の値を変更できるなど、状態変更可能なことを可変、変更不能なことを不変といい ます。 可変が前提のロジックだと、変数がいつの間にか意図しない値にすり変わっているな ど、挙動の予測が難しくなります。保守や変更が大変になります。 不変を活用して、予測しやすい安定した挙動の設計方法を解説します。

Slide 61

Slide 61 text

第5章 低凝集 バラバラになったモノたち 強く関連し合うデータとロジックがバラバラに散在している構造を低凝集といいます。低 凝集は重複コードや修正漏れを生じさせ、なにかと厄介です。 低凝集に陥りがちな様々なパターンと、対策方法を解説します。

Slide 62

Slide 62 text

第6章 条件分岐 迷宮化した分岐処理を解きほぐす技法 条件分岐は、条件に応じて処理を切り替える、プログラミングの基本制御です。しかし条 件分岐をずさんに扱うとロジックが複雑になり、混乱します。 この章では、条件分岐の複雑さを低減し、コントロールできるようになるための設計方法 を解説します。特にロジック単純化の鍵を握る、interfaceの使いこなし方について重点 的に解説します。

Slide 63

Slide 63 text

第7章 コレクション ネストを解消する構造化技法 配列やリストといったコレクションには、ループ処理が伴います。ループ処理周りも多重 にネストしてロジックが混乱しがちです。 コレクション周りのロジックを簡明にする設計を解説します。

Slide 64

Slide 64 text

第8章 密結合 絡まって解きほぐせない構造 責務の異なる様々なロジックが複雑に絡み合い、依存関係が強い構造を密結合といい ます。密結合は、わずかなロジック変更でも他の多くの箇所に影響が伝搬しやすく、バ グ化しやすい構造です。変更に弱いのです。 8章では、有名なソフトウェア原則「単一責任の原則」をベースに、密結合な構造を疎結 合な構造へ改善する設計手法を解説します。「単一責任の原則 is 何」「責務 is 何」が しっかり理解できるようになります。 また、密結合は様々な要因により陥りがちです。密結合に陥る様々なパターンと対策方 法も、8章で取り揃えております。

Slide 65

Slide 65 text

第9章 設計の健全性をそこなうさまざまな悪魔たち この章では、null問題や例外の握り潰しといった、邪悪な実装シリーズを解説します。 単純でありながら、プログラミング初心者が陥りがちな凶悪な罠ばかりなので、新卒プロ グラマさんにはぜひ目を通してほしい章です。

Slide 66

Slide 66 text

第10章 名前設計 ―あるべき構造を見破る名前― メソッドやクラスに付与する名前は、可読性に影響するだけではありません。ロジック構 造を大きく左右します。いい加減な命名をすると、あっという間に粗悪な構造が出来上が ります。 私が提唱する目的駆動名前設計をベースに、最適なロジック構造を導き出すための名 前の設計方法を解説します。 また、命名でついつい陥りがちな罠やその対策方法を、数多く解説しています。名前設 計のさまざまな状況に対応できるようになります。

Slide 67

Slide 67 text

第11章 コメント 保守と変更の正確性を高める書き方 ソースコード上のコメントは、読み手の理解を促すために記述します。 しかし、いい加減なコメントを書くと読み手に正しく意図が伝わらなかったり、ウソを伝え てしまう可能性があります。 保守や変更の正確性を向上させるためのコメントの書き方を解説します。

Slide 68

Slide 68 text

第12章 メソッド(関数) 良きクラスには良きメソッドあり メソッド設計の良し悪しは、クラス設計に密接に連動します。メソッド設計が良くないと、 余波でクラス設計が悪化します。逆もまた然りです。 この章ではメソッドの設計方法を集中的に取り扱います。

Slide 69

Slide 69 text

第13章 モデリング クラス設計の土台 物事の特徴や関係性を簡単に図で表したものをモデルといいます。モデルをつくる活動 をモデリングといいます。 モデルはクラス設計の土台です。モデルがいい加減だったり、もしくはモデリング自体を しないと、クラス構造が粗悪になり、変更が難しくなってしまいます。 モデルが、構造や変更のしやすさにどう影響してくるのか、どうモデリングすれば良いの かを解説します。

Slide 70

Slide 70 text

第14章 リファクタリング 既存コードを成長に導く技 この章では、リファクタリングの方法を解説します。 「リファクタリング is 何?」の知識がない新人さんもステップアップして理解できるよう記 述しています。 また、テストがないコードをリファクタリングする方法や、リファクタリング時に陥りがちな 罠など、中級者にも有用なテクニックを解説しています。

Slide 71

Slide 71 text

第15章 設計の意義と設計への向き合い方 15章以降にはソースコードは登場しません。 設計にまつわる考え方や取り組み方を解説します。 この章では、なんのために設計するのか、その意義を深掘りします。そして我々エンジニ アがどう向き合い、設計品質を高めていけばよいのかについて解説します。品質の指標 や、指標をコントロールする各種ツールも紹介します。 会社の事業成長とエンジニア自身のスキル成長について解説している、結構重要な章 です。

Slide 72

Slide 72 text

第16章 設計を妨げる開発プロセスとの戦い 設計が上手く働かないのは、チームの設計スキルが未熟であること以外に、開発プロセ スに問題があるケースが多いです。 この章では設計を妨げてしまう開発プロセスを取り上げます。 コミュニケーション、心理的要因、組織上の課題etc……それぞれの対策方法を解説し ます。

Slide 73

Slide 73 text

第17章 設計技術の理解の深め方 最終章です。 読者さんがさらに自主的に設計スキルを高めていく方法を解説します。 中・上級へのステップアップに有用な技術書を紹介します。用途や難易度に応じて様々 な技術書を紹介しています。 拙著で設計知識の足固めをしておけば、スムーズにスルスルと理解が進むでしょう。 また、設計技術の効率的な学習方法も解説しています。

Slide 74

Slide 74 text

『バグハンター2 REBOOT』 https://game.nicovideo.jp/atsumaru/games/gm22047 無料。 PC、スマホでプ レイ可。 副教材的な位置づけです、ぜひ遊んでね

Slide 75

Slide 75 text

そろそろタイトルの 「エンジニアリングの当たり前を変える」 を回収したいと思います

Slide 76

Slide 76 text

毎年12兆円以上

Slide 77

Slide 77 text

毎年12兆円以上 2025年以降 技術的負債による経済的損失

Slide 78

Slide 78 text

負債による損失(毎年):12兆円以上 2021年度国家予算:142.5兆円 喫緊の課題 我々は対処していかなければならない

Slide 79

Slide 79 text

2022年現在 必須スキル Linux Git GitHub

Slide 80

Slide 80 text

2022年現在 必須スキル Linux Git GitHub Docker AWS 近年はこのへんも推奨スキル になりつつある。

Slide 81

Slide 81 text

2022年現在 必須スキル Linux Git GitHub Docker AWS 変更容易性を考慮した設計スキル むしろコレを当たり前にすべき では!?

Slide 82

Slide 82 text

より高みを目指す人は アーキテクトへ!

Slide 83

Slide 83 text

出典:経産省『IT人材の最新動向と将来設計に関する調査結果』( 2016) アーキテクトが全然足りない!体感レベルで人材不足

Slide 84

Slide 84 text

ITアーキテクト種別一例 インフラアーキテクト ソリューションアーキテクト アプリケーションアーキテクト インテグレーションアーキテクト 本書はここの道に通ずる! ぜひみんなも目指そう! やれる!全然やれる!!

Slide 85

Slide 85 text

設計が 当たり前の世界へ

Slide 86

Slide 86 text

でもそんなことできるの? そもそも「変更容易性」すら 認知されているか疑問……

Slide 87

Slide 87 text

10.9%

Slide 88

Slide 88 text

10.9% マーケットシェア理論 影響目標値 市場にとって影響を無視できないシェア率 マスコミュニケーションにおいては どんなにマイナーな事柄でも 認知度が全人口の10.9%を超えると あっという間に広がるとされている

Slide 89

Slide 89 text

国内のプログラマ人口:約92万人 92万人 x 10.9% = 約10万人 約10万人に変更容易性設計が認知されれば良い 10万部売れれば良い

Slide 90

Slide 90 text

『リーダブルコード』 10万部以上 『ゼロから作るDeep Learning』 20万部以上

Slide 91

Slide 91 text

つまり10万部 しつこい

Slide 92

Slide 92 text

みんなで広めよう

Slide 93

Slide 93 text

おしまい☆

Slide 94

Slide 94 text

ここからは 執筆裏話

Slide 95

Slide 95 text

クソコード図鑑(2020/01/02)

Slide 96

Slide 96 text

なんと、その1ヶ月後に編集者さんから…

Slide 97

Slide 97 text

夢だけど夢じゃなかった!

Slide 98

Slide 98 text

クソコード動画から繋がった書籍執筆

Slide 99

Slide 99 text

提案は受けたが企画が通るかが最初の関門 編集者さん: 書籍として商品化するには、売れるに相応しい内容が盛り込まれている必要がありま す。 クソコード動画以外で、書籍に記載できそうなネタは、何かないでしょうか? 目次みないなアウトライン程度で結構なのですが。 何かリストアップできませんか?

Slide 100

Slide 100 text

ゲーム『バグハンター2』の モンスターリストをそのまま転記して出したところ…

Slide 101

Slide 101 text

即、 「企画通りました、 執筆に取り掛かりましょう」

Slide 102

Slide 102 text

ゲーム『バグハンター2 REBOOT』があって、 拙著『良いコード/悪いコードで学ぶ設計入門』が 誕生したのです。 両者は、根っこでは実は世界が繋がっているのです。

Slide 103

Slide 103 text

ご静聴ありがとうございました