売り上げ5000億円を支えるシステムを目指して――レガシーECサイトが挑むモダナイゼーション【デブサミ2019夏】
【B-3】モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み
株式会社MonotaROは、1800万点以上(2019年5月時点)の間接資材を取り扱うBtoB向けオンラインストア「モノタロウ」を運営している。2019年度の売り上げは1300億円以上を計画。この数字は毎年増え続けているというから驚きだ。成長する事業を今後も支え続けるため、同社ではECプラットフォームのモダナイゼーションを進めている。長きにわたり開発・運用が続いてきたシステムを刷新するノウハウを、金谷敦志氏が語った。
レガシーなシステムを刷新するためのテスト自動化
オンラインストア「モノタロウ」は、15年以上も開発・運用が行われてきた老舗Webサイトだ。その開発の現場では、ソフトウェアや開発環境が徐々にレガシー化し、以下のような課題があったという。
- システム構成が複雑になり、リリースや障害箇所の特定に時間がかかるようになった
- 独自実装のフレームワーク・ライブラリ(当時はDjangoのようなスマートなサードパーティライブラリがなかった)
- コピー&ペーストで追加されたプログラムが増え、改修や修繕を困難にしている
- 手動テストが多いため、ソフトウェアが大きくなるにつれ品質を保つのが難しくなっている
- 一部の開発者だけが仕様を把握している部分があり、他の開発者が手を入れづらい
「モノタロウ」は3年間で売り上げが倍になるほどのスピードで成長している。今後もトラフィックやデータの量、開発者の数は増え続けていくだろう。「今の仕組みのままでは、この流れに耐えられないのでは?」という不安が、開発チーム内で出てきたそうだ。
「将来的には『モノタロウ』のシステムを、5000億円の売り上げを支えるECプラットフォームにしたい。さらなる成長のために、システムのモダナイゼーションを行うことを決めました」
モダナイゼーションを実現するには、レガシーなシステムに対してテストの自動化を行い、機能が保護されて壊れないような状況を作ること。その上で積極的なリファクタリングをし、ポータビリティを上げていくことが重要となる。
既存ECプラットフォームには、自動化されたテストがそもそも存在していなかった。誰もテストを書いてこないまま、ピンポイントな手動テストに頼って15年以上も開発が続けられてきたのだ。そこで、まずはサービスの動作の正常性を担保するために、ソフトウェア全体としての挙動をテストする、受け入れテストの自動化に挑戦した。テストフレームワークには「Robot Framework」を採用。これは受け入れテストやRPA用によく用いられるフレームワークで、自然言語に近い書き方でもテストシナリオを記述できるという特徴がある。
Robot FrameworkはPython製のフレームワークだ。「モノタロウ」のWebサイトもPythonで書かれており、開発者のローカル環境には必ずPythonがインストールされているため、導入のしやすさも大きな利点だった。
また、UIテストの分野では、シナリオと画面固有の操作を分離する「Page Object Pattern」というデザインパターンがあり、受け入れテストのテストコードもPage Object Patternの考えを取り入れた構成にした。このパターンを用いると「シナリオ内に自然言語のテストケースのみを記載することで可読性が高まる」「画面固有の操作をパーツ化することで再利用性が高まる」などの利点を享受できる。
受け入れテストを自動化した結果、開発者のうっかりミスで生じた不具合を早い段階で検出できるようになった。テストシナリオは順調に増えていき、PCサイト用だけではなくスマホサイト用のテストも追加された。さらに、Robot FrameworkでWebブラウザを自動操作できることを利用して、RPAツールとして使うメンバーも出てきた。
次のフェーズとして、ユニットテストの自動化が推進された。「モノタロウ」のWebサイト開発ではソースコードの管理にGitを使っている。開発者は案件ごとにブランチを作ってプログラムを開発し、リリース版に統合するためのプルリクエストを作成してレビューする流れだ。そこで、新たなコードがpushされるたびに、ブランチ単位でユニットテストを動かし、その結果がプルリクエストの画面でわかるようにした。とはいえ、ユニットテストを書く習慣のなかったチームに、新しい文化を根付かせるまでには、いくつもの壁があった。以下のような施策を行うことで、テストを書く習慣を身につけてもらったという。
「この結果、3カ月前は390個のテストケースだったものが、現在は1040個にまで増えました(発表当時)。テスト自動化の文化が全社的に浸透しており、徐々に理想の状態に近づいてきました」
この記事は参考になりましたか?
- 【デブサミ2019夏】セッションレポート連載記事一覧
-
- 早く、安く、うまくシステムを刷新! 驚異的なパフォーマンスを誇るユニケージ開発手法【デブサ...
- 売り上げ5000億円を支えるシステムを目指して――レガシーECサイトが挑むモダナイゼーショ...
- エンジニアが自立し、楽しく開発できる組織の実現には何が必要か?【デブサミ2019夏】
- この記事の著者
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営する開発者のための情報メディアです。日々の開発に取り組むエンジニアやテクノロジーを学びたい方に向けて、プログラミングやAI活用、開発ツール、エンジニアの学びとキャリアに関する記事をお届けしています。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア
