Upgrade to Pro — share decks privately, control downloads, hide ads and more …

モジュラモノリス導入から4年間の総括:アーキテクチャと組織の相互作用について / Archi...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

モジュラモノリス導入から4年間の総括:アーキテクチャと組織の相互作用について / Architecture and Organizational Interaction

4年前、BASEはモジュラモノリスという選択をしました。今では開発のほとんどが新アーキテクチャ上で行われ、リアーキテクチャの大枠はある程度達成されました。本セッションでは、その当時の意思決定に対する「4年越しの答え合わせ」を試みます。

アーキテクチャの成否を数値的に評価することは難しく、また立場上、生々しい事例の全てを詳細に語ることはできません。しかし、アーキテクチャ上にモジュールという「自治のための箱庭」を用意し、そこをメンテナンスする専任チームを組織図上に配置し、4年間運用してみた先にある現実のなかで「アーキテクチャとそれが組織に与える影響」については、多くの知見が得られました。

これらを振り返り、最終的に「モジュラモノリスアーキテクチャは技術だけでは駆動しない」などいくつかの私見に至ったため、それらを述べたいと考えています。疎結合なシステムや、コードの凝集度などの技術的指標だけでなく、組織の力学や人と人との関わりが、いかにシステムに反映されるかをお話ししようと思います。

Avatar for Satoshi Kawashima

Satoshi Kawashima

March 21, 2026
Tweet

More Decks by Satoshi Kawashima

Other Decks in Technology

