Backbone.jsの新しいバージョンが先週リリースされた。Backbone.jsは、JavaScriptコミュニティにおいて、もっとも幅広く利用されているフロントエンドアーキテクチャフレームワークの1つである。この新しいバージョンは、メジャーバージョンアップでないのにも関わらず、ユーザの報告によると、いくつかの変更はバージョン1.0で動くアプリケーションに非互換性を引き起こす可能性があるという。
バージョン1.1.0の変更点
最新のアップデートは10月10日にリリースされ、そのアップデートに新機能は盛り込まれなかった。このアップデートが何に焦点を当てたものなのかについて、Backbone.jsの開発者であるJeremy Ashkenas氏は『6ヶ月相当の内部コード効率化』と述べている。とはいえ、内部コード改善の外側で、Backbone.js 1.1.0はいくつかのAPIの変更を行った。change logに詳しく書かれている変更点は、次の通りである。
- Backbone Collectionのset、add、removeそしてresetメソッドの戻り値が、変更されたモデルもしくは変更されたモデルのリストを返すようになった
- Backbone Viewは、『this.options』というように自動でコンストラクタにoptionsを引き継がなくなった
- すべてのinvalidイベントが、バリデーションチェック対象のモデル/エラーオブジェクト/optionsという一貫した引数を渡すようになった
- モデルのidをparseメソッドの中で変更できなくなったが、代わりにidAttributeを使用できるはずである
その他の変更点としては、『細かい修正、最適化そしてバグフィックスをBackbone 1.0の機能に対して行った。それにはURLオーバーライドやoptionsの変更、一括ソート、URLの末尾のスラッシュの扱い、特殊な状況で発生するイベントリスナのメモリーリーク対応、入れ子となったモデルのパース処理を含む』などがある。
非互換性についての報告
このアップデートに対する反応の多くはポジティブなものだったが、ネガティブな反応もいくつかあった。Twitterでの反応によると、マイナーバージョンリリースによる上記APIの変更が、メジャーバージョンである1.0との間の互換性をなくしていることに、一部のユーザは不意を突かれたものと思われる。Chris Wren氏は以下のように尋ねている。
つまり、Backboneはsemantic versioning(ソフトウェアのバージョン番号付けの指針)に従っていないということでしょうか?後方互換性のない変更は、バージョン2.0のリリースを意味していると思います。
その他のコメントにおいても、同様の批判が中心となっていた。非互換へのおもな不満はBackbone Viewの変更に集中しており、Christian Hammond氏の以下のツイートがその良い例である。
うわ、Backbone.js 1.1.0は、optionのパースに関するViewの初期化に重要な変更を行っていますね。これは大規模な、互換性のない変更です。理解できません。
もちろん、ユーザの大半は1.1.0にアップグレードする前にテストを行うと思うが、潜在的な非互換性に気づくために、それらの変更の性質を頭に入れておくことが重要である。