Dart Advent Calendar 2017 三日目の記事です。
AngularDartを仕事でも使っているの人間なので、今回はDartのこれまでのおさらいと、今までの経験から感じた事などをアウトプットしたいと思います。(今回は文字中心です)
ちなみに先日Dart Meetup Tokyo #2を主催させてもらいました。
Adevent Calendarではあと2回記事を書く予定なので技術的な部分はそちらで記事にしようかなと。
#Dart
Dartの当初の思想の1つに他の言語から来たエンジニアがすんなりDartに慣れる事が出きるように設計されている点があります。主にターゲットとして考えられていたのがJavaScript、Java、C等のエンジニアでした。なのでそのあたりを経験しているエンジニアであれば構文などにおいて面食らうことはあまり無いと思います。実際に自分自身も構文に慣れるのに時間はかかりませんでしたし、AngularDartを使って開発しているチームメンバーも同じような感想です。
ただし、後発の言語なので今の時代に合わせてAPIが整備されていて、非常に扱いやすい言語になっていると思います。そのおかげで学習コスト等は高くないと感じます。まぁ、学習コストというのは各々のバックグラウンドに大きく影響されると思うので一概に言えることではないですが。
紆余曲折ありDartVMをChromeに搭載する事を断念しましたが、それによりDartの進化が止まることは無く、むしろ方向性を明確にした(WebではJSのトランスパイルに専念した)おかげなのかよりDart自身の開発が活発になった感があります。
実際細かいながらもDart自身の言語としての使い方はstrong-modeを始め確実に進化しています。また、当初からDart開発チームは「どれだけ素晴らしい言語であっても環境が整備されていなければ普及は難しい」との考えを基にSDKだけでなく周辺ライブラリーや、ツール類などの整備に力を入れてました。その努力もあり現在ではかなりDartエコシステムも整備されてきています。このあたりはDart Meetup Tokyoで少し話をしたので参考にしていただければと。
#AngularDart
当初はAngular2を開発する過程でTypeScriptからDartとJavaScriptのソースを生成していましたが、この場合Angular2を開発するためには3つの言語に精通する必要があり、これによりAngular2開発者の負担増加と開発スピードの低下が問題となっていました。そこでBeta版の途中でTypeScript版とDart版は各々別の道を歩むことになります。これにより双方で開発スピードが上がる且つTypeScrip及びDartそれぞれの言語特性を活かした開発が可能になりました。現在では得にイベント処理の部分がTS版とDart版ではかなり違ってきてるはずです(とはいえ自分はTS版をWatchしてないので正直違いはわかりません・・・)
#Flutter
今後Dartが普及する上で重要なポジションになると思います。海外ではすでに大きく注目され始めているモバイルアプリ開発に特化したSDKです。AOTコンパイルによりAndroidとiOS両方のアプリをDart(Flutter)のコードから生成します。fluxアーキテクチャーにインスパイヤされているのでreactを触ったことがある人は違和感なくflutterアプリを構築出来るのではないでしょうか。個人的にも来年はFlutterの勉強に力を入れていきたいと思っています。
#どういう人にDart、AngularDartを勧めるか?
個人的な見解としてはすでにTSやJSでバリバリフロントエンドを開発している人がDartやAngularDartの世界に来てもあんまり意味はないというかキャッチアップにコストが掛かるだけかなと思います。得にTSを使っているなら静的な型もありますしね。
ではどういう人に合いそうかというと今までServer Sideに生息してた人だったりWebもJS以外でのSSRが中心だった人がSPA作るって時にはマッチしそうかなと。というのも上記に挙げたとおりDartはDart開発チームが環境を整備していることもあり、ビルド周りや各種ツールで迷う事が無いためです。公式のドキュメントは非常に充実しているので英語に拒否反応が出ない人であればAngularDartは1つの選択肢になるのではないでしょうか。
まぁ、結局は選定者の好みでしょうがw
#2018年のDart
まず2018年の1月にLAにて2日間かけてDartの大きなカンファレンスが開かれます。
ここではDart2.0、AngularDart、Flutterを中心にした話が主になるようです。おそらくそこを前後してDart2.0のリリースがあるのではないでしょうか。Dart2.0に関してはnullsafeやオーバーロードのサポート等大きな言語仕様の拡張は見送られています。中の人も「nullsafeは素晴らしい機能だけどまだDartには早いかな」とgiiterにて答えてました。オーバーロードに関しても同様です。Dart2.0はとにかくstrong-modeをデフォルトにするという部分がメインの仕様変更になっていて、あとは便利なAPIの拡張などが主になってます。このあたりは本家のニュースレターの過去ログなどを見るといいです。個人的にはもっといろいろ期待してたのですが段階的にアップデートしていこうという事なのでしょう。2.0以降にも期待しています。
ちなみに現在2.0は絶賛開発中ではありますが仕事でも使っていて得に支障は無い感じです(あんまり難しいことしてないからでしょうが)
Dartの2018年は今年以上にflutterを中心に動きそうです(正直もっとWebの方にももっと力入れて欲しいなと思ってますが・・・)。flutterにかけるリソースからgoogleの本気度が伺えますし、1月のカンファレンスもflutterの話題がメインになりそうです。そしてそこを中心にさらにDartの周辺ツールだったり、WebやServer Sideがさらに充実していく事を期待して Advent Calendar3日目を締めたいと思います。来週の担当日にはより技術的な事を書こうと思います。