はじめに
こんにちは。BASEでバックエンドエンジニアとして働いているオリバ(@toshi-oliver)と申します。
普段は、BASEの発送を簡略できるかんたん発送Appの機能拡張に従事しております。
BASEに入社してバックエンドエンジニアに転向してから約1年3ヶ月ほど経ち、PHP、オブジェクト指向、DDDやクリーンアーキテクチャなど様々な分野を学んできました
これらの分野に大きく関わるイベント「Object-Oriented Conference 2024」が、2024年3月24日(日)にコロナ禍を経て約4年ぶりにお茶の水女子大学にて開催されました。4年前に参加したかったのですが都合が悪く参加できず、今回満を持して参加することができました。
Object-Oriented Conference 2024とは
プログラミング言語の縛りを超えて、オブジェクト指向に関連するセッションが集まったイベントです。
ソフトウェア設計で有名な増田亨さん、田中ひさてるさん、成瀬 允宣さんやミノ駆動さんなど、人気のある技術書の著者が登壇される貴重なイベントでした。
参加したセッション
1. オブジェクト指向のリ・オリエンテーション ~歴史を振り返り、AI時代に向きなおる
豆蔵の羽生田さんの基調講演でした。
講演の終盤で会場入りしたので、全ては聴講できませんでした。
大学の講義のような形式で、オブジェクト指向の歴史や、オブジェクト指向の概念、段階について説明されました。 中でも印象に残ったのが、以下添付画像のOOP5段階です。
4段階目以降が重要で、それまでちゃんとできていない場合、5段階目のDDDに挑戦しても意味がないとのことでした。
私は、BASEに入社して本格的にオブジェクト指向やDDDに入門したため、この5段階を一気にまとめて学び、なかなか苦労しました。
終盤の以下のメッセージに感銘を受けました。
オブジェクト指向は手段にすぎないですが、目指す先は「新しいサービス、そして未来を創造することである」です。
動くところを想像してみよう そのオブジェクトの裏で何が動くは、これから考えれば良い。 そのオブジェクトの目的を理解して現場・現物で学び考えよう **それは、新しいサービス、そして未来を創造することである**
2. 生成AIの不確実性と向き合うためのオブジェクト指向設計
本イベントのスポンサーである株式会社Algomaticさんのランチセッションです。
このセッションに参加するとランチチケットがもらえます。
生成AIは何に使えるのか
- ユースケース
- 扱いにくいデータを扱いやすくする
- 苦手な分野の知識を補完するには使える
AAAAモデル
生成AIをサービスに導入する使う際は、以下のAAAAモデルを軸に考えると良いようです。(参考)
- automation
- agent
- advice
- augment
生成AIを導入する際の難しい点
- レスポンスが遅いが、高額なAPIをどう扱うか
- 使用するAIツールを変えたいと思った時に、いつでも切り離せる設計にしておくこと
3. 戦略的DDDを後天的に実践するための跳躍力
DDDとはざっくりいうとユビキタス言語を使って、ドメインエキスパートと会話して、プロダクト、コードに落とし込むサイクル。
DDDには戦略的DDDと戦術的DDDという分け方がある。
- 戦略
- ドメイン理解、ドメインモデリング
- 戦術
- ドメインモデリング、実装
(戦術的DDD = 軽量DDD)
DDDを卵に例えると、黄身は戦術?白身は戦略??
答えはありませんが、私としては、黄身は戦略、白身が戦術であると感じました。
ゴリゴリ手を動かして開発をするという行為が、ボディビルダーがタンパク質摂取のために卵の白身だけ飲みまくる行為に似ているので、戦術的DDDは卵の白身→意味不明
戦略的DDDはなぜ難しいのか
- ドメインエキスパートがいない
- それはそう
- いても難しいことがある
- どこまで巻き込めるか、お互いに遠慮する
- ドメインエキスパートが不在
ドメインエキスパートが不在でどうしたか
- ドメインエキスパートがいないなら自分がなれば良い
- どうやってドメインエキスパートになるか
- とにかくbiz側とコミュニケーションをとる
- 圧倒的なインプット
- アウトプットしてチームに共有
- ドキュンメントを残す
- 名前がない業務がたくさんあることがわかる
跳躍力とは
- 職域を超えて、わからないことをわかるまで追いかける力
- 仕事だからやらないと、ではなく好奇心が必要
- これから戦略が必要。とはいえ、軽量DDDでもちゃんと開発ができていればいいじゃん。
ドメインエキスパートに自分がなるという発想が目から鱗でした。以前、自分が携わっていたメンバーシップAppの開発でもDDDを実践していましたが、戦術DDDに傾倒していたような気がしました。かんたん発想Appでは戦略DDDを意識して、ドメインエキスパートになるぐらいの動き方にチャレンジしてみようと思います。
4. イベントストーミングによるオブジェクトモデリング: オブジェクト指向プログラミングへの適用/開発プロセスの変遷/アーキテクチャの変革
技術書「ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本」の著者で有名な成瀬 允宣さんのセッションでした。
イベントストーミングとは
ドメインの理解を深めるためのワークショップ手法の1つです。
ドメイン駆動設計の戦略的設計の1部で、 3. 戦略的DDDを後天的に実践するための跳躍力で議題に上がった戦略的DDDと戦術的DDDの橋渡しをするのがイベントストーミングです。
やり方としては以下です。
- イベントを付箋に書き出す
- アプリケーションを使用する際に発生するイベントを書き出します
- イベントを並び替え
- 上記のイベントを並び替えます
- コマンドや集約、外部システムを追加
- コマンドとは、実装でいうとメソッドに相当します
- 集約やイベントはクラスに相当します。
- ポリシーを追加
- 注文→決済の間で定義されたルールのようなものをポリシー
上記の手順に従って、DevとBizが集まってディスカッションしていきます。
イベントを中心として業務フローを明確化することによって、以下のメリットを享受できます。
- ドメイン知識偏在の解消
- コミュニケーション不足の解消
- 属人化を防ぐ
- 変更容易性の低下を防ぐ
イベントストーミングを導入→ドメインを理解するためにワークショップが活発→全体像の可視化→仕様書、設計書の誕生→属人化の解消→アジリティ向上→修正前にイベントストーミングをするという文化の醸成
ただし、留意点として、ファシリテーション力と、ドメインエキスパートに参加してもらうことが必要となります。
アーキテクチャ選定
イベントストーミングを効果的に反映するアーキテクチャとして、CQRS/Event Sourcingがあります。
時間の関係上、アーキテクチャの詳細には触れられませんでしたが、CQRSはBASEでも一部取り入れているので、Event Sourcingパターンは非常に興味深かったです。
個人的には、かんたん発送Appのデフォルト化や日本郵便対応の要件がまだ定まっていないので、このイベントストーミングを取り入れてみたいと感じました。どこかのタイミングで成瀬さんのワークショップ参加してみたいという思いが強くなりました。
5. CQRS/Event Sourcingシステム実装入門
4.イベントストーミングによるオブジェクトモデリング でも話題に上がった、CQRS/Event SourcingのハンズオンイベントとQ&Aが実施されました。登壇者は、かとじゅんさんです。
READMEに沿って、ハンズオンを行なっていきました。
個人的に気になったのが、AWS Lambdaで動いているReal Model Udapterの部分で、ここの処理が失敗するとDynamoDBとRDSのデータの整合性が失われるので、Real Model Udapteが処理を失敗した時のリカバリーについて、ちゃんと設計する必要があると思いました。
ネット環境が良くなかったことと用意されたDockerfileがうまく立ち上がらなかったため、途中でハンズオンを断然しましたが、またどこかのタイミングでチャレンジしたいと思います。
6. ラウンドテーブル:OOP可読性テクニック
オブジェクト指向について、参加者全員でラウンドテーブルという手法を用いて、ディスカッションを行いました。ファシリーターは成瀬さんが務められました。
(※ラウンドテーブルとは)
ラウンドテーブルとは、簡単にいうとみんなで円陣を組んでディスカッションを行います
主に上がった議題としては、
- メソッド名の付け方で意識していること
- コード上で日本語の使用はどこまで許されるか
- 従来のやり方が間違っていた場合、踏襲するか変更を要求するか
など、現場でよくある悩み事を約50人ほどでディスカッションしました。
以下は、議事録です。
7. 最後に
朝から夕方までぶっ通しで参加したので、最後の方はヘトヘトでした。しかし1日中ソフトウェア設計について考えられるイベントに参加できて、非常に満足感が高く、また改めてソフトウェア設計が自分の中で興味のある分野であることが再確認できました。
収穫としては、イベントストーミングによるオブジェクトモデリングというワークショップが、ドメイン知識をインプットするために効果的であることと、CQRS/Event Sourcingパターンがアーキテクチャのトレンドであることがわかりました。
イベントストーミングは、ぜひBASEのpjで取り入れたいと思いました。まずはネクストアクションとしてイベントソーシングのやり方について調査し、ドキュメントにまとめたいと思います 💪
最後に、BASE では絶賛採用活動中です。
BASEではDDDやクリーンアーキテクチャなど積極的に導入しており、まだ1部MVCで動いているアプリケーションをクリーンアーキテクチャにリアーキするチャンスがあります。
カジュアル面談からでも大歓迎ですので、一緒に BASE の未来を作ってくださる仲間を募集中です!