Slide 1

Slide 1 text

ちょうぜつ本の紹介 (クリーンアーキテクチャとパッケージ原則) Your Forkwell Library 一冊一会〜技術書の愛を伝えるL T大会〜 鈴木まー

Slide 2

Slide 2 text

© 2023 • Azit Inc. CREW E xpressのという配送サービスを 開発をしているプログラマ 書いた記事 安全にプロダクト品質を改善できる!ほぼ100%のテストカバレッジがある世界 理解するのが難しいシステムをドメインモデリングによって生産性をあげた話 (Qiitaのミノ駆動さん QiitaEngineerFesta_設計 のコンテスト受賞) 自己紹介 鈴木まー 主な職務 複雑なシステムの開発をRailsの開発をDDDやモジ ュ ラーモノリスを使って開発しやすくする 設計上問題となっているところの改善リファクタ

Slide 3

Slide 3 text

© 2023 • Azit Inc. 今日紹介する本

Slide 4

Slide 4 text

© 2023 • Azit Inc. 「趣味でPHPを使ってJavaのバイトコードを動かす若き女性プログラ マー」として知られるめもりーさんに触発され、 そこからキャラクターを考えて1コママンガを作成し そのタイトルを「ちょうぜつエンジニアめもりーちゃん」 と名付けました。 そして、このマンガの「ちょうぜつ」が 本のタイトルにも採用されています 。 詳しくは Y ouT ubeで フォークウェル ちょうぜつで検索 ちょうぜつとは

Slide 5

Slide 5 text

© 2023 • Azit Inc. 他の職種から見るとよくわからないけど 本職のITエンジニアは広く知れ渡っているもの ちょうぜつ本的に言うと広く知れ渡っている SOLIDやデザインパターンなどの設計 ちょうぜつとは

Slide 6

Slide 6 text

© 2023 • Azit Inc. そもそも設計をなんで 勉強をする必要があるのか

Slide 7

Slide 7 text

© 2023 • Azit Inc. そもそも設計をなんで 勉強をする必要があるのか 設計スキルをあげるのは開発している ソフトウェアの機能拡張や保守性を向上するために 設計スキルを上げる必要がある
 それによりビジネスの進展とプロダクトの進展を 合わせることができるようになり
 競合差別化ができるようになる

Slide 8

Slide 8 text

© 2023 • Azit Inc. 設計スキルが低いと

Slide 9

Slide 9 text

© 2023 • Azit Inc. この本をおすすめする理由 ちょうぜつ本は設計に関することを 幅広く解説している 読んで実践をしていけば 設計スキルを高く上げることができる

Slide 10

Slide 10 text

© 2023 • Azit Inc. 設計スキルが低いと 設計スキルが低いと、ソフトウェアはしばしば複雑で保守が困難にな り、新しい機能の追加が難しくなってしまう それにより良い機能を考えても実装をすることができずに
 プロダクトの価値をあげることができない

Slide 11

Slide 11 text

本の各章 クリーンアーキテクチャ パッケージ原則 オブジェクト指向 UML SOLID テスト駆動開発 依存性注入 デザインパターン アジャイル開発

Slide 12

Slide 12 text

今回の登壇で説明する内容 クリーンアーキテクチャ パッケージ原則 設計のスキルを上げるときに 重要な概念だけど勘違いしていたり 覚えていない人が多いもの

Slide 13

Slide 13 text

© 2023 • Azit Inc. クリーンア ーキテクチャー

Slide 14

Slide 14 text

© 2023 • Azit Inc. この図になるように考えなしで実装をすることではない クリーンア ーキテクチャー

Slide 15

Slide 15 text

© 2023 • Azit Inc. クリーンア ーキテクチャー ソフトウェアはそれぞれ異なる問題解決をするためのもの そのため既製フレームワークをただ盲目的に使用をするのではなくて それぞれのソフトウェアを解決する問題に適したア ーキテクチャーを 考えていく必要がある クリーンア ーキテクチャの考えはそれぞれ異なる問題を解決するため の独自ソフトウェアのア ーキテクチャを 設計するための考えかた(フレームワーク)

Slide 16

Slide 16 text

© 2023 • Azit Inc. クリーンア ーキテクチャー この章を読むことで実際にクリーンア ーキテクチャにしていくための ことを以下のキーワードを元に解説をしています 変更の影響範囲を絞って思考負荷を低くする ア ーキテクチャーを整理しやすくするために高凝集度、低結合にする 依存野向を各レイヤーの安定度 ドメインモデルというソフトウェアのコアとなる部分を安定する

Slide 17

Slide 17 text

© 2023 • Azit Inc. クリーンア ーキテクチャー この章を読むことで 変更の影響範囲を絞って思考負荷を低くする ア ーキテクチャーを整理しやすくするために高凝集度、低結合にする 依存野向を各レイヤーの安定度 ドメインモデルというソフトウェアのコアとなる部分を安定する を理解できるようになる それによって 先程の図を理解できるようになる

Slide 18

Slide 18 text

© 2023 • Azit Inc. パッケージ原則

Slide 19

Slide 19 text

