READYFOR Tech Blog

READYFOR のエンジニアブログ

OOCにランチスポンサーとして登壇してきました! #ooc_2020

こんにちは、READYFORでVP of Engineeringをしているいとひろです。

先日2020年2月16日(日)に開催されたObjected-Oriented Conferenceにて、ランチスポンサーとして登壇してきました。

伊藤による発表の様子

ランチセッションでは、「READYFORにおける複雑なドメインとレガシーシステムとの戦い方」 と題してお話ししました。

今回のブログでは、こちらの発表の要点をスライドに併せてお伝えできればと思います。


我々は、「誰もがやりたいことを実現できる世の中を作る」というビジョンのもと、「想いの乗ったお金の流れを増やす」というミッションを持ってサービス開発に挑んでいます。

READYFORのVision・Mission


READYFORは2011年に日本で初めてのクラウドファンディングサービスとして開始以来、約9年間サービス運営をしてきています。

READYFORのクラウドファンディング


そして、昨年のリブランディング/CIリニューアルを経て、クラウドファンディングの枠をこえた「想いをつなぐ金融機関へ」の変化を遂げようというチャレンジの真っ最中です。

READYFORステートメント


では、本セッションの題名にあるREADYFORにおける「複雑なドメイン」とは一体なんなのでしょうか。

READYFORにおける複雑なドメインとは


READYFORのクラウドファンディングサイトを覗いてみると、一見普通のWebサービスのように見えます。どこにドメインの複雑さが隠れているのでしょうか。

READYFORのクラウドファンディング


ここでは、トップページに複数回現れる「プロジェクト」という概念を起点に追ってみましょう。

READYFORのクラウドファンディングのプロジェクト


READYFORのWebサイトを訪れるユーザーのペルソナとしては、大きく分けて「プロジェクト実行者」と「プロジェクト支援者」がいます。

実行者がプロジェクトを始めてから、支援者がプロジェクトを探して支援するまでの、「プロジェクト」のライフサイクルは、Webサイトの裏側に潜む「READYFORシステム」の中に存在しています。(正確にはプロジェクトを探して支援した後にもライフサイクルは続きますが、ここでは簡単のため省略しています)

プロジェクトのライフサイクル


「READYFORシステム」の中身はさまざまな条件に基づく状態遷移を持つワークフローが複雑に絡み合っており、BPMNと呼ばれるモデリング記法で可視化を試みてもなかなかすぐに理解するのは難しいものになっています。

「READYFORシステム」の中身は...?


「プロジェクト」という概念は、READYFORのシステム上でさまざまなコンテキストで扱われます。

「プロジェクト」をめぐるさまざまなコンテキスト


READYFORはサービス開始以来約9年間運営し続けており、「プロジェクトという概念」がさまざまなコンテキストで少しずつ育った結果、

9年間の歴史


「プロジェクトという概念」は3700行に及ぶ、巨大なモデルとして成長しました。

3700行の巨大なモデル


こういった巨大モデルが育ってしまうケースはよく聞く話かなと思いますが、こちらのスライドに挙げているような問題点が挙げられます。

巨大モデルのつらみ


正しい責務分割をするための設計の前段階として、ドメイン駆動設計(DDD)でいうところの「境界づけられたコンテキスト」という概念があります。

境界づけられたコンテキストを理解する


READYFORは現在モノリシックなRuby on Railsのサービスとして実装されていますが、コード上には現れていない、本質的に存在しているであろう境界づけられたコンテキストを理解するために、大きく分けてSoE(System of Engagement)、SoC(System of Control)、SoR(System of Record)の3つの枠の中に当てはまるコンテキストに分けて整理していこうと考えています。

プロジェクトモデルの責務の整理


ここで少し横道にそれます。

SoEやSoRはアーキテクチャー設計をする上でよく知られている概念ですが、SoCは聞きなれないかと思います。実際Chatworkのかとじゅんさんからも以下ような疑問をいただき、Twitterのリプライで補足させていただいたのでご参照ください。

さて、境界づけられたコンテキストを整理していくことで、プロジェクトモデルの責務分割を進めていくための前準備はできそうです。

プロジェクトモデルの責務分割


しかしながら、スタートアップにつきものですが、開発リソースは限られています。われわれは「想いの乗ったお金の流れを増やす」ための新規開発をしていきたいわけなのですが、今このようなプロジェクトモデルの責務分割を進めるためのコストを支払う必要があるのでしょうか?

