2016年3月15日
Reactの新しいバージョニングスキームについて
(2016-02-19)by Sebastian Markbåge
本記事は、原著者の許諾のもとに翻訳・掲載しております。
今後、Reactはメジャーリビジョンリリースによって主要な修正を行うことを発表します。現在のバージョンは0.14.7です。次のリリースバージョンは 15.0.0 になります。
多くの人にはこの変更による実質的な影響はないでしょう。セマンティックバージョニングのメジャーバージョンに移行することで、安定性に対する我々のコミットメントを示すことができ、さらにマイナーリリースに後方互換性のある新機能を追加するという柔軟性を持たせることができます。メジャーリリースの数を抑えることができ、次のバージョンが出るまで待つことなく改善されたReactを利用することができるようになります。その上、特にコンポーネント作者に便利なのは、このバージョニングスキームには同時にReactの2つのメジャーバージョンをサポートできる柔軟性があるため、バージョンの異なるコンポーネントを使用することができることです。
React APIの中心部は何年も安定しています。我々含め、多くのビジネスが基礎構造の中核としてReactに大きく依存しています。そのため、我々はReactの安定のみならず、発展にも全力を注いでいます。
みんな一緒に
Reactは単なるライブラリではなく、ある意味生態系なのです。自分のアプリケーションコードや他人のコードはそれぞれが孤立しているわけではありません。これらは、Reactに異存する自分のアプリケーションコードやオープンソースコンポーネント、サードパーティライブラリのネットワークなのです。
そのため、我々のコードベースのみをアップグレードするのではなく、一緒にコミュニティ全体をアップグレードすることが重要となります。そのため、アップグレードをとても真剣に捉えています
注釈 : あなたが現在使っているReactのバージョンはどれですか?
マイナーリリースの導入
理想は、全員が常に最新のバージョンのReactを使用してくれることです。
しかし、それが現実的ではないことを我々は理解しています。今後は既存APIが壊れてしまう数よりも追加する新しいAPIの数を多くしたいと考えています。セマンティックバージョンスキームのメジャーリビジョンに移行することで、既存のものを壊すことなく、新しいバージョンをリリースすることができます。
つまり、あるコンポーネントに新しいAPIが必要になった場合、その他のコンポーネントをいじる必要はなくなります。他のコンポーネントの互換性も維持できます。
バージョン1.0.0はどうなったのか
Reactの成長と人気の理由に作成時の安定性とパフォーマンスが良いという点があります。React v1.0がどのような形になるのか多くの質問が寄せられました。確かに、重大な変更は停滞を回避するために重要ですが、アップグレードを簡単にしても安定性は実現できます。もし、メジャーバージョン番号がAPIの安定性を表し、それがさらに実際に使用できるという信頼性を生むのであれば、メジャーバージョンスキームの導入はもっと早かったでしょう。v1.0に対する先入観があまりにも多すぎます。セマンティックバージョニングを使用することには変わりません。ただ、0という番号を先頭から末尾に移動して安定性を示しているにすぎません。
重大な変更
マイナーリビジョンリリースには、廃止予定に関する警告や、将来的に削除/変更されるAPIやパターンをどのようにアップグレードすべきかのtipsなどを含んでいきます。
引き続き共通パターンのための codemods はリリースし、コードベースの自動アップグレードが楽にできるようにします。
特定のバージョンがEOL(ライフサイクル終了)に達した場合、廃止予定のAPIを全て削除して、新しいメジャーバージョンをリリースします。
断崖絶壁の回避
コンポーネントを16.0.0にアップグレードした時、他の依存性が存在するとアプリケーションが動かない場合があります。例えば、下のようにRyanとJedのコンポーネントが15.x.xとのみ互換性がある場合です。
最悪のケースは、アプリケーションを15.1.0に戻してしまった場合です。その際、コンポーネントも使用するために戻してしまうことになるでしょう。
もちろん、RyanとJedも同じことを考え、戻してしまいます。気を付けないと、誰もアップグレードをしないという最悪の事態が発生してしまうことになります。このような現象は多くのソフトウェアのプロジェクトで見られます。
そのため、Reactでは、コンポーネントやライブラリに同時に2つのメジャーバージョンに対して互換性を持たせることができるようにしています。古いAPIを完全に削除する前に新しいAPIを導入することで、最悪の事態を回避します。
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa