Slide 1

Slide 1 text

Railsでクリーンアーキテクチャ を考えてきた 設計ナイト2024 鈴木まー

Slide 2

Slide 2 text

© 2024 • Azit Inc. Railsを使用しながらシステムの 複雑性をさげるために レイヤードアーキテクチャ、 ドメインモデリング(戦略的DDD), モジュラーモノリス を使った設計を工夫して 複雑なシステムに対応をしている 自己紹介 鈴木まー Object-Oriented Conference の動画編集者 Object-Oriented Conference の動画編集者

Slide 3

Slide 3 text

© 2024 • Azit Inc. 話すこと

Slide 4

Slide 4 text

© 2024 • Azit Inc. 複雑なシステムを開発するために クリーンアーキテクチャ的な設計の アイディア取り入れてシステム開発 をしてきた開発の話をします

Slide 5

Slide 5 text

© 2024 • Azit Inc. 話の前提認識を持ってもらう もらうために 開発しているシステムの CREWExpressの少しだけ紹介

Slide 6

Slide 6 text

© 2024 • Azit Inc. マーケットプレイス Wolt社などの複数のデリバリー会社と 連携をし配送をしてもらう 輸送管理システム(TMS) クライアントの会社の社員・アルバイトの人の配送 を効率的に配送計画を立てる コアドメイン

Slide 7

Slide 7 text

© 2024 • Azit Inc. エンタプライズに特化したSaaS とくに大企業に対して 配送のDX化をコンサルから おこなう ターゲットとしている層

Slide 8

Slide 8 text

© 2024 • Azit Inc. 大企業の配送DX化のコンサルは その会社にあった 個別開発が求められるため システムの柔軟性が求められる

Slide 9

Slide 9 text

© 2024 • Azit Inc. 配送に関するドメイン知識は エンジニアはもっていない 複数のデリバリーサービスと連携したり、 配送計画などの機能面でも複雑 個別開発はクライアントと具体的な話をするまで はなにをするかがわからない 複雑さが高い

Slide 10

Slide 10 text

© 2024 • Azit Inc. Railsを使って開発をしているが Railsの一般的な開発手法である RailsWayだけでは不十分 複雑さへの対応

Slide 11

Slide 11 text

© 2024 • Azit Inc. 複雑さへの対応 クリーンアーキテクチャな どの設計手法を取り入れる ことが必須

Slide 12

Slide 12 text

© 2024 • Azit Inc. ここで話すクリーンアーキテクチャ Railsではインターフェースが存在しないので クリーンアーキテクチャの設計デザインを そのまま採用することはできないけど クリーンアーキテクチャの 考えは参考になるはず

Slide 13

Slide 13 text

© 2024 • Azit Inc. ここで話すクリーンアーキテクチャ クリーンアーキテクチャの書籍で 著者アンクルボブはの “クリーンアーキテクチャ 4つの円だけ?” というところで次のことを言っている

Slide 14

Slide 14 text

© 2024 • Azit Inc. ここで話すクリーンアーキテクチャ 依存性のルールは常に適用されます。 ソースコードの依存性は、常に内側に向けるべきです。 内側に近づくほど、抽象度と方針のレベルは高まります。 外側には具体的な詳細が存在し、 内側にはソフトウェアの抽象化された 高位レベルの方針がカプセル化されます。 最も内側は、最も一般的で高位レベルのものになります。

Slide 15

Slide 15 text

© 2024 • Azit Inc. ここで話すクリーンアーキテクチャ 依存性を常に意識する ソースコードの依存性は、 内側に近づくほど、 抽象度が高くなる

Slide 16

Slide 16 text

© 2024 • Azit Inc. ここで話すクリーンアーキテクチャ 内側に近づくほど、 抽象度を高くする 不必要な依存性を生まないこと これならRailsでもできそう

Slide 17

Slide 17 text

© 2024 • Azit Inc. ここで話すクリーンアーキテクチャ ただ、 開発した当時はRubyでインターフェー スを実装する手段がなかったので依存 性を正確に逆転はできない

Slide 18