© 2023 • Azit Inc. パッケージ(モジ ュール)間で依存関係を 持たないように設計をして
 パッケージ単位の再利用性 を高めるための考え方 この原則にそうことで パッケージでの開発もしやすくなる パッケージ原則

Slide 20

Slide 20 text

© 2023 • Azit Inc. そもそも 再利用とは? フレームワークとかライブラリーはいろんな人が利用するので 再利用をするけど プロダクトではコードを再利用しないのでは パッケージ原則

Slide 21

Slide 21 text

© 2023 • Azit Inc. そもそも 再利用とは? フレームワークとかライブラリーはいろんな人が利用するので 利用をするけど プロダクトではコードを再利用しないのでは 再利用性があると他のコードとの依存部分をなくして 独立してマイクロサービスとして 移植しやすくすること ここは本では書いていない部分 パッケージ原則

Slide 22

Slide 22 text

© 2023 • Azit Inc. 原則を守ると どういうメリットがあるの? パッケージ原則

Slide 23

Slide 23 text

Railsなどのフレームワークに考えなしで modelsデ ィレクトリにクラスを作成すると以下のようになる パッケージ原則

Slide 24

Slide 24 text

パッケージ原則に従って設計をすると以下のように理解しやすくなる パッケージ原則

Slide 25

Slide 25 text

パッケージ設計がよくなると 他のコードとの依存部分をなくして 独立してマイクロサービスとして 移植しやすくなる パッケージ原則

Slide 26

Slide 26 text

© 2023 • Azit Inc. パッケージ原則は以下のものがある 再利用・リリース等価の原則 ReuseReleaseEquivalentPrinciple(REP) 全再利用の原則 CommonReusePrinciple(CRP) 閉鎖性共通の原則 CommonClosurePrinciple(CCP) 非循環依存関係の原則“ AcyclicDependenciesPrinciple(ADP) 安定依存の原則“StableDependenciesPrinciple(SDP) 安定度・抽象度等価の原則“StableAbstractionsPrinciple(SAP) パッケージ原則

Slide 27

Slide 27 text

© 2023 • Azit Inc. 今回はちょうぜつ本で解説している中からとっつきづらい 再利用・リリース等価の原則 ReuseReleaseEquivalentPrinciple(REP) 全再利用の原則 CommonReusePrinciple(CRP) 閉鎖性共通の原則 CommonClosurePrinciple(CCP) を説明します パッケージ原則

Slide 28

Slide 28 text

© 2023 • Azit Inc. 再利用・リリース等価の原則 ReuseReleaseEquivalentPrinciple(REP) コードを適切な単位に区分し、各単位を公開ライブラリのように明確に バージョン管理しリリースします

 これにより、マイクロサービスなどのようにコードベースからわける場合 でも各サービスが独立して動作し、 他のサービスとの連携もスムーズに行えるようになります 。 パッケージ原則

Slide 29

Slide 29 text

© 2023 • Azit Inc. 全再利用の原則 CommonReusePrinciple(CRP) パッケージにおける単一責務のようなものと捉えることができ 、 特定の目的を達成するために関連するクラスを 一緒にグルー プ化することを推奨しています 。 この原則に従うことで、パッケージ内のクラスは共通の目的に従事し、 同じコンテキストで再利用される可能性が高くなります 。 パッケージ原則

Slide 30

Slide 30 text

© 2023 • Azit Inc. 閉鎖性共通の原則 CommonClosurePrinciple(CCP) CCPとは一つの機能を変更する場合はそれに関連しているパッケージ だけ変更してその他は影響を受けないようにする オー プンクローズの考えと類似している部分がある パッケージ原則

Slide 31

Slide 31 text

© 2023 • Azit Inc. なんとなくパッケージ原則の原則や 原則に沿って設計を するとよさそだけど 再利用とか閉鎖性とか難しそう パッケージ原則

Slide 32

Slide 32 text

© 2023 • Azit Inc. パッケージ原則に沿って設計を するとよさそだけど 再利用とか閉鎖性とか難しそう ちょうぜつ本で わかりやすく解説している パッケージ原則

Slide 33

Slide 33 text

© 2023 • Azit Inc. 時間の都合上クリーンア ーキテクチャとパッ ケージ原則しか説明できなかったですが 他の章もすごい勉強になるので オブジェクト指向プログラミング/設計につい て理解できるようになります!! 補足

Slide 34

Slide 34 text

© 2023 • Azit Inc. まとめ

Slide 35

Slide 35 text

© 2023 • Azit Inc. クリーンア ーキテクチャー ソフトウェア開発において、各問題に 最適なア ーキテクチャを検討することが重要 クリーンア ーキテクチャは、このような個別の課題に応じたソフト ウェアア ーキテクチャを考案するための枠組みを提供します

Slide 36

Slide 36 text

パッケージ設計がよくなると他のコードとの依存部分を なくして独立してマイクロサービスとして 移植しやすくなる パッケージ原則 before after

Slide 37

Slide 37 text

© 2023 • Azit Inc. Azitではちょうぜつ本で書いてあることを 普段から実践しています 今使用している言語に関係なく オブジェクト指向開発に興味を持っている人を 絶賛募集中です WE ARE HIRING!!

Slide 38

Slide 38 text

© 2023 • Azit Inc. ご清聴ありがとうございました!!