将来的フラグを使用した段階的な機能採用
ソフトウェア開発における私たちの取り組みでは、メジャーリリースに以下の目標を達成することを目指しています。
- 段階的な機能採用: 開発者は、現在のメジャーバージョンで利用可能になったときに、新しい機能と変更を1つずつ選択して統合することができます。これは、すべての変更を1つの新しいメジャーリリースにバンドルするという従来の方法からの脱却です。
- シームレスなバージョンアップグレード: 開発者は、事前に新しい機能を選択的に取り込むことで、既存のアプリケーションコードを変更する必要なく、新しいメジャーバージョンにスムーズに移行できます。
不安定なAPIと将来のフラグ
私たちは、unstable_someFeature
のような将来のフラグを使用して、現在のリリースに新しい機能を導入しています。これらのフラグは、Remix Vite Pluginの future
オプションで、vite.config.ts
ファイルで指定できます。
remix.config.js
の future
オプションで将来のフラグを提供できます
-
不安定な機能が安定状態に達したら、特別なプレフィックスを削除し、次のマイナーリリースに機能を含めます。この時点で、APIの構造は、その後のマイナーリリースを通じて一貫性を保ちます。
-
このアプローチにより、初期導入者と協力してAPIを洗練し、すべてのユーザーに影響を与えることなく、不安定なフェーズで必要な変更を取り入れることができます。その後、安定したリリースは、これらの改善から中断なく恩恵を受けることができます。
-
unstable_*
フラグでラベル付けされた機能を使用している場合は、各マイナーリリースのリリースノートを確認することが重要です。これは、これらの機能の動作または構造が進化する可能性があるためです。このフェーズでのあなたのフィードバックは、最終リリース前に機能を強化するために非常に役立ちます!
将来のフラグを使用した破壊的変更の管理
破壊的な変更を導入する場合、現在のメジャーバージョンのコンテキストで行い、将来のフラグで隠します。たとえば、v2
にいる場合、破壊的な変更は v3_somethingDifferent
という将来のフラグの下に配置される可能性があります。
- 既存の
v2
の動作と新しいv3_somethingDifferent
の動作は同時に共存します。 - アプリケーションは、次のメジャーリリースですべての変更に一度に調整するのではなく、一度に1つのステップで段階的に変更を採用できます。
- すべての
v3_*
将来のフラグが有効になっている場合、v3
への移行は、理想的にはコードベースへの変更を必要としません。 - 初期には破壊的な変更をもたらす将来のフラグの一部は、
unstable_*
フラグとして開始されます。これらは、マイナーリリース中に修正される可能性があります。v3_*
将来のフラグになると、対応する API は設定され、それ以上変更されません。
まとめ
私たちの開発戦略は、メジャーリリースの段階的な機能採用とシームレスなバージョンアップグレードに焦点を当てています。これにより、開発者は新しい機能を選択的に統合し、バージョン移行中に大規模なコード調整を行う必要がなくなります。 unstable_*
フラグを通じて機能を導入することで、初期導入者と協力して API を洗練し、安定したリリースが強化から恩恵を受けるようにします。 v3_*
フラグを使用した破壊的な変更の慎重な管理を通じて、変更を段階的に採用する柔軟性を提供し、メジャーバージョン間のスムーズな移行を促進します。これは、Remix フレームワークの開発を複雑にする一方で、この開発者中心のアプローチは、Remix を使用したアプリケーション開発を大幅に簡素化し、最終的にソフトウェア品質と(願わくは!)開発者の満足度を高めます。