Slide 18 text

© 2024 • Azit Inc. ここで話すクリーンアーキテクチャ 言語やフレームワークの仕組み上 できないのは あきらめる

Slide 19

Slide 19 text

© 2024 • Azit Inc. そのまま実装できなくても システムの複雑さを下げる ことができるのであれば、積極的に 取り入れる ここで話すクリーンアーキテクチャ

Slide 20

Slide 20 text

© 2024 • Azit Inc. チームで話し合って 自分たちのシステムにあった クリーンアーキテクチャを設計した 依存性を常に適用する 内側が一番抽象度が高い 自分たちのクリーンアーキテクチャ

Slide 21

Slide 21 text

© 2024 • Azit Inc. MVCにユースケース層を追加した DDDのアプリケーションサービスに似ている ユースケース層はユースケース記述をコードに 落とし込む ユースケース層は抽象度が一番高くする 自分たちのクリーンアーキテクチャ

Slide 22

Slide 22 text

© 2024 • Azit Inc. ユースケース記述のサンプル システムはユーザーが選択した支払い方法を取得する。 システムは支払い情報(クレジットカード情報、住所情報など)を取得する。 システム支払処理をする 支払いが成功した場合:    システムは在庫を更新する。    システムはユーザーの購入履歴を更新する。 支払いが失敗した場合:    システムはユーザーにエラーメッセージを送信する 自分たちのクリーンアーキテクチャ

Slide 23

Slide 23 text

© 2024 • Azit Inc. public void processPurchase() { retrievePaymentMethod(); retrievePaymentInformation(); if (processPayment()) { updateInventory(); updatePurchaseHistory(); } else { sendErrorMessage(); } さっきのユースケース 記述をユースケースクラス にしたもの

Slide 24

Slide 24 text

© 2024 • Azit Inc. モデルはユースケースからしか呼ばれない コントローラーはユースケースのクラスを実行 するだけ ビューはユースケースからコントローラーに渡 されたデータを受け取りそれをJSONにする 自分たちのクリーンアーキテクチャ

Slide 25

Slide 25 text

© 2024 • Azit Inc. U M C V 自分たちのクリーンアーキテクチャ

Slide 26

Slide 26 text

© 2024 • Azit Inc. ユースケース層があることで 密結合MVCがそれぞれ独立している ほかの層はユースケース層に依存をしていて ユースケース層に対してだけやりとりをする 自分たちのクリーンアーキテクチャ

Slide 27

Slide 27 text

© 2024 • Azit Inc. 最近までRubyにはインターフェースは存 在しないので依存関係逆転はできていな いけどそこは諦めていた 自分たちのクリーンアーキテクチャ

Slide 28

Slide 28 text

© 2024 • Azit Inc. 最近チームでRubyで型を記述でき インターフェースも定義 できるRBSを導入していて 依存関係逆転をできるように挑戦している 自分たちのクリーンアーキテクチャ

Slide 29

Slide 29 text

© 2024 • Azit Inc. 複雑性が高いシステムを開発している場合 はクリーンアーキテクチャに限らず チームで話し合いながらシステムの複雑さ を下げることができる考えを取り入れる ドメインモデリングなど まとめ

Slide 30

Slide 30 text

© 2024 • Azit Inc. 複雑性が高い配送のDX化コンサルを大企業に大して支援をお こない社会的意義のある開発をしています Railsを使って設計原則を適応していき 複雑なシステムを開発したいエンジニアを絶賛募集中 “Azit 採用”で検索!! we are hiring

Slide 31

Slide 31 text

© 2024 • Azit Inc. Object-Oriented Conference からの告知

Slide 32

Slide 32 text

© 2024 • Azit Inc. Object-Oriented Conferenceの アーカイブ動画を来週から 平日の毎日投稿をします すべての登壇が非常に勉強になるので設計につ いて勉強ができます 告知

Slide 33

Slide 33 text

© 2024 • Azit Inc. 告知

Slide 34

Slide 34 text

© 2024 • Azit Inc. 終わり ご清聴ありがとう ございました