Transcript

  1. 発表の目的 5 この発表の目的 • 4年間の実践を通して、4年前の意思決定の「答え合わせ」を行う • 設計論と現実の間で発生する摩擦の正体について、組織とアーキテクチャの間に働く「力 学」の分析という形で、一個人の見解を述べる この発表のアプローチ •

    単一事例(BASE)を、一般化された書籍の概念というレンズを通して解釈し、1事例の中 にある構造の一般化を試みる • 4年間の間に発生した問題から、そもそもアーキテクチャが解決しなきゃいけない課題は なんだったのかを抽出し、その上で答え合わせを行う ◦ ※ 「過度な一般化」と受け取られうることは自覚しています。   持ち帰ってほしいこと • 理論と現実の間にある差分の正体を正確に掴むことで、各自の所属する企業の組織図・ アーキテクチャの助けにしてほしい
  2. クリーンアーキテクチャ+モジュラモノリスの合わせ技 Infrastructure Interface Use Case Domain クリーンアーキテクチャ + 商品 Catalog

    注文 Order 決済 Payment ユーザー User 配送 Shipping Shop 管理 プロモ Promo 決算 Settlement … モジュラモノリス(モジュール群) 各モジュールはクリーンアーキテクチャの構造を持つ。 15 ※図はイメージです
  3. 1モジュール=1境界づけられたコンテキスト モジュール(コード上の分割単位) = 境界づけられたコンテキスト(概念上の境 界) Catalog モジュール = 商品カタログコンテキスト Order

    モジュール = 注文コンテキスト Payment モジュール = 決済コンテキスト User モジュール = ユーザーコンテキスト モジュール境界 = ドメインモデルの境界。1モジュールが1つの境界づけられたコンテキストを持つ。 16 ※図はイメージです
  4. 組織の変遷——3つのフェーズ 〜2024年 目的別組織 チームA Catalog/Order チームB Payment/User チームC Shipping/… 固定メンバー・固定ドメイン

    モジュールを各チームが占有 2024年〜 横断開発型組織 +コアドメインチーム 横断チームA 横断チームB コアドメインチーム 全チームが全ドメインを横断 コアドメインのみ専門チームが守る 2026年〜 セクション制組織 セクションA 専門チーム セクションB 専門チーム セクションC 専門チーム 各セクションに専門チーム 20 ※図はイメージです
  5. 目的別組織の廃止 いくつかの問題が積み重なったため • サイロ化 ◦ 担当ドメインへの専門性が高まる反面、視野の狭まり・他ドメインへの無関心化・越境しづらさが生まれた •環境への固執 ◦ 固定メンバー・固定ドメインの開発は安定したベロシティには繋がったが、同一環境への固執やマンネリを招 いた

      •プロセス成熟度の上限 ◦ スクラム開発を取り入れ始めた時期でプロセスは一定成熟したが、進化への停滞が見えてきた(80点→100点 が遠い)   •負荷の偏り ◦ 特別忙しいチームとそこまで忙しくないチームが同時に存在している 21
  6. 2024年〜横断機能開発組織の開始 •全てのチームが全てのモジュールを触る、という組織設計 ◦ 全員が担当領域を持たない   •開発PJへのエンジニアの割当を柔軟に行う ◦ 成長への期待も加味した形でのアサイン ◦ マンネリ感の打破

    ◦ 負荷が特定のチームに偏らないように分散 ◦ ただしチーム内部はある程度固定で、一緒に働く顔ぶれをあまり動かさない   •→ デリバリーの速さに注力しつつ、これとは別にコアドメインと呼ばれるモジュールには 占有チームを配置 22
  7. 2026年セクション制へ—— 何が変わったか •コアドメインと呼ぶ範囲を広げて3つとし、それぞれに占有チームを配置 ◦ コアドメインを見る占有チームをそれぞれセクションと呼ぶ ◦ ただしセクションに配置されないチームは存在しないので、実質全チームが何かしらの モジュールを占有している状態 •軸足を「挑戦と機動力」から「専門性と持続性」へと移した  

    各セクションの専門チームの役割 •アンコントローラブルな問い合わせ対応を定常的に減らす •それぞれのドメインでPDCAを回して科学する •「誰に聞けばいいかが自明な体制」の実現   ぱっと見はリアーキテクチャ開始当時に目指していた組織の姿      ——が、実態は少し違う(後半で言及します) 24
  8. 境界づけられたコンテキスト最適 • DDD文脈でのメリット ◦ ドメインモデルの継続的な改善 ▪ ドメインモデルに完成はないので、次々発生する改修の中で一貫性を保ち続けるには継 続的なモデルとコードの見直しが必要 ▪ ドメインモデル自体が占有チームにおけるドメインの「解釈」なので、共有資産化して

    みんなで編集、とかは少し難しい側面もあるかもしれない • マイクロサービス文脈でのメリット ◦ 技術的な意思決定の高速化 ▪ 現場にいる人間が必要なものを一番理解しているはず、という前提の元、現場のチーム が意思決定できる ◦ 運用責任の明確化 ▪ 開発と運用のインセンティブの違いを乗り越えるため、「作った人が運用する(You build it, you run it)」 48
  9. 境界づけられたコンテキスト最適 • 開発と運用はインセンティブが異なり、両者の溝を超えるには「作った人が運用する (You build it, you run it)」必要がある •

    開発は現状を変更する活動であり、運用は現状を安定的に維持する活動であり、両者のイ ンセンティブ構造は決して相容れない ◦ 開発と運用の人間が分かれると合意形成には凄まじいコストがかかるため、外部との調 整を要さずに独自に意思決定し、その運用責任を本人が果たす、という組織的な枠組み が必要になる 49 開発 (現状変更) 運用 (現状維持) 「こうすれば早くリリースできる」 「新しい技術を試したい」 「問題起こったらどうするんだ」 「俺はそんなのメンテナンスできない」
  10. 噛み合わない理由 • 1.多くのビジネスモデルは提供できる人と提供されたい人の価値交換システムである ◦ =「注文」のように両者のコインの裏と表のような概念を扱う必要がある • 2.バリューストリームと境界づけられたコンテキストは世界の切り方が違う ◦ =「注文」のようなコインの裏と表を扱う領域において、アクターに寄った整理と、事 業者に寄った整理で、両者の結果は異なる

    • バリューストリームに寄せる:SellerチームとBuyerチームにシステムが分かれ、両チーム は企画〜リリースまで単独で行えるが、モデル整合性は維持できない • 境界づけられたコンテキストに寄せる:注文コンテキストを占有するチームが発生する が、これは同時にSellerチームとBuyerチームのどちらか、あるいはどちらも単独でリリー スを完遂できない • だから両方に同時に最適化された組織図は成立しない 61
  11. 材料が揃ったので4年前の答え合わせを試みる • バリューストリームに最適化された組織 ◦ ビジネスの手数を最大化することを良しとする思想 ◦ つまり目的不確実性に対するPDCAに最適化された組織と言い換えられる • 境界づけられたコンテキストに最適化された組織 ◦

    ビジネスの整合性の維持を最大化することを良しとする思想 ◦ つまり方法不確実性(の一部)に対するPDCAに最適化された組織と言い換えられる 69 つまりこの2つの対立は 目的不確実性と方法不確実性のPDCAの衝突とも言い換えられる
  12. • (ビジネスモデル次第ではあるが)両方を同時に最大化はできないが、どちらかを完全に 捨てることも難しい ◦ 一致しているのが望ましいことに変わりないし、ほとんどの書籍の主張も同じ ◦ しかしビジネスのコア領域であればあるほど、それはおそらく難しい、というのが本発 表の立場 ▪ コア領域以外なら、案外簡単に一致する

    ▪ 会計SaaSなどの単一アクターにツールを提供するようなビジネスモデルや、コンテン ツ配信・メディア系・SNSなどでも一致するのかもしれない • トレードオフを理解したうえで部分的に採用していく ◦ 顧客価値検証に重きを置かない会社はまず存在しないので、基本的に顧客価値検証を ベースにしながら部分的に分散自律改善を取り入れていく、という考え方 顧客価値検証と分散自律改善は両方を最大化出来ない 77
  13. • 単独での1バリューストリーム完遂を諦める ◦ チーム間調整の発生を許容する ▪ 事前に相談したり、作業の調整をしたり、そのコンテキストの一貫性を損なわないよう な調整作業が出てくる ▪ 予想以上に高コスト •

    CSチームを配置しない境界づけられたコンテキストの自律改善を諦める ◦ モデル整合性・設計の一貫性の担保を諦める ▪ プラットフォームエンジニアリングで作り方を強制するのはある程度代替しうるが、時 間の経過による自律改善はどのみち期待できない ◦ 運用課題の自律改善を諦める ▪ 定常的に発生する問い合わせなどの運用課題の恒久対応をやめて、都度対応する 部分的に取り入れた場合の事象 79
  14. • チーム間調整は仕方なく発生してしまうが「調整の質」を上げて摩擦係数を減らす工夫は 必要 ◦ チーム間APIを定義する ▪ チームトポロジーで言う「インタラクションモード」を明示的に設計する ▪ 調整を非同期化する(決まった手順で依頼を投げれば、非同期で依頼が達成される) ◦

    プラットフォームエンジニアリングで「舗装された道路(PavedRoad)」を用意する ▪ 調整不要の決まり事にしてしまう ▪ ただしあらゆる要件で使える「舗装された道路(PavedRoad)」の用意は不可能で、無 理に使おうとすることで現場が疲弊する、という事象は発生する ◦ 文化を醸成する ▪ 依存を早めに表明する、越境を奨励する、調整に巻き込まれることをマイナスにしな い、良き隣人としての振る舞いを奨励、など • これらがないと「社会性」がより大きく消費されてしまう 「社会性の消費」 80
  15. • ここでの「社会性」とは、会社という社会の中で立ち回る際の、有限の時間的・肉体的・ 精神的なリソースの表現として使っている ◦ チーム間の調整には非手続き的な調整のほうが圧倒的に多い ◦ チーム間APIやドキュメントで定義しきれない「隙間に落ちたボール」を解決する必要が ある ▪ そのため「空気(文脈)を読む」や「社内の状況的に今はこう」や「全体最適の観点で

    はこう」のような対人調整・対組織調整領域が発生する ▪ ここが苦手な人にとって弊社は少し過酷な開発現場だったと思う • 「チーム間調整」「コミュニケーションコスト」という言葉では汲み取れないような、目 には見えない要素を捨象したくなかったため「社会性という不可視の有限リソース」と表 現した • 「社会性の消費」は無ければ無いに越したことはない ◦ 本来生産性に向かうはずだった有限のリソースがただの調整事によって消失する ◦ が、本発表の仮説が当てはまるのであれば、残念ながら難しい 「社会性の消費」 81
  16. • 占有する/しないという、0か1かみたいな極端な定義が原因かと言うと、そうとも言い切 れない • 仮に「占有」ではなく「主担当」くらいにすると、曖昧な責任範囲からさらに「空気を読 む」必要があり、社会性がより消費される ◦ 「空気を読む」のは人に対しても、組織に対しても、何より既存のコードに対しても • 現実的には完全な占有は不可能で、主担当くらいの落とし所くらいにしか出来ないと思う

    が、それによって目には見えない何かがさらに消費されている認識は必要だと思われる ◦ CSチームがいるモジュールへの変更時は「心理的障壁を感じる」という社内の声は実在 する(仲が悪いわけではない ◦ そういう意味でも、この発表では「社会性の消費」という聞き慣れない日本語を使って いる 「占有」ではなく「主担当」くらいだとどうか 82
  17. • リソースの再配分のため組織図は変わりつづける ◦ その時の事業上の注力領域に最適化した形に組織図は更新せざるを得ない ▪ 今年は〇〇領域の拡充を行う、という事業戦略に対して、組織図はNOとは言えない ▪ 先の整理で言えば、バリューストリームがたくさんある中で、どこにどれだけコストを 割くかという組織の重心の置き方は変わり続ける ◦

    そもそも顧客価値検証だとか分散自律改善だとか関係なく人は変わるし、同じ人でもス キルや興味が変わる • 組織図も組織図で、時間とともに変わりゆく大量の変数のなかから動的均衡を保とうと努 力している 時間の経過とともに変わる要素 85
  18. • クリーンアーキテクチャ ◦ フレームワーク・ライブラリ・コンテナの最新バージョンに簡単に追従できた ◦ メンテナがいなくなったライブラリや、公式ライブラリがメンテナンスを諦める、みた いな事象が度々発生したが、柔軟に自家製ライブラリへ乗り換えられた • ドメイン駆動設計 ◦

    ドメイン知識豊富な人の暗黙知が実行可能なPHPコードとして形式知化された ◦ ドメインモデルがアプリケーション層から独立しているため、クライアントアプリケー ションの増加=WebAPIエンドポイントの増設が簡単になった ▪ 最近で言えば海外販売クライアントやAIエージェント向けのエンドポイントなど • モジュラモノリス ◦ 技術的な意思決定の遅延を許してくれた ▪ モジュール間の移動がある程度出来たので、「一旦はこのモジュールに実装する(後で 動かしたくなったら動かす)」という意思決定がカジュアルに行えた 機能した要素(テクノロジーの変化に耐えた) 92
  19. • 境界づけられたコンテキスト ◦ 組織図はよく変わったが、ビジネスモデルが大幅に変わらない限り境界づけられたコン テキストはびくともしなかった ◦ 「結果的には」逆コンウェイ戦略ぽくなったが、意図的ではない • モジュラモノリス ◦

    プラットフォームエンジニアリングとして共通基盤を全モジュールに供給するのが容易 だった ▪ 目的別組織が廃止され、占有チームがいなくなったモジュ ールに対して、共通基盤を 供給してなんとか維持しようとする際に役立った(当時は死に物狂いだった・・ 機能した要素(組織の変化に耐えた) 93
  20. • プラットフォームエンジニアリング ◦ トランザクション制御・例外制御・ログトレーシング・エラートラッキング・非同期処 理基盤などの基盤技術が横断的な技術的関心事を巻き取ることで、ビジネス機能開発に 使用できる時間を増やした ◦ 特に非同期処理基盤(誰でも少ないコードで非同期処理が作れる基盤)は圧倒的に利用 された •

    ただし、どちらかといえばビジネスニーズの変化には柔軟に応えることは出来なかったか もしれない・・ ◦ それは顧客価値検証に最適化された組織図によって賄っていたように記憶している ◦ アーキテクチャがビジネス整合性を維持しやすくすることで、新機能開発の余剰を生み 出す・・・程度の遠い因果関係程度におさまる ◦ OwnershipTransferCostを最適化することで組織図に追従しやすくすることが課題か 機能した要素(ビジネスの変化に耐えた) 94
  21. • モジュラモノリス ◦ モジュールを往来すると社会性が消費されてしまうが、モジュールごとの作りが極端に 大きくなければ、ゆうて同じリポジトリなので往来はしやすい ▪ 社会性消費の「単価」はモジュラモノリスだからこそ下げられていたように思える • モジュール占有 ▪

    設計改善はあまり出来なかったチームもあったが、運用改善は相当やってくれた ▪ モジュール保守の責任を明確に与えることで、当人たちに意識にかなり変化があった、 とのこと ▪ コアドメインチームの自走する姿を参考に、現在のセクション制へと横展開されたの で、分散自律改善の作用を組織に広がる起爆剤としては大いに活躍した • クリーンアーキテクチャ ◦ SOLID原則などの設計原則がある程度強制される中で、ソフトウェア設計に関心を持つ 人がわずかに出現 ◦ 「Webフレームワークとかどうでもよくなった」とのこと 機能した要素(人・組織・文化的な影響) 95
  22. • モジュール占有と継続的なリファクタリング ◦ 機能改修の都度ドメインモデルとコードを見直してリファクタリング、といった活動は 限定的だった ◦ 課題にそもそも気づいていない、というチームも、本人たちに課題感はありつつもリ リース圧力から逃げられない、というチームも両方ある ◦ 人や組織への価値観のアップデートが必要

    ◦ 自分の行った技術的意思決定が、長い時間をかけて自分に返ってくる、みたいな経験を 積み上げないとコード品質の勘所はAI時代にも育たない気がしているので、今はまだ芽 は小さいが、いずれ発芽してほしいという期待はある 機能しなかった要素 96
  23. • 両者の溝を超えるには人と組織の質的変化が必要になってくる ◦ 「最終的には人」みたいな落とし所はよく聞くが、個人的にはそれとは言い方がちょっ と違うと思う ◦ 人という資源を浪費しないように組織図とアーキテクチャを設計しているので、仮に全 員が認知能力の上限がなく、ダンバー数も関係なく、システムの全貌を把握していて、 十分な設計スキルがあるなら組織図もアーキテクチャもそもそもいらない ◦

    要するに最終的に人にしわ寄せがいっている以上、それは単純に組織図とアーキテク チャの至らない部分である、という言い方のほうが自然 ▪ ただし、今回の仮説のように、両立はおそらくできない場合が多いので、最終的にはど うしてもしわ寄せはいってしまうのだが・・ • 溝を超えるための人と組織の変化には長い時間がかかるため、弊社も現在のセクション制 のような体制には一足飛びにはいけなかったのだと思う 4年間を経て思うこと 99