Offers Magazine
イベントレポート

[株式会社ventus 加古氏]エクスペリエンスを損なわないフロントエンドの改善 #Webフロントエンドリプレイス

公開 更新
登壇者: 加古 遼太郎・株式会社ventus フロントエンド プロジェクトリード、冬鏡 澪 ・株式会社ventus テックリード / 執筆者: 佐藤 歩・株式会社サイバーエージェント メディア統括本部 技術人事
[株式会社ventus 加古氏]エクスペリエンスを損なわないフロントエンドの改善 #Webフロントエンドリプレイス

加古氏:
早速ですが、私たちのサービス「ORICAL」を紹介させていただきます。これは電子トレーディングカードをコレクションするサービスです。

ただ単にカードを集めるだけではなく、様々なファン活動と結びつけています。例えば、プロ野球の試合観戦で特別なカードを獲得できたり、試合の結果を予想して当てると報酬がもらえるなど、ファン活動を全面的にサポートするアプリとして開発しています。

加
登壇者

株式会社ventus フロントエンド プロジェクトリード

加古 遼太郎

株式会社ventusのリードフロントエンド。特にCSSに焦点を当てたウェブ開発に専念している。Oricalのプロジェクトでリリース、機能追加、保守を担当している。また、現在東大修士課程二年で、機械学習の研究も行っている。

佐
執筆者

株式会社サイバーエージェント メディア統括本部 技術人事

佐藤 歩

Webサイト/システムの受託開発会社を経て、2012年に株式会社サイバーエージェント入社。Webフロントエンドエンジニアとして数々のメディアサービスの立ち上げ開発に携りつつ、横軸で開発組織の運営にも取り組む。2018年よりメディア統括本部技術人事室長としてエンジニアの立場も兼ねて評価、育成、採用などをマネージメントしている。

冬
登壇者

株式会社ventus テックリード

冬鏡 澪

学部2年時に、現CEOとともに会社の立ち上げと初期プロダクトの設計および開発に携わる。その後、現メインプロダクトの初期開発や保守、社内ツールの開発やインフラ管理など様々な業務を行う。また、現在は東大博士課程一年であり、最近はRustが好きで個人的に書いている。

Nuxt2からNuxt3へのアップデートを実施

技術面については、私たちはNuxtを使って開発を行っており、現在Nuxt2からNuxt3へのアップデートを進行中です。Nuxt3には大きな違いが2つあります。一つは「Vue Composition API」が標準で搭載されており、これにより開発体験が向上します。

もう一つはパフォーマンスの向上で、ビルド時間とサーバーの実行速度が改善される点です。私たちはぜひアップデートを行いたいと考えていますが、残念ながら初めの試みは失敗に終わりました。

失敗の経緯は次の通りです。最初にパッケージをアップデートし、その後に発生したエラーを順番に解決しようとしたのですが、エラーの量が膨大で、修正方法もすぐにはわかりませんでした。

特に当時はNuxt3がリリースされたばかりで、検索しても技術的な記事がほとんどなく、英語で情報を探しても見つけることができませんでした。

修正を試みても、それはライブラリの基本的な部分に関わるものが多く、同時にメインブランチでの新機能開発が進行していました。これにより、コンフリクトが発生し、それを解決するためには再び修正を加えなければならないという悪循環に陥りました。新機能の開発が進む中で、状況はより複雑になっていきました。

この経験から学んだ教訓を活かし、我々は新たなアプローチで再挑戦しています。そのためにはまず、失敗からの反省が必要だと考えています。

ベータ版「Vue Composition API」が組み込まれ、大量のエラーが発生

具体的には、私が単純にNuxt2からNuxt3へのアップデートを試みたと言いましたが、それは完全に正確ではありません。確かにNuxt2は使用していましたが、皆さんが想像する一般的なNuxt2の状況とは異なる、特定の条件が関わっていたのです。その条件とは、以下の通りです。

ベータ版「Vue Composition API」が組み込まれ、大量のエラーが発生 スライド1

Nuxt2とVue2についてですが、なぜかベータ版の「Vue Composition API」が組み込まれていました。背景としては、「Vue Composition API」が発表された際、私の上司がこの技術に注目したようです。その結果、ベータ版ではあったものの、積極的に取り入れて使用していましたが、これが後に大変な作業を引き起こすことになります。