どうやって進める?


そこで、ビジネス観点としてのコストベネフィットを説明するために、「技術的負債」という概念の説明を試みます。

技術的負債の説明を試みる


「技術的負債」の概念は、もともとウォード・カニンガムリファクタリングの概念を上司に説明するために導入した概念です 。

この概念を拡張して、技術的負債をバランスシートで表現すると、「ソフトウェアの価値」として表層に現れるものと「技術的負債」というエンジニアにしか理解しがたい概念を説明するのに役立つと考えました。

バランスシートのアナロジーとして説明する技術的負債


上のバランスシートで「ソフトウェアとしての価値」の一部として組み込まれているように、「技術的負債」は必ずしも絶対悪ではないということは理解しておかなければいけません。

われわれが「技術的負債」と呼んでいるものも、READYFORの歴代エンジニアたちがその時々でベストを尽くした汗と涙の結晶なので、敬意と感謝の念を持って対処していきたいと思っています。

技術的負債は絶対悪ではない


大事なのは「技術的負債」「技術的純資産」の特性を理解することです。

特性を理解するのが大事


「技術的負債」に比べて「技術的純資産」が多い場合、最初に生み出すソフトウェアの価値は比較的小さくなりますが、時間軸に沿っての成長のスピードは大きくなります。

技術的純資産が多い場合の成長速度


対して、「技術的純資産」に比べて「技術的負債」が多い場合には、初期に生み出す価値は大きくすることが可能ですが、時間軸に沿っての成長スピードは逓減していってしまいます。

技術的負債が多い場合の成長速度


では、技術的負債が貯まってしまった場合には一体どうすれば良いのでしょうか。

どうすればよいのか


そこで、リファクタリングという概念が登場します。

リファクタリングという概念


リファクタリングは、「ソフトウェアの価値」を変化させることなく、「技術的負債」を返済して「技術的純資産」に変換することに例えることができます。これによって、その後の開発スピードに加速をつけることができます。

リファクタリングという概念の説明


つまり、今後のスピーディーな成長を支えるためにも、リファクタリングは非常に重要な戦略の一つとなっていきます。

READYFORでは複雑なドメインを扱うため、ドメインエキスパートとの対話を大切にする ドメイン駆動設計 をリファクタリングの軸に添えたいと思っています。

リファクタリングの軸に添えるのはドメイン駆動設計


さて、READYFORでは非エンジニアがBPMNのモデリングツールを駆使して業務ワークフローを可視化するなど、エンジニアとドメインエキスパートが対話できる土壌は育っています。

ドメインエキスパートと対話できる土壌は育っている


あとは、一緒に推し進めていく仲間が必要です。

仲間が必要


このセッションでは、戦術的設計や実装など、詳細の話はしませんでした。

詳細の話はしませんでした


なぜなら、当日セッションを聴いている方に、そして今このブログを読んでいる あなた に事例をつくっていっていただきたいから。

あなたに事例をつくっていただきたい


ということで、READYFORでは複雑なドメインの再設計とリファクタリングを一緒に推し進めてくれる仲間を大々々募集しています。

仲間を大募集しています


という話をしてきました🤗

楽しんでいただけたら嬉しいです。


セッションでもお伝えしたように、READYFORでは各種ポジションで エンジニア大募集中 なので、興味を持った方はぜひご応募ください。

新しいお金の流れを作る、リードバックエンドエンジニア募集! - READYFOR株式会社のWebエンジニアの求人 - Wantedly

新たな資金流通エコシステムの基盤をつくる、SoRエンジニア募集! - READYFOR株式会社のWebエンジニアの求人 - Wantedly

資金調達の新たなスタンダード、READYFORフロントエンドエンジニア募集 - READYFOR株式会社のWebエンジニアの求人 - Wantedly

急成長中のベンチャーで品質管理をお任せする、一人目のQAエンジニア募集! - READYFOR株式会社のWebエンジニアの求人 - Wantedly

スライドはこちら

当日のセッションの様子はこちらのTogetterにまとめられています。

togetter.com


Object-Oriented Conferenceは、最初から最後まで非常に興味深いセッションが目白押しで、非常に密度の濃いイベントでした。運営の皆さま、登壇者の皆さま、素敵な1日を本当にありがとうございました!

READYFORメンバー