Railsでクリーンアーキテクチャを考えてきた
by
suzuki masayuki
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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. 終わり ご清聴ありがとう ございました