株式会社AzitでRailsを使用したバックエンド開発をしている鈴木です。
今回は、Azitでのチーム開発に少しでも興味を持ってもらえるように去年(2022年)チームのコミュニケーション面で改善したことを紹介します。
改善した項目
- DesignDocのアップデート
- 定期的に話し合うために週次でのディスカッション・振り返りをするようにした
- チームで共通の認識をもつために社内読書会をおこなうようにした
DesignDocのアップデート
私達のブログの記事でDesignDocを導入したことを書きましたが、DesignDocを運営をしていく中で以下の問題にあたりました。
- Draw.ioにログインをしている状態じゃないとNotion上で図が見られない
- SUDOモデルだと実装に入るために必要な情報が不足している
Notion上でDraw.ioを見れないときがあるのをMermaidを使用して改善した
以前のDesignDocではDraw.ioに図を書いたものを貼り付けていたのですが、Draw.ioにログインをしている状態じゃないとNotion上で図が見られなかったり、Notion上では変更することができないという問題がありました。
それを改善するために、MermaidというNotion上からでも編集できるテキストで図形を描画するツールを使用しました。
Mermaidを使用すると下のような図を作成することができます。
下のようなNotionでコードを入力するところでMermaidを使用して以下のような記述をすると上のような図を書くことができます。
これにより、最初の設計時に間違った内容だったとしてもドキュメント内(Notion)で簡単に編集をすることができ設計図を修正していくことができるようになりました。
チームで実装をするために必要な設計をして共通認識をもったまま実装を開始できるようにした
DesignDocは以下のことを書くようにしています。
- 要件定義書のへのリンク
- PdMとBizで話し合ったことの開発チームへの共有を簡単にしています
- コンテキストマップのアップデート
- ドメインの変更について話し合ってドメインを適切にアップデートをしていくことができるようにしています
- ドメインモデリング
- 今後の設計に必要な概念や用語を洗い出します
- ユースケース
- ドメインモデリングをした概念や用語をもとにユースケースを定義します
- ここからは、ICONIX(ユースケース駆動)を参考にしています
- ユースケース記述
- ユースケースを実装するために必要な項目を記述します
- ロバストネス図
- プロジェクトを網羅的に理解できるようにするために作成します
- ドメインオブジェクト図
- 集約などについて考えるために作成します
- ER図
- ドメインオブジェクト図で考えた内容をRDBで作成できるようにします
- ドキュメントの抽象度を高くしたいためテーブル名のみを記述します
- カラムも記述するとソースコード内のマイグレーションファイルに記述している内容と乖離が発生しやすくなってしまいます
- UseCaseクラスの模擬コード
- 実装のイメージを共有するため擬似コードを書く
このように、細かく設計を作成していくことですぐに実装に入ることができるようになります。
設計するときは必ずモブプロをすることで設計に関する議論をリアルタイムでするのと認識の共有をしていくことができます。
また、1回ではすぐに実装をするドキュメントを作成することはできないので、後工程で修正する必要があったら前工程の図を更新するようにしています。
定期的に話し合うために週次でのディスカッション・KPTをするようにした
私達のチームはフルリモート・コアタイム無しのフレックスです。また、Gatherなどのようなコミュニケーションツールも使用していないです。
そのため、なにもしなかったらただモクモクとタスクをこなして、チームで適切なコミュニケーションをしながら仕事をすることやチームを通しての成長をするという機会があまりとれないです。
その問題を解決するために、週次で各メンバーが今考えていることを話すためのディスカッションと簡単なKPTをするようにしました。
ディスカッション
ディスカッションでは、チームに関することとリファクタリングに関することを相談できるようにしています。
チームに関すること
チームに関することはこれができると良くなるのではないかという提案や相談したいこと、認識を揃えたいことなどチームに関することならなんでも良いです。
話し合うこと自体が目的な部分もあるのでここに書いたことは必ずしもおこなわなくてもいいです。
一度話したことに実際に着手するときは、チームではすでに話し合っているので実施しやすいです。
実際に話し合ったこと
- DDD Learningの次の社内勉強会で扱う本について
- RBSさわっています
- Rspecの記法を統一するために,RubocopのRspecを導入したい
リファクタリングについて
リファクタリングは、現在は定例MTGに参加しているメンバーが全員バックエンドなのでRailsのリポジトリのコードでリファクタリングしたいことについて話しています。
今実装していたコードに関してはPRでレビューをすることができますが、以前実装した部分やモジュールレベルでのレビューはPRではできないです。
そのため、特定のタイミング(週次MTG)で話し合っています。
ここで話したことでおこなうことは、話し合ったことを忘れないようにするためにJIRAでチケットにしています。
実際に話し合ったこと
- UseCaseのクラス名について
- テストコードの粒度について
- RspecやOpenAPIで
.json
等のURL末尾によるAcceptの指定をやめる
KPT
フルリモートなため基本的に一人で仕事をすることになりますので、チームがどういうことをおもって仕事をしているかがわからないです。
わからなかったとしても直近の仕事をする上では問題はないですが、チームメンバーがどういうことをおもっているかが
わかるとお互いのことを知ることができチームビルディングの一つとして機能すると思いますので長期的には有効だと思います。
お互いのことを知るための手軽な方法はKPTだと思いますので、KPTをしたときにチームとして改善したほうがいいということを話すこともできると思います。
読書会の実施
チームの共通認識を作っていったほうが、コードレビューやコードの共同所有が効率的におこなえるという考えから勉強会の実施をすることにしました。
最初は、テスト駆動開発入門や実践ドメイン駆動設計などを扱っていましたが、チームとしてDDDに本格的に取り組むにあたりLearning Domain-Driven Design(以下Learning DDD)を読んでいくことにしました。
Learning DDDの読書会について
この本は最近発売したばかりなので、イベントソーシングドメインモデルやイベントストーミングなどの最新のトピックについても扱っています。
また、本の説明がわかりやすかったり、章末にある問題をチームで話し合いながら答えを探していくことにより1人で読むよりも理解度がたかくなります。
この本を読書会で扱ったことにより、チーム全体でDDDの共通認識をもつことができるようになっているのでこの本を読書会で扱ってよかったです。
求人
この記事に書いたように去年だけでも多くの改善をしていますが、今年はエンタープライズ規模のお客様などを含んだより多くのお客様にCREW Expressを使用してもらえるように、様々なお客様のニーズに答えられるようにしていく必要があります。
一緒に機能を開発したり、開発効率の改善を一緒にしてくれる方を大募集しています。