Leaflet 0.7 リリース、MapBox、そして今後の計画
Leaflet 0.7 がリリースされました!IE11のタッチサポート、タイルのアップスケーリング、そして数多くの改善とバグ修正が含まれています!一方、私はMapBoxチームにフルタイムで参加しました…
多くの貢献者 の参加による5ヶ月間の活発な開発の後、Leaflet 0.7 の安定版リリースを発表できることを嬉しく思います。
これはバグ修正に重点を置いたリリースです。Leafletは機能面でますます安定性を増しているため、焦点は新機能よりも安定性、使いやすさ、APIの改善に移行しています。また、計画されていた大規模なリファクタリングの一部(この記事の後半で説明します)は、0.7のリリースまで延期していました。これにより、リリースサイクルの開始時にリスクの高い作業を行い、既存のアプリケーションを意図せず壊す可能性のあるバグや互換性のない変更をキャッチするための十分な余裕を持たせることができます。
MapBoxへの参加
その他のニュースとして、私はMapBoxチームにフルタイムで参加しました。これは私にとって非常にエキサイティングなことであり、長年の夢の仕事でした。MapBoxは、その素晴らしい仕事でインタラクティブマッピングの世界を永遠に変え、世界最高の地理マッピングエンジニアとデザイナーが集まり、可能性の限界を押し広げ、毎日多くの人々に刺激を与えています。
Leafletにとっては、これは非常に良いことしか意味しません。Leafletの開発に多くの時間を費やし、より多くの熱意、より多くの遊び、マップに関するより多くのクレイジーな実験(これなど)、そして多くの学習ができます。私は今、これまでで最も幸せな地図オタクの一人です。素晴らしいものがたくさんあるので、ご期待ください!
0.7での変更点
ここ数ヶ月の0.7に関する詳細な変更ログ(約90個の改善とバグ修正)を確認できますが、いくつかのハイライトを挙げたいと思います。
- タイルをより高いズームレベルにアップスケールする機能を追加しました(例:ソースの最大ズームレベルが18の場合、19〜20にズームできます)。
- IE11タッチデバイスのサポートを追加しました。MSは、開発者プレビューと最終的なIE11リリースの間で、予期せずポインターAPIの互換性を壊してしまい、最終的にコードをかなり書き直して、すべてのIEバージョン(デスクトップとモバイルの両方)でスムーズに動作するようにし、その過程で多くのIE10のバグも修正しました。
- IE6のサポートを正式に終了しました(誰も気にしません)そして、IE7-8のスタイルをクリーンアップ/修正しました。
- Leafletを含める際のIE条件付きコメントの必要性を排除し、スニペットを大幅に簡素化しました。すべてのIE7/8固有のスタイルが簡素化され、メインの
leaflet.css
ファイルに移動されました。 - 数千ものレイヤー(例:クラスタリング用のマーカー)を作成しようとするとSafariがクラッシュする、分かりにくいiOS7のメモリリークを修正しました。なぜ発生するのかはまだ分かりませんが、少しの工夫で修正できました。
- 一部のデバイスでズーム後にタイルが表示されなくなるAndroid版Chromeのバグを修正しました。
- TileLayerの実装における地球関連のハードコードを削除し、Proj4Leafletなどのプラグインが、ひどいハックなしに複雑な投影を処理しやすくなりました。この方向性での他の作業は0.8で行われます。
- 多くの要素を持つ複雑なページでのパンニングのパフォーマンスを向上させました。カーソルを
document
(「つかむ」ためのハンド)に設定するような単純なことでさえ、一部のブラウザ(特にChrome)でパフォーマンスに顕著な影響を与えることが分かりました。 - maxBoundsの動作方法を変更し、そこから派生した
minZoom
を強制的に適用するのではなく、低いズームレベルでのパンニングを制限しました。パンニング慣性やオフセットズームなどとの連携を向上させるためのいくつかの工夫も含まれています。
0.8の計画
Leafletのリファクタリングには、0.7のリリース後すぐに取り組みたい大きな課題がいくつかあります。これらは長すぎる間延期しており、プラグインやLeafletベースのAPI開発者にとって非常に有益なものとなります。その一部はすでに進行中です。
- レイヤーアーキテクチャのリファクタリング。現在、さまざまなレイヤー(マップ、マーカー、ベクトルレイヤーなど)の実装間で、特にイベント処理、ズームアニメーションロジック、zIndex、ペイン処理(何が上に表示されるかなど)において多くのロジックの重複があります。コードを整合性のある、より普遍的で、さまざまなレイヤー間で共有可能なものにすることで、レイヤーのカスタマイズや独自のレイヤーの作成(例:d3の統合など)が容易になります。
- 巨大なTileLayerの実装をGridLayerとTileLayerに分割し、画像タイル関連のロジックとグリッドロジックを分離することで、他のグリッドのようなレイヤー実装(例:UTFGridインタラクションやタイル化されたGeoJSON)が大幅に簡素化されます。
- ズームアニメーションロジックのリファクタリングを行い、待望のEaseyスタイルのアニメーション(点間のズームパン)を可能にします。
- 投影コードのリファクタリングを行い、フラットマップや奇妙な投影の設定、Leafletがそれらを処理する方法のカスタマイズを容易にします。
- ベクトルレイヤーコードのリファクタリングを行い、同じマップ上の異なるレイヤーで異なるレンダリングバックエンド(Canvas、SVGなど)を使用し、それらの間を簡単に切り替えることを可能にします。これにより、RBushを使用したレイヤーのインデックス作成など、興味深い拡張機能も開かれます。
野心的な計画であり、複数の安定版リリースが必要になる可能性がありますが、これらのリファクタリングを完了することは、Leafletが1.0リリースに向けて準備を整えていることを意味します。
0.7のリリース後に焦点を当てたいもう1つの方向性は、ウェブサイトとドキュメントの改善です。まず、Leafletはより詳細なステップバイステップのチュートリアル(カスタムレイヤー、カスタムコントロールなどの高度な機能を含む)を必要としており、将来的にドキュメント/チュートリアルのスプリントを実施したいと考えています。次に、視覚的なショーケースやアプリギャラリーを追加し、ロゴや引用/推薦文でLeafletユーザーをより目立たせ、よりスタイリッシュでクリーンな外観にするためのレイアウト/デザインの更新など、プレゼンテーションを大幅に改善できます。
近い将来のLeafletで期待できるものについての概要が得られたことを願っています。ご質問があればコメント欄でご遠慮なくご質問ください。喜んでお答えします!
いつものように、新しいリリースのCDNリンクまたはダウンロードはダウンロードページから入手できます。アプリケーションで試してみて、回帰があればすぐに報告してください。そして、いつものように、リリースについて素敵なTwitterの話題を盛り上げましょう!
Leafletへの貢献、バグレポート、メーリングリスト、Twitterでの話題、素晴らしいアプリの作成、Leafletに関する情報の発信にご協力いただいた皆様に感謝いたします!皆さんは、これまでで最も素晴らしいコミュニティです。
敬具
Vladimir。