OOC 2024に一般参加しました

[Object-Oriented Conference 2024](https://ooc.connpass.com/event/305241/) に参加しました。

[Qiita](https://qiita.com/yumechi/items/07bd13de8ea74c380c88), [Zenn](https://zenn.dev/yumechi/articles/a3b90fa27d6ac2) の両方に投稿します。

## なぜ参加したのか

ドメイン駆動開発の話が多く、自分としては理解と実践に乖離があり、その理解に繋がる学びを得たかったからになります。

オブジェクト指向の基本的な考え方については理解しているつもりですが、最近の自分の考え方からするとクラス機能の話でオブジェクト指向ってそもそもなんだっけ？という気持ちもあり、再理解につなげることもできたらうれしいなと思いました。

## トークの感想

いくつかトークを聞きましたが、個人的に面白かったものだけを書きます。

### [俺のオブジェクト指向開発のベストはこの程度なんだろうか](https://fortee.jp/oocon-2024/proposal/1871246e-82a6-44f5-b34a-6035c4839651)

ドメイン駆動の話を踏まえて具体的なケースを考えながら話をしていたので、わかりやすかったです。
発表者の過去の経験から、ECシステムの例で「出荷」という話を取り上げていましたが、serviceクラスに切り出したことによる操作の依存の問題や、「出荷」の意味がコンテキストによって異なる問題により不具合につながるなど、実装を考えるうえで考えさせられました。

場合分けを PdM が言葉にできない状況になってしまうと、そもそもドメインに対する理解の問題が起きてしまっているので、実装は実装としてドメインの概念をチーム全体で合わせていく大切さを学べました。

### [チームでモデリングを育てるうえで考えたこと・気づいたこと](https://fortee.jp/oocon-2024/proposal/9d03d0b4-62af-497f-b02e-ad0e09e616c9)

チームにとってのモデリングについて 5W1H で考えることで、システマティックに考えつつまたチーム全体で意識して改善していくことの大切さを感じました。
私的に良いなと思ったこととしては When, How の部分で定期的に見直し、更新するというところです。
作ったままになっている、動いているのでそのままになっているものというノーメンテになっているものは身に覚えがあるのですが、定期的にタイミングをとて見返すことで抜け漏れや改善につなげられるようになりそうです。
定期的に見直すはうまく実践したいですね…。

### [DDDはなぜ難しいのか / 良いコードの定義と設計能力の壁](https://fortee.jp/oocon-2024/proposal/7a7b1006-f6a3-44fd-826e-e34f67733c19)

今回一番楽しみにしていて、一番学びが多かったセッションでした。
DDDのプラクティスとしての戦略・戦術の理解と、実践・応用の剥離について具体例を含めて説明されており、自分も問題点に気づけました。

DB駆動のように1テーブル・1モデルで物事を表現した場合、ドメインの概念とずれてしまうケースがあります。
このケースではその際を service などに切り出したりしながら綺麗にしますが、一方で実問題を扱った際には複数テーブルの情報を総合して処理することも珍しくなく、1テーブルに対しての対応方法だけでは間に合わないことがあります。

DB駆動の問題を解決するために、ドメインで表現しなおすことによってアプリケーションが扱いやすいコードにする、ということがドメイン駆動開発の目的であるように思いました。
その実装法についてはいくつもありますが、結論としては実問題に対して実際にコードを書いて解決してみることが一番理解につながったということです。
理解する・実装するのフィードバックループを回しながら理解を深めていく、ということの言葉の重みがあり、自分も実践していきたいと思いました。

またソフトウェア品質の定義についても説明があったのでまた読み返そうと思います。

### [ドメイン・ファーストで考える問題解決に役立つモデル設計](https://fortee.jp/oocon-2024/proposal/63acd4ea-4979-49cf-9f91-0e255821638c)

比較的大きくなってきたときに、役割が兼業になっているものについてサブドメインを切り出し、サブシステムとして実装していくという点が良いなと思いました。
現実的にも3年するとプロダクトの使われ方がかなりわかってくるので、少なくとも年次では PdM 含めてチームでドメインについて考え直してみるのがいいのかも、と思いました。

### [SaaS型Webサービス 「カオナビ」 のチーム開発でPackage by Featureを取り入れた話](https://fortee.jp/oocon-2024/proposal/268742e3-2ba7-48e7-876d-15c8ccf3b0f1)

前夜祭で Package by Layer や Package by Feature について知っている人？ って質問があり、知らなかったので特に反応していなかったので聞いてみました。
単語の意味通りで Controller, model などのシステム的なカテゴリで分けることを Package by Layer と言い、機能ごとに分けることを Package by Feature と言うことを知りました。
名前がついてたことを知れたのが一番良かったです。ちなみに両方やったことがあります。

あといいなーと思ったプラクティスとしては直接機能をコールするのではなく、中間的に設けたインターフェースを呼び出すようにするというのがよかったです。
Package by Feature で対応している場合でも、物理的に Model などを参照してしまうと複雑度が格段に上がってしまうため、インターフェースを設けることで疎結合に使いまわせるのは理想的だなぁと思いました。

## ブースの感想

個人的に取り組みが面白かったのが [コドモン](https://www.codmon.co.jp/company/) さんでした。
先生や保護者の負担を減らすための長年サービス開発を行っているとのことで、もっと改善して社会に貢献していきたいという話がよかったです。

## ほかに聞きたかったトーク

懇親会などで情報を聞いて面白そうだと思ったトークです。アーカイブ（が出ると聞いた）や資料をチェックしたい…

- [オブジェクト指向の修得はなぜ難しいのか](https://fortee.jp/oocon-2024/proposal/4038d563-41b4-40fe-b0ea-10e76f32406b)
    - 人に教える際にどうするか、ということを考えるヒントになりそう
- [宅配クリーニングサービス「Lenet」開発におけるDDD7年の歩み](https://fortee.jp/oocon-2024/proposal/ace1a048-6736-458c-ae42-dbfa2cb899d4)
    - 実例ベースでのチームでの取り組みの話だったとのことで、気になっています
- [オージス総研のエンジニア3名がおすすめする現場で役立った本と活用した内容・勝手にビブリオバトル](https://fortee.jp/oocon-2024/proposal/888740d2-5308-471a-b2d0-95f4f1833aed)
    - どんな本が具体的に役に立ったのかリアルな声を聴いてみたかったです
- [DDDでレガシーコードに立ち向かうリアル、躓きと学び](https://fortee.jp/oocon-2024/proposal/9c081bd2-e2e8-4918-b2fa-6f6e861f5907)
    - これも実践ベースで気になっています
- [オブジェクト指向コードレビューの新しいアプローチ](https://fortee.jp/oocon-2024/proposal/cfa1a92c-5659-4941-b9bc-c408bf3bd886)
    - チーム視点で考えるということでこのトークも気になりました

## まとめ

概念的な話が多かったので、実際にコードを書きたくなりました。
今起きている問題に対して解決策を実際にコードを書いて考えてみる、という話がトークの中にも出てきて実践していきたい気持ちでいっぱいです。

理論と実践のバランスで理解を深めていく、今後も取り組み続けてより良い形でエンジニアとして成長していきたいです。