Upgrade to Pro — share decks privately, control downloads, hide ads and more …

書籍『良いコード/悪いコードで学ぶ設計入門』でエンジニアリングの当たり前を変える

 書籍『良いコード/悪いコードで学ぶ設計入門』でエンジニアリングの当たり前を変える

こちらのトークイベントで用いたスライドです。

『良いコード/悪いコードで学ぶ設計入門』著者トーク
https://modeling-how-to-learn.connpass.com/event/242976/

MinoDriven

May 10, 2022
Tweet

More Decks by MinoDriven

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. 4/7
    初版部数 2倍増刷

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. View Slide

  16. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. View Slide

  25. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. 本書の特徴

    View Slide

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

    View Slide

  31. 入門書

    View Slide

  32. 現実には…
    入門書

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  47. 再現性のある罠

    View Slide

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

    View Slide

  49. つまり

    View Slide

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

    View Slide

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

    View Slide

  52. 評判の声

    View Slide

  53. View Slide

  54. View Slide

  55. View Slide

  56. 各章の紹介

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  76. 毎年12兆円以上

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  85. 設計が
    当たり前の世界へ

    View Slide

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

    View Slide

  87. 10.9%

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  91. つまり10万部
    しつこい

    View Slide

  92. みんなで広めよう

    View Slide

  93. おしまい☆

    View Slide

  94. ここからは
    執筆裏話

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide