【参加レポ】Object-Oriented Conference 2024 に行ってみた【設計】

# はじめに

先日、Object-Oriented Conference 2024 に参加してきました。

https://ooc.dev/2024/

Object-Oriented Conference 2024 (以降 OOC2024 と省略)はオブジェクト指向がテーマの、ソフトウェア設計に関する国内最大級のカンファレンスです。お茶の水女子大学で開催されました。なんと参加費は無料！

この記事は僕が OOC2024 に参加して、「1日でこんなにも多くのことを学ぶことができたよ！」ということを紹介する記事です。

以降、僕が実際に参加したセッションをそれぞれ簡単に紹介します。（敬称略）

# オブジェクト指向のリ・オリエンテーション　～歴史を振り返り、AI時代に向きなおる～ by 羽生田栄一

<script defer class="speakerdeck-embed" data-id="794a4ff438614d8d87bb8787a09542cf" data-ratio="1.3333333333333333" src="//speakerdeck.com/assets/embed.js"></script>

「オブジェクト指向」という単語が生まれた歴史から始まり、「オブジェクト指向」の5段階での紹介を通して、オブジェクト指向の向き直し（リ・オリエンテーション）ができるとても濃厚な時間でした。

# 生成AIの不確実性と向き合うためのオブジェクト指向設計 by 菊池琢弥

<script defer class="speakerdeck-embed" data-id="c13138f26c534b6bb46f508c5f22c032" data-ratio="1.7772511848341233" src="//speakerdeck.com/assets/embed.js"></script>

生成AIをプロダクトに組み込む際の、「AAAA」モデルという「4種の体験のうち、どの体験を求めているのだろう」と考える方法や、生成AIのモデルは進化が速く、検討が難しいといった内容の発表でした。

僕は「AAAA」モデルという考え方を知らなかったので、今後AIをプロダクトに組み込む際は活用していきたいと思いました！

# オブジェクト指向の修得はなぜ難しいのか by やまいも

<iframe src="https://docs.google.com/presentation/d/16dKZdMPSA2sHvFzCB_9XTdcj_YZm06DVR8YWovvuOWY/embed?start=false&loop=false&delayms=3000" frameborder="0" width="960" height="569" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>

はじめてプログラミングを学ぶ際は、最初は処理の流れに（フローに）注目してトップダウンにコードを書いていきますが、オブジェクト指向では「データ」に注目して「クラス」という部品を組み合わせてプログラムを作っていく、ボトムアップな考えかたとなっていて、この「トップダウン」「ボトムアップ」の差がある状態では、オブジェクト指向の修得が難しいという内容のセッションでした。

僕もこれまで「トップダウン」「ボトムアップ」をあまり意識せずにコードを書いていましたが、オブジェクト指向で設計する際は、こういった考え方で設計していくことで、より適切な設計ができそうだと思いました。

# クソコード動画『カプセル化 Mk-II』で考える、上手くカプセル化できない理由 by ミノ駆動

<script defer class="speakerdeck-embed" data-id="67bc5fd888ff453096447af83b7ca3cf" data-ratio="1.7772511848341233" src="//speakerdeck.com/assets/embed.js"></script>

「ミノ駆動本」「クソコード」で有名なミノ駆動さんのセッションです。

今回も新作の動画を公開されていました。説明するよりも見てもらった方が速いと思います！

https://twitter.com/MinoDriven/status/1771763728234537310

動画の解説として、目的ごとに手段は異なるので、クラスも目的が１つになるように設計が必要になる、といった内容の話をされていました。

新たに設計の本を執筆中とのことで、そちらも楽しみです！

# チーム開発でデプロイ頻度を上げるための設計とタスク分割 by ことみん

<script defer class="speakerdeck-embed" data-id="81a3600553954da9a752ab821d0e41f7" data-ratio="1.7772511848341233" src="//speakerdeck.com/assets/embed.js"></script>

デプロイの頻度が低いと、1度に大きな変更をデプロイすることになり、レビューで不具合を発見しずらくなり、障害が発生する可能性も高くなってしまうので、デプロイの頻度を上げるとよい。また、そのために、設計とタスク分割を工夫する必要がある、という内容の発表でした。

設計のテクニックとして、インターフェースだけ先に実装したり、安心してコードを書くためにテストを用意するなど、どれも役に立ちそうだと思いました。

# ビジネスロジックを「型」で表現するOOPのための関数型DDD by Yuito Sato

<script defer class="speakerdeck-embed" data-id="ba0925c51b684f419dce96a34bcd4401" data-ratio="1.7772511848341233" src="//speakerdeck.com/assets/embed.js"></script>

一言でいうと、OOPに型の力を活用することで、型チェック時に実装のミスを見つけることができるようになる、という内容の発表でした。

やはり型はソフトウェアの品質の向上につながるので、できるだけ活用していきたいですね。

# 設計の知識と技能で駆動するソフトウェア開発 by 増田 亨

<script defer class="speakerdeck-embed" data-id="8b66e8877ddd412cb83c610b5652ebcf" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>

書籍「現場で役立つシステム設計の原則」の著者である増田さんによるセッションでした。

設計は、成功や失敗といった「経験」、実際に手を動かすこで得た「習熟」、チームで知識や技能を組み合わせる「共創」の相乗効果であることを語っていただきました。また、設計スタイルの分類から、オブジェクト指向やドメイン駆動設計がどんなスタイルであるか紹介されていました。

# ファット駆動開発 by よなお

スライドは見つかりませんでした...

内容としては、ファットなクラスを作ってしまい、一度失敗することで、適切な設計を行うぞという意思のもと、リファクタリングしたり、今後は最初からよい設計にしよう、という気持ちになる、といった発表だったと思います。特に、以下2点がとても共感できました。

- 一度ファットなクラスを作って失敗すると、今後は失敗しないぞ！という気持ちになる
- 「後からリファクタリングすればええか...」は絶対後悔するので、はじめからちゃんと設計するべき

# オブジェクト指向コードレビューの新しいアプローチ by akkie76

<script defer class="speakerdeck-embed" data-id="604e9a8e668c4059b962220367a8bb81" data-ratio="1.7772511848341233" src="//speakerdeck.com/assets/embed.js"></script>

コードレビューの際に、「オブジェクト指向」という視点でどのようにレビューするとよいか、また、それらを自動化する PR-Agent というツールの活用法の紹介がありました。

レビューは僕も設計という観点でどうレビューすればいいか迷うことも多いので、こういったツールを活用して支援してもらえるとうれしいですね。

# おわりに

上記で紹介して9つのセッションに加え、オープニングやクロージング、スポンサーブースなど、一日中設計に関する情報を浴び続けることができ、とても貴重な体験だと思いました。

下のタイムテーブルを見てもらうとわかるのですが、僕が参加したセッション以外にもさまざまなセッションがりました。後日セッションの動画が公開されるようなので、公開されたら見てみたいです。

https://fortee.jp/oocon-2024/timetable

設計に慣れている人だけでなく、設計初心者でも楽しめる内容になっているので、次回の開催があればぜひ参加してみてください！僕は次回があったら参加します！（登壇もしてみたいです！）

https://twitter.com/ooc_dev/status/1771833487500198165