この登壇では、新しく入社してくれたメンバー達へのオンボーディングをするために、考古学した(弊社のプロダクトのアーキテクチャを研究、文言化して、社内で勉強会)取り組みについて発表させていただきます!
Copyright© M&Aクラウドオンボーディングのために私はプロダクト考古学者になりました!第152回PHP勉強会@東京 Akito.Tsukahara
View Slide
Copyright© M&Aクラウド 2自己紹介塚原彰仁AkitoTsukahara株式会社M&AクラウドAkitoTsukaharaakito_tsukahara
Copyright© M&Aクラウドこの発表で聞けることは?今日話すこと● プロダクトの考古学とは?● 我々の考古学の取り組み● 考古学で取り上げた題材を一部紹介● まとめ
Copyright© M&Aクラウドプロダクトの考古学とは?プロダクトの考古学● リリースからしばらくして安定稼働しているアプリケーションがどのように実装されてきたのか?現在の形になった経緯をまとめる取り組みです● プロダクト・アーキテクチャの成長過程を知ることで、設計思想を知る・理解する機会を作ること
Copyright© M&Aクラウドプロダクトの考古学とは?なぜこの取り組みが必要なのか?● 新しく入ってくるメンバーがプロダクトの理解度を高めて、積極的に開発(アーキテクチャの提案、負債解消)に取り組めるようにするためです
Copyright© M&Aクラウドプロダクトの考古学とは?新しくメンバーが増えるぞ!リソースが足りなくて進捗が鈍かった負債解消に取り組めるぞ!
Copyright© M&Aクラウドプロダクトの考古学とは?実装で気になるところがあれば、どんどん修正してもらって大丈夫ですよ!とある1on1で
Copyright© M&Aクラウドプロダクトの考古学とは?プロダクトの理解が深まったら、やりますね!気になるところはあるけど、そもそもなぜこうなっているのか分からんのよ...下手に口出しするのも...とある1on1で
Copyright© M&Aクラウドプロダクトの考古学とは?なぜこの取り組みが必要なのか?● 新しく入ってくるメンバーがプロダクトの理解度を高めて、積極的に開発(アーキテクチャの提案、負債解消)に取り組めるようにするためです● プロダクト・アーキテクチャの成長過程を知ることで、設計思想を知る・理解する機会になる「なぜそうなっているのか?」が分からなければ、プロダクトの実装は難しいし、アーキテクチャの改善・提案なんてもっと難しいよね
Copyright© M&Aクラウドプロダクトの考古学とは?プロダクト考古学のメリット● なぜ現在の形になったのか?を新メンバーが知る・理解することができる● チームの設計思想について、触れることができる● いずれ誰も分からなくなることを防ぐことができる
Copyright© M&Aクラウドこの発表で聞けることは?弊社での取り組みをご紹介● 目的は新メンバーが「思想を理解できる」と言える状態になること● 運用の秘訣は○ 頑張り過ぎない。持続可能なペースで○ ディスカッションを促すこと
Copyright© M&Aクラウド我々の考古学の取り組み弊社での取り組みをご紹介● 毎週の社内LT会(30min)で気になった設計を共有する機会を作る○ 最初は2名が推進メンバーになって、交代制でLTを行う■ LTは5分そこそこで後は、ディスカッション○ 資料はそこまで気合いを入れなくても大丈夫■ 分からないことがあれば、何が分からなかったのかそのまま共有する
Copyright© M&Aクラウド我々の考古学の取り組み弊社での取り組みをご紹介● LTで設計の肝になりそうなテーマを解説し、最後に問いかける○ 古参メンバーはプロダクトの歴史を語る○ 新メンバーはさらに不明点を掘り下げる○ ディスカッション内容を整理して、オンボーディング資料に● LTからの設計に関するディスカッションは結構盛り上がる!○ みんな設計について語り合いたいんだね!○ プロダクトについて語り会えるいい機会になる● 毎回アンケートとふりかえりを実施
Copyright© M&Aクラウド我々の考古学の取り組み
Copyright© M&Aクラウド考古学で取り上げた題材を一部紹介これまでにテーマに上がったものを参考に紹介● ドメイン層の構成と改善について● この実装なら、このテスト!
Copyright© M&Aクラウド考古学で取り上げた題材を一部紹介ドメイン層の構成と改善についてレイヤードアーキテクチャで設計されたプロダクトがあり、ドメイン層にあるクラスを整理しました。こんなクラスがドメイン層にまとめられてるよ● Value Object● Entity● Domain Service● Repository● その他ロジック
Copyright© M&Aクラウド考古学で取り上げた題材を一部紹介ドメイン層の構成と改善について「複数のドメインが共存している狙いは何か?」という問いかけがありました。ドメイン層内で3つに分けるアイデアも提案された。● PhpStorm使っている限り、あまり困っていない● 正し、VOとEntityが混ざっていてわからなくなっている場合はある● Entityは現状テーブルがauto incrementになっているので、リポジトリから取得する時ぐらいしか得られない( ドメイン層でEntityを生成することがほとんどない )● FilterRuleは外部から持ち込まれたもので、扱いが難しい● HashMapはあまり使わず、DTO使いましょ
Copyright© M&Aクラウド考古学で取り上げた題材を一部紹介この実装なら、このテスト!Unitテストの「モックの泥沼」を脱却するために、あえてDBデータにアクセスするDbIntegrationテストを用意した歴史を解説「テストしやすくなったが、そもそも外部データに依存した処理が多い設計に問題がある?」という、当時はなかった新しい視点も生まれる
Copyright© M&Aクラウド考古学で取り上げた題材を一部紹介この実装なら、このテスト!メンバーが実際にテストを書くときに意識していることを可視化するこんな議論があったよ● 外部サービスもモック使わずにテストしたいよね● テストを自由に書いて良いというが、自由に書いた実例が欲しい● DbIntegrationテストは臭いもの(テストしづらい設計)に蓋をしているのでは?● PHPUnit_ver10でdataProviderの新しい書き方が追加されるの知ってた?
Copyright© M&Aクラウドまとめ20
Copyright© M&Aクラウドまとめ● プロダクトの考古学を通じて、プロダクトの歴史背景やアーキテクチャの設計思想をまとめましょう!● 新メンバーにはプロダクトの説明だけでなく、背景や設計思想を踏まえて伝えよう!● 日頃からチームでプロダクトについて語り合おう!ぜひ、あなたもプロダクトの考古学者になりましょう!
Copyright© M&Aクラウドありがとうございました!22