言いたいことを端的に表現すると、技術間の差異が非常に大きかったのです。

「Vue Composition API」の正式版がリリースされた後も、さらにVue3への移行を試みたところ、大量のエラーに見舞われました。

そして、直せないエラーが続出しました。これらのエラーを解消しない限り、アップデートをメインブランチにマージすることはできません。

その間にも、メインブランチでは新しい開発が進んでおり、進行するうちにコンフリクトが増えていきました。社内のリソースは限られているため、新規機能の開発と並行してアップデート作業を行う中で、ブランチの更新作業は徐々に忘れ去られていきました。

結局、忘れ去られたブランチを掘り起こしたところ、parse.jsの中に「Vue Composition API」のベータバージョンが使用されていたことが明らかになったのです。

私たちが直面した主な問題点を分析した結果、解決策を練ることができました。

特に重大な問題は「メインブランチにマージできない」という点でした。マージがスムーズに行けば、新機能の開発を並行して進めることができるため、非常に望ましい状態です。

マージができない原因は、更新を一度に大量に行おうとするためです。そこで、我々は異なるアプローチを試みることにしました。

具体的には、開発の歴史を遡る作業を行いました。これは単に言い換えると、最初の状態から、Nuxt 3以上へのバージョンアップを段階的に行おうという戦略です。大規模な更新を一度に行うのではなく、小さなステップで進めることにしました。

ベータ版「Vue Composition API」が組み込まれ、大量のエラーが発生 スライド2

この手法を取り入れることで、長期的な視点ではありますが、複数のプルリクエストを小さく保つことができ、それによって平行作業が可能となり、スムーズにマージが行えるようになります。これがこの方法の主な利点です。

Composition APIについては、これを使用した経験のある方ならその利便性が理解できるかと思います。ロジックの分離が容易で、管理やテストがしやすくなるなど、多くのメリットがあります。そのため、私たちはこのAPIを安定して使いたいと考えています。

Vue2.6系からVue2.7にも大きなアップデートが必要に

次に、Vue 2.7をVue 2.6系とは別に分けた理由についてですが、Vue 2.6系とVue 2.7系の間には大きな変更があったためです。これらの変更により、アップデート時に従来の機能が動作しなくなる可能性があります。例えば、プロップスの名前がアンダースコアから始まる場合、それが読み込まれなくなるという変更がありました。この変更は私たちにとって大きな影響をもたらしました。

これを修正するには、データの受け渡しに関わる多くの部分を変更する必要があり、結果としてかなりの大幅な変更を要することになります。そこで、これは後回しにするという判断をしました。

さらに残念なことに、Nuxt3へのアップデートを助けるためのライブラリ「Nuxt Bridge」は、Vue 2.6と互換性がなく、Vue 2.7以降とのみ互換性を持っています。つまり、Vue 2.7へのアップデートを経てNuxt Bridgeを使用する必要があります。

現在の進捗状況については、nuxtjs/composition-apiまでアップデートが完了しています。Vue 2.7へのアップデートはまだ進行中で、これを完了させた後に、Nuxt Bridgeを介してNuxt3にアップデートする予定です。

当初のNuxt3へのアップデートは失敗に終わり、そのブランチをマージできず、アップデートは全く進展しませんでした。しかし、新しいアプローチを取った結果、nuxtjs/composition-apiまでのアップデートが可能となりました。これは大きな一歩であり、今回の成功点と考えています。

この方法を用いることで、新規機能の開発を停止することなく、コンフリクトを最小限に抑えながら、新規開発とアップデートの両方を進めることができました。

今後は、Vue 2.7へのアップデートとNuxt3への最終アップデートを継続的に進めていく予定です。

これにて発表を終わります。ご清聴ありがとうございました。

\株式会社ventusでは、積極的に採用中📣/

株式会社ventusの中途採用・転職・求人情報|Offers Jobs

AI 時代のエンジニア転職は Offers で

あなたのキャリアに合った求人やスカウトが届く、エンジニア向け転職サービスです。

無料ではじめる

正社員の求人を探す

Offers Jobs で正社員の求人を探せます。

求人を見る

Offers のイベント情報

イベント情報を見る

エンジニアの転職なら Offers

無料ではじめる

記事一覧へ