nikkie-ftnextの日記

イベントレポートや読書メモを発信

読書ログ | #ミノ駆動本 14章「リファクタリング」の読書会予習に着手しました

はじめに

㊗️ITエンジニア本大賞2023 技術書部門大賞 受賞!🍣1 nikkieです。

『良いコード/悪いコードで学ぶ設計入門』(通称ミノ駆動本2)の読書ログです。
次回のミノ駆動本_読書pyに向けて、14章「リファクタリング」を読み始めました。

目次

14章「リファクタリング

ミノ駆動さんの大好物、リファクタリング3
私は好きなものとなるとスイッチが入っちゃって聴衆を置き去りにしていくスタイル4ですが、ミノ駆動本はそんなことしません!

この本で初めて「リファクタリング」という言葉に出会ったとしても完全に理解できると思います!

完全に理解できる秘密はね、14章の目次から明かされるんだよ

公開されている目次を引用します。

14 リファクタリング ―既存コードを成長に導く技―

14.1 リファクタリングの流れ
14.2 ユニットテストリファクタリングのミスを防ぐ
14.3 あやふやな仕様を理解するための分析方法
14.4 IDEリファクタリング機能
14.5 リファクタリングで注意すべきこと

リファクタリング」という言葉が初めてだとしても、14.1でリファクタリングの例が示されます。
既存のコードに見つけた悪しき構造を、ミノ駆動本でこれまで出会った良い構造のコード5に変えていくことだと分かるでしょう。

続く14.2では、より現場に即したリファクタリングが扱われます。
まず、コードの振る舞いを変えずに構造を変えていることを確かめるために、ユニットテスト(テストコード)が導入されます。
そして「テストがないが仕様は明確なコード」を例に、テストを書きながらリファクタリングする、ミノ駆動さんがよくやる手法が解説されます

14.3は「テストがなく仕様も不明確なコード」に対して『レガシーコード改善ガイド』の知見を借りて立ち向かいます。

このような構成により、14章を読めばリファクタリングを完全に理解できます。
言い換えると、「わかりましたわ〜。お現場のコードでおリファクタリングいたしますわ〜」といった心境に至れると思います。
なお、これはダニング・クルーガー効果の"馬鹿の山"というやつで、現場のコードにリファクタリングを挑んだ結果「何も分かりませんわ…」となることもあるでしょう。
実際私も何度も経験しています。
リファクタリングは自転車の乗り方と同じような身に着けられるスキルだと思っていて、本で読んだだけで乗れるようにはならないように、リファクタリング繰り返し練習が必要と私は考えています。

14.5には注意点が示され、馬鹿の山から滑落した際のヒントとなると思いました。

IDEリファクタリング機能はいいぞ!

14.4 IDEリファクタリング機能、直近の私の登壇での主張と重なりました!🙌

ミノ駆動本はIntelliJ IDEA、nikkieはVS Codeという違いはありますが、ツールにサポートしてもらえるリファクタリングはとても助かります。
そして、ツールを使うことで動作コストが下がり、リファクタリング常中に至れるかなと私は考えています。

nikkie用 予習事項リスト

  • [ ] 自分だったら14.2のコードをどうリファクタリングするか考えたい
  • [ ] 14.2を写経してミノ駆動さんのやり方を体験したい
  • [ ] 14.3で紹介された『レガシーコード改善ガイド』の該当箇所は読みたいな
  • [ ] 14.1のコード、14.2のやり方の練習としてもいいかも
  • [ ] 『リファクタリング』のテクニック(全部は無理だろうけど)いくつか確認したい
  • [ ] ミノ駆動さんのリファクタリングの記事、いくつか読みたいな

終わりに

ミノ駆動本 14章「リファクタリング」を読書会予習として読み始めたことを共有しました。
リファクタリング」が完全に理解できる(と思われる)この章、ソフトウェアエンジニアとして働き出した頃に読みたかったですね〜

今回の記事は「予習に着手!」ということで、これまでの読書ログより小さめです。
直近ちょっとエントリ執筆時間が微妙で、毎日に挑戦しつつも、エントリを小さくして数回で1つの内容のようになるかもしれません。

P.S. ひな祭り(3/3)はミノ駆動本_読書py!

Python使い視点でミノ駆動本を読む、みんなのアウトプット中心の読書会、リファクタリング章の回です!
リファクタリングをこれからやっていきたい方や経験豊富な方までどんな立場の方も大歓迎!
ぜひぜひお気軽にお越しください〜

ふと思ったのですが、Pythonだからこそ可能なリファクタリングテクニックってあるのかな?(書いてあるとしたら『Effective Python』とか?)