Slide 1

Slide 1 text

Copyright© M&Aクラウド オンボーディングのために 私はプロダクト考古学者になりました! 第152回PHP勉強会@東京 Akito.Tsukahara

Slide 2

Slide 2 text

Copyright© M&Aクラウド 2 自己紹介 塚原彰仁 AkitoTsukahara 株式会社M&Aクラウド AkitoTsukahara akito_tsukahara

Slide 3

Slide 3 text

Copyright© M&Aクラウド この発表で聞けることは? 今日話すこと ● プロダクトの考古学とは? ● 我々の考古学の取り組み ● 考古学で取り上げた題材を一部紹介 ● まとめ

Slide 4

Slide 4 text

Copyright© M&Aクラウド プロダクトの考古学とは? プロダクトの考古学 ● リリースからしばらくして安定稼働しているアプリケーションがどのように 実装されてきたのか?現在の形になった経緯をまとめる取り組みです ● プロダクト・アーキテクチャの成長過程を知ることで、設計思想を知る・理 解する機会を作ること

Slide 5

Slide 5 text

Copyright© M&Aクラウド プロダクトの考古学とは? なぜこの取り組みが必要なのか? ● 新しく入ってくるメンバーがプロダクトの理解度を高めて、積極 的に開発(アーキテクチャの提案、負債解消)に取り組めるよう にするためです

Slide 6

Slide 6 text

Copyright© M&Aクラウド プロダクトの考古学とは? 新しくメンバーが増えるぞ! リソースが足りなくて進捗 が鈍かった負債解消に取り 組めるぞ!

Slide 7

Slide 7 text

Copyright© M&Aクラウド プロダクトの考古学とは? 実装で気になるところ があれば、どんどん修 正してもらって大丈夫 ですよ! とある1on1で

Slide 8

Slide 8 text

Copyright© M&Aクラウド プロダクトの考古学とは? プロダクトの理解が 深まったら、やりま すね! 気になるところはあるけど、 そもそもなぜこうなっているのか分から んのよ... 下手に口出しするのも... とある1on1で

Slide 9

Slide 9 text

Copyright© M&Aクラウド プロダクトの考古学とは? なぜこの取り組みが必要なのか? ● 新しく入ってくるメンバーがプロダクトの理解度を高めて、積極的に開発 (アーキテクチャの提案、負債解消)に取り組めるようにするためです ● プロダクト・アーキテクチャの成長過程を知ることで、設計思想を知る・理 解する機会になる 「なぜそうなっているのか?」が分からなければ、プロダクトの 実装は難しいし、アーキテクチャの改善・提案なんてもっと難しいよね

Slide 10

Slide 10 text

Copyright© M&Aクラウド プロダクトの考古学とは? プロダクト考古学のメリット ● なぜ現在の形になったのか?を新メンバーが知る・理解することが できる ● チームの設計思想について、触れることができる ● いずれ誰も分からなくなることを防ぐことができる

Slide 11

Slide 11 text

Copyright© M&Aクラウド この発表で聞けることは? 弊社での取り組みをご紹介 ● 目的は新メンバーが「思想を理解できる」と言える状態になること ● 運用の秘訣は ○ 頑張り過ぎない。持続可能なペースで ○ ディスカッションを促すこと

Slide 12

Slide 12 text

Copyright© M&Aクラウド 我々の考古学の取り組み 弊社での取り組みをご紹介 ● 毎週の社内LT会(30min)で気になった設計を共有する機会を作る ○ 最初は2名が推進メンバーになって、交代制でLTを行う ■ LTは5分そこそこで後は、ディスカッション ○ 資料はそこまで気合いを入れなくても大丈夫 ■ 分からないことがあれば、何が分からなかったのか そのまま共有する

Slide 13

Slide 13 text

Copyright© M&Aクラウド 我々の考古学の取り組み 弊社での取り組みをご紹介 ● LTで設計の肝になりそうなテーマを解説し、最後に問いかける ○ 古参メンバーはプロダクトの歴史を語る ○ 新メンバーはさらに不明点を掘り下げる ○ ディスカッション内容を整理して、オンボーディング資料に ● LTからの設計に関するディスカッションは結構盛り上がる! ○ みんな設計について語り合いたいんだね! ○ プロダクトについて語り会えるいい機会になる ● 毎回アンケートとふりかえりを実施

Slide 14

Slide 14 text

Copyright© M&Aクラウド 我々の考古学の取り組み

Slide 15

Slide 15 text

Copyright© M&Aクラウド 考古学で取り上げた題材を一部紹介 これまでにテーマに上がったものを参考に紹介 ● ドメイン層の構成と改善について ● この実装なら、このテスト!

Slide 16

Slide 16 text

Copyright© M&Aクラウド 考古学で取り上げた題材を一部紹介 ドメイン層の構成と改善について レイヤードアーキテクチャで設計されたプ ロダクトがあり、ドメイン層にあるクラス を整理しました。 こんなクラスがドメイン層にまとめられてるよ ● Value Object ● Entity ● Domain Service ● Repository ● その他ロジック

Slide 17

Slide 17 text

Copyright© M&Aクラウド 考古学で取り上げた題材を一部紹介 ドメイン層の構成と改善について 「複数のドメインが共存している狙いは何か?」という問 いかけがありました。 ドメイン層内で3つに分けるアイデアも提案された。 ● PhpStorm使っている限り、あまり困っていない ● 正し、VOとEntityが混ざっていてわからなくなっている場合 はある ● Entityは現状テーブルがauto incrementになっているので、 リポジトリから取得する時ぐらいしか得られない( ドメイン層 でEntityを生成することがほとんどない ) ● FilterRuleは外部から持ち込まれたもので、扱いが難しい ● HashMapはあまり使わず、DTO使いましょ

Slide 18

Slide 18 text

Copyright© M&Aクラウド 考古学で取り上げた題材を一部紹介 この実装なら、このテスト! Unitテストの「モックの泥沼」を脱却するために、 あえてDBデータにアクセスするDbIntegrationテ ストを用意した歴史を解説 「テストしやすくなったが、そもそも外部データに依存 した処理が多い設計に問題がある?」という、当時はな かった新しい視点も生まれる

Slide 19

Slide 19 text

Copyright© M&Aクラウド 考古学で取り上げた題材を一部紹介 この実装なら、このテスト! メンバーが実際にテストを書くときに意識してい ることを可視化する こんな議論があったよ ● 外部サービスもモック使わずにテストしたいよね ● テストを自由に書いて良いというが、自由に書い た実例が欲しい ● DbIntegrationテストは臭いもの(テストしづらい 設計)に蓋をしているのでは? ● PHPUnit_ver10でdataProviderの新しい書き方 が追加されるの知ってた?

Slide 20

Slide 20 text

Copyright© M&Aクラウド まとめ 20

Slide 21

Slide 21 text

Copyright© M&Aクラウド まとめ ● プロダクトの考古学を通じて、プロダクトの歴史背景やアーキテク チャの設計思想をまとめましょう! ● 新メンバーにはプロダクトの説明だけでなく、背景や設計思想を踏 まえて伝えよう! ● 日頃からチームでプロダクトについて語り合おう! ぜひ、あなたもプロダクトの考古学者になりましょう!

Slide 22

Slide 22 text

Copyright© M&Aクラウド ありがとうございました! 22