GoogleがDart言語を再起動し、「Dart 2」を発表した。Dart 2では、Webやモバイルのクライアント開発によりフォーカス。単一コードでiOS/Androidのネイティブアプリ開発を可能にするフレームワーク「Flutter」も登場した。

今から7年前の2011年、「JavaScriptは単なる言語の進化では修正できない根本的な問題を抱えている」と考えたGoogleが、JavaScriptを代替できる、より優れたWeb言語として開発しリリースしたのが「Dart」言語です。

2013年にバージョン1.0へ到達したDartは、JavaScriptを代替すべくECMA Internationalで標準化を開始します。

いずれはDartVMをChromeに搭載し、JavaScriptと並ぶポジションをつかもうとしました。しかし、Googleが期待したほどにはDartは普及せず、2015年にはChromeへのDartVMの搭載を断念。JavaScriptへのトランスパイラとなる方向性を打ち出します。

Dartへの注目が薄れゆくなかで、2017年にはTypeScriptがGoogle社内における標準言語の地位を獲得。Google社内のWeb開発言語としてもTypeScriptとAngularに地位を脅かされるようになり、Dartはマイナーな言語として細々と生き続けていくのではないかと、多くの人が見ていました。

Dart再起動。Dart 2発表

しかしGoogleのDart言語チームは諦めていませんでした。

GoogleのDart言語チームプロダクトマネージャAnders Thorhauge Sandholm氏は、2月22日付けの記事「Announcing Dart 2: Optimized for Client-Side Development」で、Dart 2を発表。Dartの再起動を次のように宣言します。

Today, we’re announcing Dart 2, a reboot of the language to embrace our vision of Dart: as a language uniquely optimized for client-side development for web and mobile. 本日、私たちはDart 2を発表します。これは、Webとモバイルのクライアントサイドに独自に最適化された言語であるというDartのビジョン達成に向けた、言語の再起動です。

「Flutter」、iOS/Androidアプリを単一ソースコードで

そしてDart 2における最大の武器が2月27日に発表された「Flutter」です。

Flutterは、単一のソースコードでiOSとAndroidのネイティブアプリケーションを開発するためのUIフレームワーク。

それぞれのOSに適した美しいUIやネイティブな機能へのアクセスを実現しつつ、Dartの特徴でもあるコードの変更をすぐシミュレータや実機の表示や動作に反映し迅速な開発を可能にする「Stateful Hot Reload」機能などを備え、効率よく短期間にネイティブアプリケーションの開発を実現します。

強力な型推論、UIをより直接的にコードで表現

Dart言語仕様もDart 2で強化されています。前述の記事「Announcing Dart 2: Optimized for Client-Side Development」では、おもに強力な型システムとUI定義が挙げられています。

In Dart 2, we’ve taken further steps to solidify Dart as a great language for client-side development. In particular, we’ve added several new features including strong typing and improving how UI is defined as code. Dart 2では、クライアントサイドの開発においてDartをより優れたものとして前進させた。とりわけ、強力な型システムとUIをコードで定義する場面などにおいて、いくつかの新機能を追加した。

型システムでは、型推論によってコードの品質を高める支援を行い、コードによるUIの定義では、newやconstをオプションにすることで、より直接的にUIをコードで表現できるようになっています。

// Before Dart 2 Widget build(BuildContext context) { return new Container( height: 56.0, padding: const EdgeInsets.symmetric(horizontal: 8.0), decoration: new BoxDecoration(color: Colors.blue[500]), child: new Row( ... ), ); } // After Dart 2 Widget build(BuildContext context) => Container( height: 56.0, padding: EdgeInsets.symmetric(horizontal: 8.0), decoration: BoxDecoration(color: Colors.blue[500]), child: Row( ... ), );

Dartは生き残れるか？

DartはWebとモバイルのクライアントサイドにフォーカスしているとされつつも、Dart 2のここまでの展開は、比較的モバイルデバイスのネイティブアプリケーションに重心をおいているように見えます。

しかしこのネイティブアプリケーション分野そのものを、JavaScriptはProgressive Web Applicationの牽引役として置き換えようとしている、と見ることもできます。しかもJavaScript自身も進化し、またTypeScriptやWebAssemblyなどのエコシステムも加わって非常に強力な存在になっています。

DartにとってJavaScriptは、かつて越えようとして越えられなかった壁です。果たして今度はどうなるでしょうか？