先日のGoogle I / O 2019イベントでテクニカルプレビューとして発表されたFlutter 1.5は、新しいフォームファクタデバイス、デスクトップ、Webなど、複数のプラットフォーム用のネイティブアプリケーションを作成可能にすることを目標に置いている。
当初の目的は、iOSとAndroidの両方で実行できるアプリケーションを、単一のDartコードベースで開発可能にすることだった。2つのモバイルプラットフォームの新機能開発を追い続ける中、Flutterチームは、デスクトップシェルによるMac、Windows、Linux用のデスクトップアプリの開発や、Google Home Hubなど新しいフォームファクタの組み込みデバイスもターゲットとするようになった。
特に注目に値するのは、Webアプリケーション開発をサポートするようになったことだ。Flutter for the Webの起源はFlutter 1.0まで遡るが、それにはHummingbirdも含まれている。当時のHummingbirdは、ネイティブARMに加えてJavaScriptにもコンパイル可能であるというDartの機能を活用した、ブラウザ用のFlutterランタイムの実験的な実装に留まっていた。その実験が発展して、Flutter 1.5のWebアプリケーションサポートとなったのだ。Webアプリケーション開発へのFlutterの適用に対するGoogleの関心は、従来よりも高速なJavaScript実行に加えて、主要なすべてのブラウザがハードウェアアクセラレーションをサポートして、グラフィックやアニメーション、テキストのパフォーマンスを向上させたことにより、さらに加速された。
Flutterと強い関係を持つ言語であるDartが、元々はWeb開発の言語として、JavaScriptを置き換える試みから生まれたものだ、という事実は注目に値する。そうでなければ、この機能は実現しなかった。これは同時に、Googleが以前のようなWeb開発の再定義を意図したものではなく、少し異なる観点からFlutterの利用を考えていることの説明にもなる。
WebでのFlutterに対する私たちの元々のビジョンは、HTMLを最適化するというドキュメントエクスペリエンスに対する汎用目的の代用ではなく、高度にインタラクティブで、グラフィカルなリッチコンテンツを構築するための優れた方法としてのものです。そこでは、洗練されたUIフレームワークのメリットが重要な意味を持ちます。
Flutterチームが何を念頭に置いているかは、例えば、さまざまなデバイス上でクロスワードなどのパズルをプレイできることを目的に、New York Timesと共同で開発したデモアプリの形で提供されている。
Flutter for the Webの開発において、Flutterチームが克服しなければならなかった課題のひとつは、彼らが使用するグラフィックスとテキストのレンダリングエンジンが、主要なブラウザすべてにおいてコアWeb機能をサポートすると同時に、十分なパフォーマンスを提供することだった。同時にチームは、FlutterのAPIとアーキテクチャを可能な限りプラットフォームに依存しないようにしたいと考えていた。つまり、実装それ自体を可能な限りプラットフォーム間で共有して、 ひとつのFlutterツールキットを所有するだけでよいようにしたかったのだ。このアプローチを現実のものにするため、Web用Flutterアプリの開発時には、Flutterフレームワーク全体がJavaScriptにコンパイルされてブラウザで実行される。主要な開発作業は完了しているが、プラットフォーム固有の機能をすべてのプラットフォームに渡ってシームレスに共存させるための作業が残っている。例えば、ブラウザの履歴をFlutterのルーティングモデルへの統合、マウスのスクロールやホバーやフォーカスを有効にする作業などだ。
現時点のFlutter for the Webは、Flutterのテンポラリなフォークという位置付けだが、GoogleのプロダクトマネージャであるKevin Moore氏によれば、ブラウザサポートをメインリポジトリにマージする作業はすでに着手されている。
FlutterのWebサイトにはサンプルやドキュメント、その他のリソースがある。