Slide 1

Slide 1 text

DDDにどう立ち向かう? リファクタリングのあれこれ 2022/09/29 株式会社Voicy 灘脇裕一 (@natacoon)

Slide 2

Slide 2 text

自己紹介 灘脇 裕一 Backend Engineer 機能開発チームリーダー スクラムマスター 2012.04 - HRTech 2020.07 - Voicy 本日はよろしくお願いします! @natacoon 好きなモノ: 服とねことスプラトゥーン 株式会社Voicy

Slide 3

Slide 3 text

本日のアジェンダ 影響範囲への意識を極力なくす 1 2 リファクタリングすべきはなにか

Slide 4

Slide 4 text

Voicy

Slide 5

Slide 5 text

Voicy 声で人の視界を広げ、ワクワクする社会へ。 たのしい声。せつない声。くやしい声。うれしい声。
 ここに来れば、パーソナリティは本音を語ることができ、リス ナーは本音を聞くことができる。
 
 そんな、声のプラットフォームを築くことで、人の視界は広が り、ワクワクする社会が生まれていく。2016年の創業以来、私 たちのこの想いは変わることはありません。
 
 そのために、これからもVoicyは進化し続けます。

Slide 6

Slide 6 text

Voicy プロダクト

Slide 7

Slide 7 text

本日のアジェンダ 影響範囲への意識を極力なくす 1 2 リファクタリングすべきはなにか

Slide 8

Slide 8 text

前段 - もともとDDDは全くやっておらず、手続き的なコードが増えてきた - 以前はプロダクトに備えている機能はシンプルだったので、問題はなかった - が、徐々にプロダクト・開発組織も大きくなり始めたことにより、システムが実現しようと していることがコードから読み取りづらくなってきていた - 会社全体で概念レベルの理解がズレはじめていた ①のスライド ②のスライド

Slide 9

Slide 9 text

前段 今日の内容は Voicyで今後どうしていこうかを私が模索している 構想の途中経過を切り取って話してみる という回です

Slide 10

Slide 10 text

リファクタリングすべきはなにか

Slide 11

Slide 11 text

リファクタリングすべきはなにか ユーザーストーリーマッピング ユースケース ドメインモデル(概念レベル) モデリングはPdM、デザイナーとともにやってきている

Slide 12

Slide 12 text

リファクタリングすべきはなにか よーし、じゃあリファクタリングするぞ!

Slide 13

Slide 13 text

リファクタリングすべきはなにか どこから・・・?

Slide 14

Slide 14 text

リファクタリングすべきはなにか そもそもリファクタリングって? - マイクロリファクタリング - パターン指向リファクタリング - ドメインのリファクタリング(より深いモデルへのリファクタリング) エリック・エヴァンスのドメイン駆動設計 第3部 より深い洞察へ向かうリファクタリ ング より

Slide 15

Slide 15 text

リファクタリングすべきはなにか マイクロリファクタリング、パターン指向リファクタリングは技術的な観点から設計 の質を高める コードが何をしているかを理解しやすくする

Slide 16

Slide 16 text

リファクタリングすべきはなにか ドメインのリファクタリングは、ドメインに対する深い洞察をモデルに反映させる コードがなぜそれを行うのかをモデルに適用し、コードがなぜそうなっているのかを 明らかにする

Slide 17

Slide 17 text

リファクタリングすべきはなにか What → マイクロリファクタリング、パターン指向リファクタリング Why → ドメインのリファクタリング

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

リファクタリングすべきはなにか DDDを駆動している原則 - コアドメインに集中すること - ドメインの実装者とソフトウェアの実践者による創造的な共同作業を通じて、モ デルを探求すること - めいじてきな境界づけられたコンテキストの内部で、ユビキタス言語を語ること

Slide 24

Slide 24 text

リファクタリングすべきはなにか 極端にいえば、コアドメインさえモデルに準じた実装がされ、変更容易性を担保でき れば、事業価値を高める体質に変化させることはできる

Slide 25

Slide 25 text

リファクタリングすべきはなにか 書ききれなかったこと(ゴメンナサイ🙏) - コンテキストマップを作成してコアドメインを探す

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

影響範囲への意識を極力なくす リファクタリングとは、コンピュータプログラミングにおいて、プログラムの外部か ら見た動作を変えずにソースコードの内部構造を整理することである。 Wikipedia より

Slide 31

Slide 31 text

影響範囲への意識を極力なくす つまり、既存コードすべてに手を加える必要はなく、既存を捨てつつ置き換えること もある(当たり前だけども) =捨て去るのはメソッド、クラス、はたまたユースケース実装ごとなど、置き換える 単位は様々 (マイクロサービスへの移行なども、大きな見方をすればリファクタリングの一部と 考えられる)

Slide 32

Slide 32 text

影響範囲への意識を極力なくす 例えば・・・ APIインターフェースを変えないけど、内部のアーキテクチャから見直したい

Slide 33

Slide 33 text

影響範囲への意識を極力なくす アプリケーションレイヤ以降を置き換えてみる

Slide 34

Slide 34 text

影響範囲への意識を極力なくす アプリケーション層のユースケース(サービス)ごと新規に実装し、プレゼンテー ション層からの呼び出しを切り替える (=既存コードを残したままにする)

Slide 35

Slide 35 text

影響範囲への意識を極力なくす いろんな粒度でのストラングラー(アプリケーション)を作っていく ビッグバンリライトを避けてリスクを軽減する マイクロサービスパターン Chapter13 1.2 モノリスを絞め殺す より

Slide 36

Slide 36 text

影響範囲への意識を極力なくす 「ビッグバンリライトが生み出すのはビッグバンだけ」 マーチン・ファウラー

Slide 37

Slide 37 text

影響範囲への意識を極力なくす デメリット - 捨てる予定のコードに新規機能が実装されてしまうとそのまま負債になる - いずれ再実装することになるので、開発にかける時間ももったいない

Slide 38

Slide 38 text

影響範囲への意識を極力なくす Kubernetes上に各種サービスが稼働してる おまけ: デプロイのはなし

Slide 39

Slide 39 text

影響範囲への意識を極力なくす カナリアリリースとして、1Podだけ既存のnamespaceのdeployment管理下にリファクタリング 後の呼び出しに変更した実装を適用したPodを配置する おまけ: デプロイのはなし リファクタ版

Slide 40

Slide 40 text

影響範囲への意識を極力なくす エラーが一定以上起こるようであればPodを取り除く おまけ: デプロイのはなし リファクタ版

Slide 41

Slide 41 text

まとめ - コアドメインを見つけて(定義して)集中しよう! - 一定以上大きいリファクタリングはストラングラーパターンを使って、既存 コードへの大きい変更を避けてみよう!

Slide 42

Slide 42 text

参考

Slide 43

Slide 43 text

お知らせ Meetyでカジュアル面談をやってます! 転職関係ない話もウェルカムなのでお話しましょう URL: https://meety.net/matches/KjRwJrKGDbKO Voicy ダウンロードリンク