DDD

この記事はDDDについて解説した記事です。会話形式のやさしい文章で「DDD」の用語のイメージを紹介した後に、採用に役立つDDDの知識を解説しています。

1分で分かる!DDDとは?

ねぇねぇ、ジャバード先生。ジャバード先生は、大規模システムを開発した経験はある?

そうだね。ちょっと前まで大規模システム開発に携わっていたよ。

え、そうなの!?

うん。大規模システム開発で何かあったの?

実はリンゴ銀行さんが今度大規模なシステムを開発するらしいんだ。

そうなんだね。

でもね、以前大規模なシステムを開発したときに、開発費が膨れ上がった苦い過去があるみたい。

なるほど。たしかにシステム開発は規模が大きくなるほど、難易度が高くなるからね。

だから、大規模システムをうまく開発できる方法がないか検討しているみたいなんだ。でも、そんなにうまい話はないよねぇ…。

それならDDDがいいかもしれないね。

DDD??

そう。DDDはDomain-Driven Designの略で、「ドメイン駆動設計」っていう意味だよ。

ジャバード先生、何の話をしているの…?

ちょっと難しいよね。DDDはソフトウェアの設計手法なんだ。もう少し簡単にいうと「ソフトウェアを開発するときの基本となる考え方」みたいなものだね。

あぁなるほど。DDDだと何が嬉しいの?

詳しく話すととっても難しいんだけどね。最も特徴的なのは、ドメイン駆動設計はソフトウェアで解決したい部分(ドメイン)を、ソフトウェアの設計にそのまま反映させるというポイントなんだよ。

ジャバード先生、とても難しいです…。

もっと簡単にいうと「業務をきちんと理解してソフトウェアをつくろうね」ってことだね。

それなら意味はわかるけど、それってDDDに限った話ではなくて、当たり前のことじゃないの??

それがそうとも限らないんだ。一般的にソフトウェアって「機能」や「データ」を中心に設計されることが多いんだよ。

そうなんだね。でも業務を理解するって結構難しいよね。エンジニアさんも業務知識は身につけているだろうけどさ。

そうそう。やっぱり毎日現場で対象業務に対応している人の方が詳しいからね。だから、DDDではそういった「業務のプロフェッショナル」と「エンジニア」で「ユビキタス言語」と呼ばれる共通の用語を使うんだ。そうすることでお互いが言いたいことのギャップをなくせるというわけだね。

業務のプロフェッショナルと一緒になって開発していく感じだね。

そうだね!DDDを実践することで、業務に変更が入った場合の改修が簡単になったり、設計書も共通の「ユビキタス言語」で記述できるから、コスト削減もできるんだよ。

それはリンゴ銀行さんも喜んでくれそうだね!

大規模システムを開発するときにはとても有効な手法だから、きっと気に入ってくれると思うよ。

ジャバード先生、ありがとう!ちょっとリンゴ銀行さんのところへ行ってくるよ!

はーい!いってらっしゃい!

DDDとは?採用に役立つ基礎知識

DDDとは、Domain-Driven Designの略であり、日本語では「ドメイン駆動設計」と訳されます。

DDDは、2003年にエリック・エヴァンスというエンジニアによって発表された「ソフトウェアの設計手法」です。

厳密に説明するのはかなり難しい設計思想ですが、簡単にいうとシステムを開発するための技術はあくまでも付随的なものであり、実際の業務に加えて、その業務ロジックに重きをおくべきだというものです。

これを実現するためにDDDでは「エンジニア」と「システムを利用するユーザー」は、ユビキタス言語と呼ばれる共通の言葉を利用して、システムを作り上げていきます。

DDDを使うエンジニア

前述したとおり、DDDは設計手法の1つです。そのため、フロントエンドエンジニアサーバーサイド(バックエンド)エンジニアネイティブアプリエンジニアなど、設計を担当する可能性があるエンジニアが挙げられます。

DDDを使うエンジニアの特徴と在籍業界

DDDを使うエンジニアに特徴はありません。また、DDDは様々な業界のシステム開発に導入されています。

採用する時に知っておくとよいこと

DDDをマスターしたエンジニアは貴重

システム開発は、要件定義や設計などの上流工程と、プログラミングやテストの下流工程に分かれます。

一般的に製造やテストといった下流工程に携わるエンジニアは多く、要件定義や設計などの上流工程に携わるエンジニアは少ないといわれています。その上流工程に携わるエンジニアの中でも、DDDを完全に理解している人はあまり多くないのが実情です。

企業によっては、DDDに対する知見を求人条件としているところもありますが、ややハードルが高い条件であることは覚えておきましょう。

求人のポイント

求人を作成する時は、下記の内容を求人に入れるとよいです。

1システム(サービス)の詳細
※特にそのシステム(サービス)をなぜ作っているのかを熱量をもって記載する。
2開発環境
3現在のエンジニア組織の体制
4現行システムの課題と募集の背景
5求められる業務と期待値
6エンジニアとしてのスキルアップ支援制度の有無と詳細
7エンジニアチーム内での相互成長のための仕組み(勉強会やLT会など)の有無と詳細
8選考フロー
9待遇
10キャリアパス

DDDの豆知識

DDDに関連する事例

DDDは、様々な企業で導入されています。ここでは実際にDDDの実践事例を紹介します。

Yahoo!ショッピング

利用者にとっては嬉しいクーポンですが、仕様は複雑であり、システム化が難しいため、エンジニアにとってはあまり嬉しいものではありません。

2019年、Yahoo!ショッピングクーポンチームは、クーポンに関する複雑な仕様を、DDDを実践して、刷新を行いました。

その結果、さまざまなビジネス要求に対しても、迅速に対応できるようになったとのことです。

参考:Yahoo! JAPAN Tech Blog

DDD関連の資格

DDDに関連する資格としては以下のようなものがあります。

UMTP認定試験

UTMP認定試験は、特定非営利活動法人UMLモデリング推進協議会が主催する認定試験です。試験はL1からL4までの4段階で構成されています。

この認定資格では、UMLモデリングに関するスキルが問われます。現在、試験問題の改定が行われており、時代の流れに即してDevOps、アジャイルに加え、DDDに関連がある問題を含める方針で調整が進んでいます。

参考:UMTP認定試験

DDD関連のイベント

DDD関連のイベントとしては以下のようなものがあります。

ISE Technical Conference 2022

ISE Technical Conference 2022は、日本IBMグループの日本アイ・ビー・エム システムズ・エンジニアリング株式会社 (ISE)が主催するカンファレンスです。

このイベントは最新技術や事例などを中心に、12カテゴリのセッションやショールームで構成されています。

2022年には、Agile/Garageカテゴリとしてドメイン駆動設計が大々的に取り上げられています。

参考: ISE Technical Conference 2022

PHPカンファレンス

PHPカンファレンスは、日本PHPユーザ会 PHPカンファレンス実行委員会が主催しており、PHPをメインテーマとしています。

1999年から開催されている歴史あるイベントであり、毎年多くのエンジニアが参加しています。

なお、PHPカンファレンスという名前のとおり、DDDをメインとしたイベントではありませんが、DDDに関連したセッションが開催されることがあります。

参考:PHPカンファレンス2021

 

関連記事

  1. ブロックチェーン

  2. Hyper-V

  3. Graphql

  4. DevOps

    DevOps

  5. アプリ開発者採用で知っておくべき技術用語まとめ

  6. Scala