PHPerKaigi 2022でトークしました #phperkaigi

PHPerKaigi2022!

オンラインな時代になり、カンファレンスへの参加がオンラインになってしまったり
色々ありますが1年ぶりくらいにカンファレンスに登壇(録画)しました。

この2年くらいで子供が大きなったり色々ありました(当たり前)
現地参加ができなかったのが悔やまれますが、
今回は下記の 「入門 境界づけられたコンテキスト」 についてのトークでした

speakerdeck.com

ただし録画の音質が悪く、多分ノイズキャンセルあたりがかかってしまったのではないかと思います・・
大変失礼しました。

コンテキストの話ということで、資料だけを公開するとコンテキストをすっ飛ばしてしまうので
公開しないつもりでしたが、音質があれだと、ということで。

内容について補足など

今回はコンテキストの話ですが、
これは日常生活のあちこちにあり、コンテキストを意識せずに、
自分達都合で解釈して進めてしまうと物事のいろんなところに歪みが生まれる、という例を挙げながら
どうすれば防げたのか、どう考えればよかったのか、という思考の話でした。

コミュニケーションに取り入れることで、物事が円滑になったり、
認識の齟齬を減らすということができるわけですが、
プログラミングにおいてはどういう繋がりがあるのか、というところを交えての内容としました。

聞く人によってはリアルすぎる状況の話だったりするので、
胃が痛くなる人やドキドキしてしまう方も多くいたのかもしれません。

何気ないコミュニケーションや思考の裏側にはエンジニアとして
どのように実装しなければいけないか、あのライブラリはこうだから
こう考えないといけないからこう言っておこう、という思考を混ぜ込みすぎると
歪みが出てきたり、あの人とこの人が同じようなことを言っているので、それを混ぜて共通化しよう、
となるとどんどん目の前のものが複雑になっていきます。

同じ言葉でどのような範囲において変わっていくのか、を意識することは非常に重要で、
それを理解することで、
あの人とこの人が同じようなことを言っているけど、実は違っていてこの機能はいらないですよね、
指しているものはこうだから多分これは別ですよねー、というようなやりとりに変わっていくわけです。

第一声にそれは無理っすというより、やはりいろんなものが前を向いていくシーンは多くなると思います。

そして設計をする時もこの領域を意識して落とし込んだり、
どこまで実装で表現するかというフェーズになっていきます。

ここで注意しなければならないのは、現実ではこうだからクラス設計も全く同じにしないと!という
現実のものをそっくりそのまま射影しすぎないように気をつけましょう!

現実のものを同じように表現するとそれはそれで難しくなりますし、
実装するのがどんどん難しくなっていきます。
(OOPの幻想みたいな話になっていきますね)

ですが、エンジニア都合の物事の考え方だけでなく、
いろんな俯瞰した思考から ここが落とし所だ! と見えてくるようになります(試行錯誤の繰り返しですが)
そして宣言的なプログラミングへと変わっていくきっかけにもなります。

そしてこの言葉をうまく捉えるには文字だけではなくて、
利害関係者とのコミュニケーションと、抽象のハシゴによる思考と、メタ情報を見つける思考が非常に大切です。
これらを組み合わせることで境界づけられたコンテキストを見つけていく、
そんな行動のための話だと思ってもらえると良いと思います!
(達人プログラマーなどの書籍にも似たような話がたくさんあります)

最近発売になった書籍にもこうした行動の解説があったりします。

モジュールやアーキテクチャ特性などを明らかにする際の思考は
こうした境界づけられたコンテキストによる分離スタイルによるものとなります。

が、 そのまんまクラス設計やアーキテクチャに落とし込む、という話ではありません。
繰り返しになりますが、現実のものをそのまま表現するには難しすぎますし、
エンジニアとしての視点もある程度混入させてなければなりません。

ただコンテキストを理解しなければ、なぜそうしたのか、が結びつきません。
そのため資料の中の実装例にすっ飛ばしていかないように実装の話を全く入れていません。
バランス感覚と思考の話ですし・・
概念だから、と片付けられる話でもあるかもしれませんが、
HOWを重視するのではなくてWHYを的確なものにしなければなりません。

blog.magnolia.tech

magnoliaさんの記事なども参考に見てみるといいでしょう!

とはいえこの境界づけられたコンテキストとうまく付き合うことで、
マイクロサービスアーキテクチャなどの切り出す範囲を決定できるかなと思います。
やる時は実際にどれとどれは同じか、というのを関係者と一緒に作業したりしています。
もちろんやったら終わりではなくてビジネスの変化だったり時間で変わることも多々ありますので、
都度変更していく、という具合です。

実装についてはまたどこかの機会に・・!

是非感想などのフィードバックをください!
音質はすいませんでした・・

アンカンファレンス

アンカンファレンスでは、
境界づけられたコンテキストから広がる世界を実装するためにも組み合わせることが多いドメインイベントから、
イベントソーシングに流れるにあたってやってしまいがちではあるけどやってしまうとデータ連携だったり、
サービス間でのやり取りで不整合が発生して
意図しない分散トランザクションを生んでしまったり、時系列がぐっちゃぐちゃになってしまう、
イベントがソースにならなくなるアンチパターンについてお話ししました。

こちらは以前にラクスさんのモデリングのLTの時にお話しした内容をピックアップしたものです。
実践する時に興味があれば是非覗いていただければと思います。

speakerdeck.com

知人が出版した

感想はまた別の機会に書きますが、
前職で一緒だったりコミュニティ活動等で一緒になることがおおいメンバーによるLaravelの書籍が発売に!
自分の本とは違って入門に優しいしっかりした内容になっております。
是非どうぞ!