エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

え!?たった2日でプロダクトの新機能を!?

こんにちは、エンジニアリングGの青木です。 入社して早半年が過ぎましたが、今はクラウド型電子カルテ 「M3 DigiKar」 の開発・運用に携わっています。

今回の記事では、先日行われた第2回開発合宿で開発したM3 DigiKarの新機能について、その開発の様子をお話したいと思います。 残念ながら新機能の詳細はここでお伝えできないのですが、すごく良い機能なんで期待してリリースをお待ちください!

開発合宿とは

開発合宿とは、オフィスから離れた合宿所で数人一組のチームになってサービスの改善やアプリの開発に集中して取り込むイベントで、 今回は10/12~10/14の約2日間で行われました。 合宿の全体感に関する内容は「エンジニアリンググループ第二回開発合宿を開催しました」を読んでいただきたいです!

今回の新機能開発はM3 DigiKar開発チーム2名 + スーパーエンジニア三角さん(なんとFY18新卒同期!)の3名で行いました。

f:id:blue0513:20181109124214j:plain:w450
開発の様子を俯瞰でどうぞ

そもそも M3 DigiKar とは?

みなさん、電子カルテってご存知ですかね? そうです。あの病院とかでお医者さんが診察中などに操作しているアレです。 特に、開発合宿で新機能を開発することになった M3 DigiKar はAI搭載型のクラウド型電子カルテです。

従来の電子カルテとの大きな違いとしては、医師の操作を学習し、医師がカルテ入力に割く時間を省略できる機能を多く持っているという点です。そのため今回開発する新機能も、「自動学習機能」や「操作簡略化」を目指したものでした。リリース前なので詳細を語れないのが本当に残念です。

新機能開発に対するスタンス

さて、ここで問題になったのが今回の合宿のスタンスです。合宿期間は2日間しかないので、じっくりと腰を据えていては新機能の開発が進まないのは明らかでした。
そのため、この合宿では「新機能のざっくりとしたプロトタイプを作る」ことを目標にしました。

作ったプロトタイプを新機能自体の効果検証や新機能に対するユーザからのヒアリングに活かそうということでビジネスサイドとも合意を形成しておきました。

ですので今回の合宿であえて やらなかったこと

  • 異常系の実装
  • コードレビュー
  • ユニットテストの実装
  • 既存テストとの不整合の解消

などです。

本来プロダクトをリリースする際には気をつけなくてはならない点を無視することで、とにかく速くプロトタイピングしてみました!

開発の様子

速度重視のプロトタイピングでしたので、開発も普段のソレとは異なる方針で行いました(その準備として、事前に新機能の要件やざっくりとした仕様をビジネスサイドの方と相談しておきました)。

① ざっくりと役割分担

M3 DigiKar では、ある一つの機能については大体1人が担当して実装するのが普段の開発方針ですが、今回は新機能を3人のスーパーエンジニアが寄ってたかって一斉に実装します。なので役割分担は「各人の得意分野」を考慮しつつ「実装箇所が他人の実装箇所と被らない」ように調整していきました。

この作戦はかなり成功して、お互いが同時並行的に作業できますし、得意な箇所なので割とスムーズに実装が進みました。

② 実装とマージと修正と、繰り返すことN度

① で実装が終了した箇所から一つの branch(仮に prototype-branch とします)に順次マージしてきました。

一つのマージが終わるごとに各人が pull して、コンフリクトが起こると誰か手の空いた人間が逐次コンフリクトを解消していく手法をとり、常にお互いの作業 branch は最新を保つように意識してました。

こちらの手法も割と成功して、コンフリクトが起こったとしても最小限に抑えられ、担当箇所の開発初期段階で発生するため、リカバーが容易でした。

そしてprototype-branch がある程度まで進んだ段階で、新機能を操作してみて、その結果を一つのモニタに映して各人が意見を出し合って軌道を修正しました。 これを延々と繰り返し、新機能をプロトタイピングしていきました。

どんどんと機能ができていく様子や不具合が即修正されていく様子をワイワイと見るのは楽しかったです。

③ クオリティをあげていく

② がある程度進むと、新機能のざっくりとした部分は実装できました。ここまでで大体1.2日程度かかった感じですね。

ただ、ここまでの段階ではとりあえず完成を目標にしたので、あまり見た目や挙動の細部にこだわらずに作っていました。

なので残りの半日くらいはプロトタイプのクオリティをあげていく作業に移りました。 css の調整やUX 的な部分など、泣く泣く無視していた部分を実装できたので、エンジニアとしては嬉しい時間でしたね。

そして完成へ ......

正直合宿前は完成するかどうか半信半疑でしたが、完成してしまいました.....信じられません! いくつか勝因があったと思うので、振り返ってみました。

f:id:blue0513:20181109124120j:plain
2日間の戦いの跡

開発で良かった点

開発方針を各人にある程度一任したのは大きかったです。個々人がやりやすいように作業できたので、実装とマージと修正のサイクルがかなり速く回って、結果としてプロトタイプ(本当の初期段階)の完成が早かったです。

当然DBのテーブル構成やモデル定義などの大枠は3人でざっくり決めますが、それ以外の細かな設計や実装は各人に任せました。 お二人ともスーパーエンジニアなんで「じゃあ、あとはいい感じにやっときます」と言ってサッと期待以上のモノを出してくるのは流石でした。

開発の改善点

これは全体の改善点というか僕個人の改善点なんですが、速く開発することを意識するあまり命名が疎かになってしまいましたね......。例えば、オブジェクト生成するメソッドなのに set という prefix をつけたり、よくよく考えると実態と異なるテーブル名をつけたりしてチームを混乱に陥れてました.....。ごめんなさい。

ここから得られる教訓は「命名はめっちゃ大事」ってことですね。 みなさんなら知ってますよね。 僕も知ってるはず......でしたが、まだまだ実践できてないですね。頑張ります!

おわりに

今回は第2回開発合宿で取り組んだM3 DigiKarの新機能開発について、その概要をざっくりと書かせていただきました!

いつもと違った環境で、いつもと違ったメンバーと、いつもと違った開発スタイルでのプロトタイピングは非常に刺激的であり、勉強にもなりました。
次回もぜひM3 DigiKarチーム総出で参加したいと思ってます!

We are hiring!!

こんな感じでスピーディーなプロトタイピングをガンガン行いつつ、良いプロダクトをチームメンバーと協力して開発していけるのもエムスリーのいいところだと思ってます!

もしエムスリーの開発に興味がありましたら、カジュアル面談などいつでもウェルカムですので、ぜひ遊びに来てください!!

jobs.m3.com