こんにちは。モノタロウでフロントエンド寄りの開発をしている、陳です。
今回はモノタロウの新フロントエンドのメインフレームワーク選定についてお話しします。
選定結果から言うと、モノタロウ独自の7つの選定基準をもとに、Reactを選ぶことになりました。
まず、モノタロウの現フロントエンドについてざっくり説明します。
モノタロウは2002年から、PythonとJavaScriptでECサイトを開発してきました。
基本構成として、サーバサイドのPythonでHTMLを生成し、クライアントサイドのJavaScriptでカートインなどの動的処理を補完する形ですが、実はこの構成で違うアーキテクチャのものが2系統(以下系統A、系統B)あります。

長年にわたり開発していく中で、色々な課題が出ており、利用者/開発者目線別に抜粋しました。
利用者目線で見ると
開発者目線で見ると

そこで、「社内フレームワークの特徴と特徴による問題」の表を作ってみたら、挙げた課題の中、社内独自フレームワークによるのが大きいとわかりました。
| 社内独自フレームワークA・Bの特徴 | その特徴による問題 |
| 画面操作時は基本ページ全体をリロード |
|
| Python(サーバ側)とJavaScript(クライアント側)によるUIコンポーネント実装 |
|
| jQueryと生のJavaScriptによるインタラクティブ処理実装 |
|
また、「中途入社した人が戦力になるまで時間がかかる」など採用・コミュニティの観点でも、今後は社内独自フレームワークを使い続けたくない意見が多いです。
というわけで、
フロントエンドを刷新したい!
既存2系統のフレームワークも世間一般的なものに統一したい!
と社内キーマンの多くが共通の認識を持つようになりました。
フロントエンドを刷新するため、新フロントエンドプロジェクト(新FE PJ)が立ち上げられました。
最初のプロジェクト関係メンバーが、まずフロントエンドの最新技術動向について調べました。
主流なフレームワークはVue.js, React, Angularの3つとわかったのですが、どれが良いのかわからないので、比較と選定を行うことになります。
プロジェクトメンバーが手分けして、Vue.js, React, Angularそれぞれを使ったTodo Listデモを作り、比べてみました。
Angularの学習コストが高く、癖が強いと感じるエンジニアが多いので早期脱落し、そこでVue.jsとReactの対決になりました。

私はこの時点で当PJに参加し、メインフレームワーク選定を任せられます。
着手当初の印象は、「Vue.jsは直感的に書きやすい」「ReactはTypeScriptと相性がいい」くらいだけでした。
何もわからなかったので、とりあえず資料などをいろいろ漁りました。
手当たり次第に得た結論を比較表とレポートにまとめました。こんな感じです。

比較表v1の大小分類の詳細は以下:
しかし、比較表v1をPJ関係メンバーに見せたら、「ボトムアップで整理しただけ」「網羅性が足りない」「粒度もまちまち」と、皆さんに納得してもらえませんでした。
皆さんに納得してもらえなかったので、それを機に新しい観点であるSEOも考慮し、SEO対策のサーバサイドレンダリングができるVue.jsベースのNuxt.js・ReactベースのNext.jsを比較対象に追加し、考え直すことにしました。
一般的なソフトウェア品質特性やVue.js/Nuxt.js・React/Next.js自体の懸念点などを議論しながら、社内事情を考慮した上で俯瞰的に選定基準を決めます。
まず大前提が3つあります。
それから、社内の色々な事情を考慮していました。

一連のプロセスを経て、最終的に出したのが以下7つの選定基準です。
この7つの選定基準に基づいて比較表v2とレーダーチャートを作りました。


ご覧のように、SEO, 性能, 品質, 生産性・開発者体験の面でReactが勝ち、ユーザー体験, コミュニティではReactとVue.jsが同点、採用・育成の面ではVue.jsが勝つという結果になります。
結論、モノタロウは性能, 品質, 生産性・開発者体験をより重視するので、Reactを選びました。
なぜ性能, 品質, 生産性・開発者体験をより重視するのかというと、理由は以下です:
今回のメインフレームワーク選定を通して、私は3つの学びを得ました:
特に、「結論に納得してもらう前に、基準の合意が必要」は、今後ほかの色々な分野にも応用できそうと思っています。
モノタロウは、Reactを含めた新しいフレームワークやソフトウェア基盤への移行を進めており、いま絶賛開発中です。ソフトウェアの刷新や移行に興味がある方はぜひご応募ください!
*1:機能適合性、性能効率性、互換性、使用性、信頼性、セキュリティ、保守性、移植性
*2:TypeScriptのコンパイルスピードが遅いと言われている → 今のプロトでは気にならない;Vue.jsは選定当時Ver2からVer3への大幅アップデートがあり、Vue.js3ベースのNuxt.jsはしばらく安定稼働しなさそう
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。