読者の皆様へ:ノイズを減らすための一連の機能を開発しました。関心のあるトピックについて電子メールとWeb通知を受け取ることができます。新機能の詳細をご覧ください。
Mediumは、自身の既存のシステムをReact.jsとGraphQLに基づく新しいアーキテクチャに移行した。この試みの2つの主要な目標は、MediumのエンジニアSasha T. Solomon氏によると、新しい機能の開発を妨げることなく、ユーザが新しいシステムを段階的に利用できるようにすることであった。
古い技術を使っている既存のコードベースから移行することは、簡単に決断できることではない。コストの他に、新しいシステムの利点がユーザに見えるまでにどれくらい時間がかかるかを考慮する必要がある。そして、すべての移行を待つということをしたくない可能性がある。さらに、運用においてサービスが安定しており、バグを修正したり新しい機能を実装したりすることで、サービスが進化するようにしたいであろう。
Mediumのケースがそうだが、プラットフォームの初期開発から5年後、Solomon氏は次のように説明している。
システム全体を新しいツールやフレームワークに移行するのは簡単な作業ではありません。また、機能開発に影響を与えずに移行を進められるでしょうか。それはさらに難しいことです。
Mediumのエンジニアリングチームは、新しいシステムの使用をできるだけ早く開始できるようにするとともに、既存のシステムに対する変更を妨げることのないように、サービスの移行を進める道を考え出した。
移行の第一歩は、MediumのクライアントアプリケーションをReact.jsで書き換え、GraphQLを既存のAPIのインターフェイスレイヤーとして使用することであった。GraphQLのクライアントサイドフレームワークとして、MediumはApollo Clientを使用している。
この段階では、旧システムと新システムの両方が共存し、それぞれが異なるページセットを提供していた。このアプローチは、サーバ側の完全な書き換えを必要とせず、古いシステムで動作する新機能開発に影響を与えないという利点があった。Mediumチームがとった重要な決定は、プロトコルバッファを使用して従来のAPIをGraphQLとのインタフェースのためのスキーマとして記述することであった。
Solomon氏によると、移行の第2段階がすぐに開始され、サーバ側コードはGraphQLレイヤにデータ提供するためのサービスにリファクタリングされる。GraphQLレイヤには、GraphQLのサーバサイドフレームワークとしてSangriaを使用する。
GraphQLを使用することで、粒度の細かい構造が、よりモジュール化されたシンプルなサービスに直接マップされ、その結果、パフォーマンス向上が期待できるという大きなメリットを期待できる。GraphQLサービスと通信するためにgRPCを使用する新しいサービスは、古いサービスから完全に独立した方法で構築することができ、古いサービスは古いAPIと繋がる場所に配置される。
Rate this Article
- Editor Review
- Chief Editor Action