はじめに
こんにちは。kintone開発チームでWebエンジニアとして活動している植村です!
今回は、以前の記事で紹介したアプリ設定チームについて、エンジニア目線での活動紹介をしたいと思います! 自分は2022/3にkintone開発エンジニアとして入社しました。 そして同年の7月にアプリ設定チームに、立ち上げから参入させていただきました。 今回はアプリ設定チームにおける開発の様子を、1スプリントの流れをなぞる形で紹介していきたいと思います。
※ cybozuにkintone開発エンジニアとして入社して、どんな感じで開発やってるの?みたいな疑問が少しでも鮮明になればと思います!
スプリントの流れ
kintone開発チームでは、スプリントは木曜日に始まり、水曜日に終わります。 アプリ設定チームのスプリントは次のようなサイクルで、バックログを開発しています。
※スプリントなどのスクラム用語については、別途スクラムガイド(PDF)などを参照ください。
曜日 | 時間 | 活動 |
---|---|---|
木 | 14:00 ~ 15:00 | スプリントプランニング |
毎日 | 11:00 ~ 11:15 | 朝会 |
毎日 | 11:30 ~ 17:00 | 開発(モブ) |
毎日 | 13:15 ~ 14:00 | リファインメント |
水 | 15:00 ~ 16:00 | スプリントレビュー |
水 | 16:00 ~ 17:00 | 振り返り |
※時間は現時点(2023/02)のもので、今後流動する可能性があります。
実際はこの他にも適宜な打ち合わせが都度入りますが、基本はこのスケジュールをベースにスプリントにおける開発を進めています。
スプリントの活動紹介
ではここから、スプリントの流れに沿って、アプリ設定チームの活動詳細を紹介していきたいと思います!
スプリントの始まり
スプリントはスプリントプランニングから始まります。
スプリントプランニングでは、1週間のスプリントにおけるゴールと、ゴールに基づく開発対象のPBI(プロダクトバックログアイテム)を決定します。 スプリントゴールは、PO(プロダクトオーナー)が主体となって、チームメンバと相談しながら決定しています。 アプリ設定チームでは、1年の中でどのような開発をしていくかというロードマップを用意しており、ロードマップや、kintoneチーム全体の開発状況を加味しながらスプリント内でのゴールを決定します。
スプリントゴールが決まれば、次はゴールに基づき開発対象のPBIを決定します。 バックログの内容は、前回記事で紹介したディスカバリー活動で作成されたPBIが中心となりますが、リファクタリングやライブラリの更新など、 開発体験を向上させるバックログなども、エンジニア中心に作成しており、これらを総合的にPOが優先度を判断し、取り組むバックログを決めています。
アプリ設定チームでは、バックログを次のようなフローでこなしていきます。
PBIのプランニング
開発対象のPBIが決まれば、それを優先度の高い順に一つずつ開発していきます。
アプリ設定チームでは、実際にエンジニアがコーディングを始める前に「PBIのプランニング」を実施しています。 こちらはスプリントプランニングやリファインメントとは別のタイミングで実施する、チーム独自のプランニングになっています。 リファインメントで議論した内容をもとに詳細を詰めていくという位置付けになります。
PBIのプランニングでは、QAの方も参加し(場合によってはデザイナも)、コーディングやテストを進めていく上での懸念点や方針について議論します。
試験の進め方をQAと議論して決める
PBIプランニングの結果、既存の試験に変更・追加が必要なものがあれば、大筋の試験の進め方をQAと一緒に議論しながら決めていきます。 この場では、今回改修する範囲についてユニットテストでカバーするのか、E2Eが必要か、等も含めて議論します。 この時点で、PGが作るべき自動テスト(ユニットテスト・E2E)の大まかな観点が出てきます。
こういった、テストに関するコミュニケーションがしっかりしていると、すごく安心して開発に臨めますね。
関係者で懸念点の洗い出しや開発方針が固まれば、仕様書の修正を行った後、コーディングフェーズに入ります。
バックログの実装(コーディング)
ここから、エンジニアの腕の見せ所でもあるコーディングフェーズに突入します🔥
基本的に、コーディングはモブプログラミングで行っており、以下のようなツールを使って進めています。
- コミュニケーション:Zoom、Slack
- IDE:IntelliJ IDEA
- ソードコード管理:GitHub
アプリ設定チームにおけるモブプログラミングでは、約30分単位でドライバを交代しながらコーディングを進めています。
ドライバがナビゲータの指示に従いながら、コードを作成し、交代のタイミングでGitにコミットし次の人へとへバトンを回すようなイメージになります。 (30分という時間を守るのが意外と大変です・・・)
所感ですが、モブプログラミングでは、一人で作業を進める時と違い、困ったら即座にメンバーに相談ができる点など、やってみて気づくメリットが非常に大きかったです。 一方で一人で考えたい場合や分担した方が効率が良いケースもあるので、この辺りはケースバイケースです。
モブプログラミングの様子については別の記事にも紹介されていますので、是非ご参照ください!
モブ中の役割分担とかあるの?
モブ中は基本的に役割はフラットで、ドライバーがコードを書きつつも、他の人とやりとりが必要になった場合、コミュニケーション等の窓口も行います。
そのため、メンバーAさんがPMに確認の連絡をする→PMがAさんに回答する→ドライバ交代→メンバーであるBさんが続けてPMと連絡する、みたいな流れが頻繁に起きています。
モブに慣れていない最初の頃は違和感を感じましたが、責任が個人ではなくチームにある感じがして、個人的には心理的な安全性にもつながっていると思います。
扱う技術について
コーディングについては、フロントエンド・バックエンドを両方担当します(特にフロントエンド担当・バックエンド担当のように分かれていない)。
フロントエンドについては、主にClosure Tools (Closure Library、 Closure Compilerなどの総称)を使って開発していますが、 最近はClosure Toolsから React へと置き換えるフロリアチームの活動により、一部開発がReactで行えるようになっています。 そのため、アプリ設定チームで扱う領域としては徐々にReactが主流となってきつつあります。
バックエンドについては、Spring Boot・MySQLなどを用いて開発を行なっています。 特にアプリ設定画面の領域については、フォームやプロセス管理など、kintoneの中でも有数の難易度の高い作り込み箇所が存在しており、 理解するまでに時間はかかるものの、kintoneのコアの技術に触れることで、非常に勉強になることが多かったです(自分じゃ絶対に思いつかない・・・・ってなりました)。
技術スタックの詳細については、こちらに記載されていますので、興味あればご参照ください!
状況の共有は朝会で
アプリ設定チームでは、毎日朝会を実施しており、チーム内でバックログの状況を共有しています。
時間は概ね15分ほどで、議論に時間がかかりそうな話題があれば別途どこかで時間をとって議論をします。
アプリ設定チームの朝会では、日々消化済みSPなどメトリクスを設定しており、日々の進行状況が見える化されています。 こういった指標があると、スプリントのゴール達成に向けて着実に進んでいる気がして、モチベーションが上がりますね。
朝会のノートはエンジニアが持ち回りで作成しており、日々自由度が増してきています(笑)
スプリントの終わり
スプリントの最終日には、スプリントレビューがあります。スプリントレビューではこのスプリントで完成させた機能紹介のデモを行います。
参加者には他チームの開発者やチーム外のステークホルダーも含まれ、様々なフィードバックを貰える場になっています。 エンジニアとしてはデモ中に問題が起きないか、最初は固唾を飲んで見守ることが多かったです(笑)
スプリントレビューが終わると、チームで振り返りを行います(所要時間は1Hほど)。
アプリ設定チームでは振り返りのフォーマットはかなり流動的(!)です。 KPTになったりFDLになったり、SM(スクラムマスター)の方が工夫を凝らして考えてくれるので飽きないです。 自分はスプリント内で気になったことや改善したいことをメモっておき、この振り返りの場で共有することが多いです。
振り返りが終われば、スプリントは終了です!体感的には1スプリントは一瞬で過ぎ去ります。
モブ以外の時間の過ごし方
アプリ設定チームでは、エンジニアはモブ以外の時間(自分の場合は9:00~11:00 / 17:00~18:00)は探求時間として各々自分自身の学習のために使用することができます。
自分の場合は、個人で参加している別のプロジェクトのタスクをこなしたり、勉強会などの参加、あとは自分で気になった技術の勉強やモブの中でわからなかったことのキャッチアップなどをして過ごすことが多いです。 特に最初の方はモブ中で理解が追いつかないことが多々ありましたので、こういった時間でキャッチアップができるのは非常に助かりますね。
最後に
今回はアプリ設定チームにおけるエンジニアの活動の様子をスプリントになぞって紹介しました。もしこの記事を読んでサイボウズやkintone開発チームに興味を持った方がいれば、次のリンクからご応募お待ちしています!