2017年2月14日火曜日

OpenLayers のバージョンが 4.0.1 になっていた

OpenLayers 3 を使ってみよう(その0:はじめに:地理院地図を表示)に OpenLayers 3 に関する投稿の目次があるので参考にしてみて欲しい。

 これまで,2014年9月から OpenLayers 3 を使ってみよう(その0:はじめに:地理院地図を表示)として,ちょこちょこと OpenLayers 3 の使い方について書いてきた。 2017年1月にはその OpenLayers 3 の最新バージョンが 3.20.1 になっていた。 いやぁ,早いもんだねぇ,と思っていたら,2017年2月に入ってしばらくすると,OpenLayers のバージョンが 4.0.1 にあがっている…。い,いつの間に?という衝撃を感じた。 しかし,せっかく OpenLayers 3 の使い方について書いてきたので,OpenLayers 4.0.1 についても書こうと思ったのが,今回のお話し。

 実は,2017年2月に見た時は,OpenLayers 4.0.0 だった。 でも,多くの場合と同じように最初のリリースはバグが結構ああったみたいで,すぐにバグフィックス版が 4.0.1 として出たのだった。 以前,OpenLayers 2 が OpenLayers 3 に上がった時には,大幅な変更があり,それまで作っていたサンプルを一から書き直す感じだった。 今回,OpenLayers 3 が OpenLayers 4.x.x になったので,どれだけ変わったんやろ?と思ったが,実はいうほど中身は変わっていない。 しかし,なぜメジャーバージョンが 3 から 4 になったのか? それは,バージョン番号の付け方の方針を変えたから,ということみたい。

 OpenLayers のサイトcomplete list of releases:v3.0.0 以降の全バージョンの更新情報の中の,v4.0.0 の所に書いてあるのだが,今回,
--------------------------------
バージョン番号の付け方を Semantic Versioningセマンティック バージョニング) に従うことにしたため,
--------------------------------
らしい。

 この,Semantic Versioning は何かというと,バージョンは A.B.C(-xxx) のようにつけ,「A」がメジャーバージョン,「B」がマイナーバージョン,「C」がパッチバージョン,とするというもの。「-xxx」はプレリリースバージョン(パッチを出す前の不安定版)の時につけてもいい,となっている。具体的には,「4.0.1」や「3.20.1」が正式リリース版の例,「4.0.2-alpha」や「1.0.0-0.3.7」みたいなのがプレリリース版の例である。

 ちゃんとしたルールは Semantic Versioningセマンティック バージョニングを見て欲しいが,ざっくり書くと以下のようになるみたい。
 (i) メジャーバージョンは,開発版は「0」で始まる(0.xx.yy みたいなやつ)。これは不安定なので,そのバージョンを使ってアプリケーションを作ってトラブルになってもそれは文句を言うな,というやつ。
 (ii) メジャーバージョンの「1」以降は正式なリリース版とみなされる。メジャーバージョンは「後方互換が保てない時」には番号を増やす。逆に言うと,メジャーバージョンが上がっていると,後方互換が保たれていないので,アプリケーションコードを見直さないといけないことを意味する。
 (iii) マイナーバージョンは,メジャーバージョンがあがれば「0」から開始する(リセットされる)。マイナーバージョンは,後方互換性が保たれた状態で,関数等に機能の追加があった時など,変更があった際にあげる。つまり,基本的にはアプリケーションコードはそのままでも正しく動作するはず,である。
 (iv) パッチバージョンは,マイナーバージョンが上がればリセットされる。パッチバージョンは基本的にバグフィックスや,機能が思ったように動いていない時の修正版である。 つまり,パッチバージョンが上がると動作が「正しく」なるはず。アプリケーションのコード自体はいじる必要はない。
 (v) パッチ等のプレリリース段階の場合は,A.B.C の後に,「-xxx」のように追加して記載する。プレリリースバージョンはあくまでテスト用であり,安定を求めてはいけない。いつコードが書き換えられるかわからないので,信用してはいけない。

 ほかにも細かく書いてあるけど,だいたいこんな感じみたい。 となると,今回 OpenLayers 3 が OpenLayer 4.0.1 になったというのは,「後方互換が保たれていない」ことを意味している。

 しかし,逆にこれからは,メジャーバージョンが上がったら気をつければいいので,ある意味安心である。 以前,OpenLayers が 3.7.0 に上がった際には,ol.FeatureOverlay が廃止されたり,ol.source.KML が廃止されて,ol.source.Vector と ol.format.KML を使うように変更されたりして,「後方互換は保たれていなかった」。 また,OpenLayers 3.11.0 に上がった際には,ol.format.KML のオプションの初期値が変更された。 それって後方互換はあるって言うのかなぁ? 個人的にはアプリケーションのコードを変更しないといけなかったので,後方互換は破られた,と感じた。

 このように,以前はマイナーバージョンが上がると後方互換を気にしないといけなかったが,今回は後方互換の保持はメジャーバージョンの数字で判断できるようになったことになる。

 それでは,具体的にどこが変わったのか…。
例えば,ol.View の fit メソッドの引数が変更になった。 これまで,map.getView().fit(extent, map.getSize()); としていたものが,map.getSize() はいらなくなったらしい。逆に指定したい時は,オプションとして追加するらしい。 他にも animation がらみで幾つかのメソッドが廃止になったらしい。 私の作っているものでは,今回のバージョンアップでは,ol.View の fit メソッド以外は問題なかった。 fit メソッドも getSize() 関数は無視されて問題なく動いたが,OpenLayers 4 を使う場合には変更しておこうと思う。

0 件のコメント: