A) Web アプリが独立して開発・テスト・デプロイできるように Ruby on Rails のシステムから分離されている状態
B) システムとの通信に GraphQL API を採用することで、UI レベルの変更などがWeb アプリで完結する状態
前章で紹介したように Wantedly のフロントエンドは Ruby on Rails との結びつきが強い状態です。このような状態は、ユーザーに継続的に価値を提供していくソフトウェアデリバリーのパフォーマンスが低い状態です。Ruby on Rails と強く癒着していることにより具体的には下記のような問題があります。
Ruby on Rails 側から React へのデータの受け渡しに関する問題
スキーマや型が定義されておらず、バグが起きやすいこと
機能・実装箇所によってデータの受け渡し方法がまちまちで混乱を招いてしまっていること
Web API 経由でデータを渡すパターン、HTML の data attribute を使ってデータの受け渡しをするパターン、window にグローバル変数を持って渡すパターンなど
フロントエンドの関心事が Ruby on Rails 側に存在する箇所があり、フロントエンドの改修の際もバックエンドの知識が必要とされること
ローカルでの開発時に、Ruby on Rails のサーバーの起動の必要があり生産性が低いこと
そこでこのような状況を解決するため、3年ほど前から Ruby on Rails から分離した基盤での Web アプリ開発を始めています。初期は Create React App ベースでしたが昨年 Next.js に移行されました。また GraphQL が導入され、バックエンドシステムとの通信は GraphQL サーバーを経由するようになりました。
これにより、上記であげた Ruby on Rails と癒着していたことによる課題が解決されました。
バックエンドシステムとの通信は GraphQL の API を使うようになり、データの受け渡し問題は解決
理想郷と現在地のギャップを課題と捉えると、1つめの大きな課題は「Wantedly の多くの主要機能の多くが、未だ Ruby on Rails に残されていること」です。また Web アプリ化されたら完了というわけではありません。その上で生産性高く開発を行うために「デザインシステムやテスト基盤の整備すること」が必要となります。まとめると下記になります。
Ruby on Rails からの分離
Web アプリとシステムをつなぐ GraphQL gateway の整備
Ruby on Rails に乗っている主要機能の段階的な React 化
分離した Web アプリ上での生産性向上のための基盤の改善
デザインシステムの React 実装改善
品質の向上のためのテスト基盤改善
Web アプリとシステムをつなぐ GraphQL gateway の整備
Ruby on Rails から分離した Web アプリでは、バックエンドシステムとの通信を GraphQL サーバーを介する必要があります。しかしながら現状 GraphQL のスキーマ定義はいまのところ部分的で、移行に必要なための機能がすべて整備されている状態ではありません。まずはここを整備していきます。
GraphQL gateway を整備しつつ、Ruby on Rails に載っている機能を段階的に Web アプリへと移行していきます。プロフィール機能をはじめ、すでにいくつかの機能は Web アプリへと移行しており、現在も機能移行のプロジェクトが進行中です。移行するべき機能はまだまだ残っているので一つずつ確実に移行していきます。
分離した Web アプリでの生産性向上のための基盤の改善
ここからは、独立した Web アプリに移行したあとでも生産性高い状態で開発を進めるための基盤改善ついて紹介します。前述のとおりいくつかの機能が Web アプリ化が完了しており、その移行に際していくつか基盤整備をしているため、まったくゼロというわけではありません。ただしそれでもいくか課題はあるため、改善のための取り組みを進める予定です。
先述の通り、分離した Web アプリ上でもさらなる改善は行っていく予定です。しかしながら、再度まったく新しい基盤を作り、また地層が重なるという選択はしない方針です。マイナーバージョンが上がるような変更は戦略的に行っていく予定ですが、メジャーバージョンが上がるような破壊的な変更をアーキテクチャレベルで行うということはしません。