SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2019夏】セッションレポート(AD)

売り上げ5000億円を支えるシステムを目指して――レガシーECサイトが挑むモダナイゼーション【デブサミ2019夏】

【B-3】モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み

  • X ポスト
  • このエントリーをはてなブックマークに追加

 株式会社MonotaROは、1800万点以上(2019年5月時点)の間接資材を取り扱うBtoB向けオンラインストア「モノタロウ」を運営している。2019年度の売り上げは1300億円以上を計画。この数字は毎年増え続けているというから驚きだ。成長する事業を今後も支え続けるため、同社ではECプラットフォームのモダナイゼーションを進めている。長きにわたり開発・運用が続いてきたシステムを刷新するノウハウを、金谷敦志氏が語った。

  • X ポスト
  • このエントリーをはてなブックマークに追加

株式会社MonotaRO データマーケティング部門 国内EC-Aグループ 金谷敦志氏
株式会社MonotaRO データマーケティング部門 国内EC-Aグループ 金谷敦志氏

レガシーなシステムを刷新するためのテスト自動化

 オンラインストア「モノタロウ」は、15年以上も開発・運用が行われてきた老舗Webサイトだ。その開発の現場では、ソフトウェアや開発環境が徐々にレガシー化し、以下のような課題があったという。

  • システム構成が複雑になり、リリースや障害箇所の特定に時間がかかるようになった
  • 独自実装のフレームワーク・ライブラリ(当時はDjangoのようなスマートなサードパーティライブラリがなかった)
  • コピー&ペーストで追加されたプログラムが増え、改修や修繕を困難にしている
  • 手動テストが多いため、ソフトウェアが大きくなるにつれ品質を保つのが難しくなっている
  • 一部の開発者だけが仕様を把握している部分があり、他の開発者が手を入れづらい

 「モノタロウ」は3年間で売り上げが倍になるほどのスピードで成長している。今後もトラフィックやデータの量、開発者の数は増え続けていくだろう。「今の仕組みのままでは、この流れに耐えられないのでは?」という不安が、開発チーム内で出てきたそうだ。

 「将来的には『モノタロウ』のシステムを、5000億円の売り上げを支えるECプラットフォームにしたい。さらなる成長のために、システムのモダナイゼーションを行うことを決めました」

 モダナイゼーションを実現するには、レガシーなシステムに対してテストの自動化を行い、機能が保護されて壊れないような状況を作ること。その上で積極的なリファクタリングをし、ポータビリティを上げていくことが重要となる。

 既存ECプラットフォームには、自動化されたテストがそもそも存在していなかった。誰もテストを書いてこないまま、ピンポイントな手動テストに頼って15年以上も開発が続けられてきたのだ。そこで、まずはサービスの動作の正常性を担保するために、ソフトウェア全体としての挙動をテストする、受け入れテストの自動化に挑戦した。テストフレームワークには「Robot Framework」を採用。これは受け入れテストやRPA用によく用いられるフレームワークで、自然言語に近い書き方でもテストシナリオを記述できるという特徴がある。

 Robot FrameworkはPython製のフレームワークだ。「モノタロウ」のWebサイトもPythonで書かれており、開発者のローカル環境には必ずPythonがインストールされているため、導入のしやすさも大きな利点だった。

 また、UIテストの分野では、シナリオと画面固有の操作を分離する「Page Object Pattern」というデザインパターンがあり、受け入れテストのテストコードもPage Object Patternの考えを取り入れた構成にした。このパターンを用いると「シナリオ内に自然言語のテストケースのみを記載することで可読性が高まる」「画面固有の操作をパーツ化することで再利用性が高まる」などの利点を享受できる。

Page Object Patternを用いたテストコードの例
Page Object Patternを用いたテストコードの例

 受け入れテストを自動化した結果、開発者のうっかりミスで生じた不具合を早い段階で検出できるようになった。テストシナリオは順調に増えていき、PCサイト用だけではなくスマホサイト用のテストも追加された。さらに、Robot FrameworkでWebブラウザを自動操作できることを利用して、RPAツールとして使うメンバーも出てきた。

 次のフェーズとして、ユニットテストの自動化が推進された。「モノタロウ」のWebサイト開発ではソースコードの管理にGitを使っている。開発者は案件ごとにブランチを作ってプログラムを開発し、リリース版に統合するためのプルリクエストを作成してレビューする流れだ。そこで、新たなコードがpushされるたびに、ブランチ単位でユニットテストを動かし、その結果がプルリクエストの画面でわかるようにした。とはいえ、ユニットテストを書く習慣のなかったチームに、新しい文化を根付かせるまでには、いくつもの壁があった。以下のような施策を行うことで、テストを書く習慣を身につけてもらったという。

ユニットテストを浸透させるために実施した施策
ユニットテストを浸透させるために実施した施策

 「この結果、3カ月前は390個のテストケースだったものが、現在は1040個にまで増えました(発表当時)。テスト自動化の文化が全社的に浸透しており、徐々に理想の状態に近づいてきました」

次のページ
リファクタリング&ログ基盤の整備

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【デブサミ2019夏】セッションレポート連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11630 2019/09/12 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング