Cake.jpのバージョンアップについて語った、PHPカンファレンス福岡2024

Cake.jpでバックエンドエンジニアをしている山内です。

2024/06/22(土)、PHPカンファレンス福岡2024に参加してきました。

弊社からは代表の高橋、私の2名で参加しました。

今回は、登壇もしてきたので、当日の発表内容や参加してみての感想を紹介します。

登壇

Cake.jpのバージョンアップの歴史を語ってきました。

https://fortee.jp/phpcon-fukuoka-2024/proposal/83f31e89-1286-4d6a-b015-c46382a6b14e

オンラインでの登壇は経験がありましたが、カンファレンス登壇は初めてでした。

緊張のせいで客席の方を見る余裕は一切なく、ひたすら手元のPC(カンペ)と映し出されるスクリーンを見ていました(笑)

発表内容

こちらが登壇した際の資料です。

https://speakerdeck.com/kechiiin/ban-nian-kaketephp5-dot-6karaphp7-dot-4madebaziyonatupusitaku-lao-togong-fu-phpkanhuarensufu-gang-2024

登壇内容を一部紹介すると、

テスト環境がコンテナ化されていなかったので、それをやった話や(P.9)

バージョンを0.1ずつ進めていった話や(P.18)

バージョンアップの際に対応したものの話や(P.46)

動作確認で工夫した話など(P.67)

こういった話をしてきました

参加の感想

登壇の感想

前述したように非常に緊張をしていました。

発表自体は概ね練習通り進めることができたのでよかったです。

多くの方の前で話す機会はそう多くはないので、良い経験になりました。

 

聞いてくださった方々から、感想(フィードバック)もいただけたので一部ご紹介させていただきます。

 

バージョンアップって本当に大変なことなんだなぁ…と思いました。色々な工夫を伺えてよかったです。ありがとうございました。

 

バージョンアップ大変ですがビックバンリリースをしないように進めててすごいと感じました。

バージョンアップ前後の画面htmlの比較も良いですね。

面白い発表でした

 

フィードバックはありがたい限りです。

 

機会があれば、またカンファレンスでの登壇をしたいと感じたので、今後もカンファレンスにはプロポーザルを出して行こうと思っています。

全体の感想

トークは、その他コンテンツも盛りだくさんだったため、半分くらいしか聞けませんでした汗

トーク以外の時間は主に、スポンサーブース巡りや、カンファレンスで知り合った方との交流、Ask the Speaker(トーク後の質疑応答)などに参加させていただきました。

トークを聞いて学べるというのも良い点ですが、懇親会や(非公式ですが)前夜祭などに参加して、他社のエンジニアと関われるというのもカンファレンスの醍醐味だと思っています。

今回はPR TIMESさん主催の「PHPカンファレンス福岡2024・前日Meetup」、Fusicさん主催の「PHP Conference Fukuoka After Hack!!」にも参加して、交流を楽しんできました。

トータルで非常に有意義なカンファレンスだったと感じました。

最後に

PHPカンファレンス福岡2024スタッフの皆さん、ありがとうございました。

初参加でしたが非常に楽しかったです。

Cake.jpの話

今回は個人的に参加したカンファレンスでしたが、Cake.jpでは過去、PHPerKaigi2022, PHPerKaigi2023, PHPerKaigi2024にエンジニア一同参加しています。後日、感想を言い合う会をしたりもして、学びの共有やモチベーションアップを行っています。

また、Cake.jpでは定期的にLT会をしていますので、ご参加お待ちしております!

https://cakejp.connpass.com/

「コンテキストの共通化」を加速させるために1年以上モブプロを続けた結果

こんにちは、Cake.jp技術部の中村です。

Cake.jp技術部では、週に2回モブプログラミング(以下、モブプロ)を実施しています。導入してから1年以上経過して、導入してよかったこと、課題について紹介させていただきます。

1. モブプロとは

Cake.jpでは、1つの画面を3人以上のエンジニアで共有し、コーディングを行うことをモブプロとしています。一般的なモブプロと異なり、コーディングを進めていく「ドライバー」とそれを見守り、意見をいう「メンバー」に分かれて行っています。(一般的なモブプログラミングでは、「ナビゲーター」の指示の元「ドライバー」がコーディングを行っていくと思いますが、Cake.jpでは「ナビゲーター」不在で行っています。)

全エンジニアがフルリモートで業務を行っているので、Slackのハドルミーティングを使って画面を共有しています。(ハドルミーティングの画面の拡大/縮小機能、画面共有への手書き機能を駆使して行っています。)

参加者は固定せず、グループ表を作り毎回同じ組み合わせにならないように実施しています。その週に各自が割り当てられたタスクや、設計の議論、プランニングにのらなかった軽微な不具合を修正する場だったりと、そのときどきによって内容を変えながら行っています。

2. Cake.jpでなぜ取り入れたのか

Cake.jpでは大半のメンバーがフルリモートで活動しています。モブプログラミングをとりいれるにあたり、当時抱えていた3つの課題の解決を目標として導入しました。

 

(1) 技術的な内容を相談する場が不足

開始当初は同期のコミュニケーションが朝会しかなく、朝会が終わると非同期でそれぞれが作業するというスタンスを取っていました。朝会にはエンジニア以外のメンバーも参加していたことや、そもそもの開催時間が短いことから、コードについての相談の場がGitHubのPRでのやり取りでしか生まれ辛い状況でした。


(2) 技術の共有

チームにはCake.jpの在籍年数やエンジニアになってからの年数がまちまちのメンバーがいます。コードレビューの場では納期の観点から細かい部分についての指摘がついつい後回しになってしまったり、指摘をもらってもコードに反映ができないということがよくあり、FBサイクルがうまく働かないときがありました。

(3) プロダクトの仕様の共有

当時のチームは、3人のチームで大きめのプロジェクトが2本走っており、どちらかのプロジェクトを専任している状況でした。そういう状況下において、プロジェクトをまたいだレビューが頻繁に行われていました。そのため、以下2点の課題を感じていました。

・PRでコードはわかるけど、仕様→コードの関連性がわかりづらい。

・ドキュメントに残っていないことがある。

Cake.jpでは開発メンバーの役割として、運用業務も含まれています。障害発生時やお問い合わせへの対応をスムーズにできるようにするため、システム全体やプロジェクトの仕様を把握しておくことが重要でした。

 

1人1回ドライバーを担当できるように週3回からスタートさせていきました。もともとモブプロとは別でコードリーディング会というものを行っており、プロダクトコードを1つの画面で複数人で同時に読むという文化があったため、スムーズに導入することができたと感じています。

モブプロを通して、IDEの使い方の習熟度が上がったり、プロジェクトで導入した新しい技術(React)についてエンジニアの知見が広がったり、設計思想の共有(DDDを意識した設計に取り組んでいる)ができたりしていることを実感しました。

組織変更に伴いチームが合併した際に、モブプロはチームの取り組みからエンジニア全体の取り組みとして活用しています。

3. 現状出ている効果と課題

2であげた3点の課題は、一定達成されたと感じています。

(1) 朝会以外でもコミュニケーションを取ることができ、他エンジニアとの接触頻度が上がった。

 

(2) 技術面では、ツールの使い方を習熟したり、単体テストを書けるようになったりと効果がありました。週に一度行われているチームの振り返りでは、モブプロを行ったことにより、よりよいコーディングを行うことができた。などの意見も出ています。
自身が習得した新たな技術のよい実験場として利用されることがあり、ほかメンバーの学びにもつながりました。

 

(3) プロダクトの仕様共有では、仕様に精通しているメンバーと進めることでタスクの理解がより進んだ例がありました。(未然に不具合を防げているのがかなり大きいです。)

一方で会を続けていくうちにわかった課題として、

(1) 自分が持っているタスクの進行状況によって、モブプロへのタスクの持ち込みができず、ドライバーになれないエンジニアがいた。

 

(2) 持ち込むタスクによっては、ただ作業を見守るだけのモブプロが発生した。

 

これらの課題を解消するために、軽微な不具合修正タスクをストックして、持ち込みタスクがないメンバーでもドライバーができるように体制を整えました。

不具合修正のタスクはただ直すだけではなく、「生まれた背景」「原因」「修正方法」の議論を行っております。議論を通して、「コミュニケーション」・「技術の共有」・「仕様の共有」ができており、単なる不具合修正以上の効果が生まれていると感じています。

今後も継続して活動を続け、エンジニア全員で学習を続けていきたいと思っています。