普段思ったことや、雑記。

Menu & Search

Dart(Flutter)についての所見

2021年1月2日
Dartのイメージ

第一印象では、クロスプラットフォーム開発環境のメジャーな競合として挙がる、React Nativeより良さそう

今回、一通りDart, Flutterの公式の資料を読み込み、最初のアプリケーションをビルドし、実行までを行った。ざっと、以降の内容をまとめた感想だと、過去開発経験のあるReact Nativeよりもとっつきやすそうというのが第一印象だった。開発環境の構築のサポートに気を遣っているのか、環境構築のステップ数も短く、資料のガイドも適切で迷うことがなくアプリケーションを実行まで至った、というのが好印象の要因だろう。

DartがReact Nativeよりも良さそうだと判断した理由

1. Dartは、ネイティブコードを出力可能なクロスコンパイラ環境である

React Nativeは対象とする実行環境向けのネイティブコードを出力する、というのではなく、あくまでJavaScriptコードからOSネイティブAPIをコールするという仕組みで動作している。一方、Dartは対象とする実行環境向けのネイティブコードを出力する点で、アプリケーションの動作速度や実行時の安定性に優位性が期待できるのではないかと思っている。

2. Dartは言語そのものが、クロスプラットフォーム環境を目指す明確な方向性を示している

Dartは公式サイトで、『Dart is a client-optimized language for fast apps on any platform』と、明確に言語の方向性がクロスプラットフォームを意識したものであることを宣言している。一方で、React NativeやXamarinなど、ある既存のプログラミング言語においてクロスプラットフォーム開発環境を提供する、といったものはあったが、私が知る限りプログラミング言語そのものがクロスプラットフォーム環境を完全に意識して作られている、といったものはない(※Dartのこれまでの紆余曲折の歴史から、今ではたまたまそうなったというツッコミはそれはそれで…)。Dartのプログラミング言語としての方向性がそのままクロスプラットフォーム開発環境なので、これまでクロスプラットフォーム開発環境は流行り廃りの激しい歴史があったが、ソフトウェアとしての寿命が少しは…長そうだと多少の期待が持てる。

3. Flutterという、Material Designで実績のあるGoogle発の開発キットが存在し、また開発が活発である

GoogleはAndroid OSの開発元であり、また洗練されたUIデザインのガイドライン、Material Designも提唱している。FlutterフレームワークはMaterial DesignのUIキットを内包しており、世界的に実績のある標準的なUIが標準的に提供されている点が心強い。

4. 公式ドキュメントが、Dart, Flutterともに適切な情報量を担保している

Dart, Flutterの公式資料は、共に多くもなく、少なくもなく、初見の開発者が見た時に知りたい情報にアクセスしやすい印象があった。この手の比較的新しかったたり、一風変わった技術は、機能があっても資料がなくて困るシチュエーションはあり得るので、公式資料の充実は嬉しいポイントである。

Dart, Flutter環境における懸念点

1. React Native同様、UIを除き、ブリッジされているAPI群が薄い

Dartは言語の方針的に、クロスプラットフォームです!を主張する以上、さすがにある程度モバイルOSへのブリッジAPIがサポートされているものかと思ったが、実際にAPIを調べてみるとそうでもなかった。自分が私生活でよく使っていそうなモバイルOSの機能で、カメラ, マイク, GPS, Bluetoothを対象にDart公式のライブラリとしてのサポート状況を調べてみたところ、唯一、カメラは公式から提供されていたくらいで、他に関しては外部の開発者の貢献によるものだった。

2. (Flutter)ブリッジされてないAPIがあったときは?

Flutter環境にて、ブリッジされていないAPIがあった場合、MethodChannel classを使用することで、SwiftやKotklinその他のコードと疎通できるようだ。純粋なDartにおいては、未調査につき不明。

環境構築、初めてのアプリケーション実行(iOSのみ)までの感想

1. 環境構築にかけるステップ数が多くはない

DartもFlutterも、合わせても数ステップ以内だったので、これはかなり短いほうだろう。環境によって、インストール済みの依存のあるツールも異なるが、これも後述の $ flutter doctorを見て、試行すれば良く、だいたい10ステップ以内程度で完了するだろう。

2 $ flutter doctorコマンドのサポートが良い

このコマンドを実行すると、Flutter環境を動作させるために必要なツールが実行可能かをチェックしてくれる。実行できない場合、推奨する実行方法を教えてくれる。環境構築の補助やトラブルを想定したツールだと思うが、これが環境になれてない初心者にはとても欲しいものだったりする。実際、iOSの実行環境のみで良かったので、このコマンドを何度か実行し、iOSの実行環境のみを今回は構築した。

公式ドキュメントが適切で、公式しか見ずにセットアップを完了したのが好印象

これは見出しのそのままで、環境構築についてはDart, Flutterともに公式サイトしか参照することなく、環境構築を完了できた。React Native(※2021年1月2日現在、React Nativeの最新バージョンv0.63)は現在どうなっているのだろう、と環境構築の資料を確認したところ、現在ではReact Nativeにおいても丁寧に資料が整備されていた。

あとは、Flutterの資料で地味に良いかったのが、異なる開発環境ごと(VScodeまたはAndroid Studio)にアプリケーションの実行手順が示されており、分かりやすかった(GUI上のどのメニューのどのボタンを押す、まで書いてあるので初学者にも優しい)。

総評

Dartは、言語としてクロスプラットフォーム環境を主張しているにも関わらず、モバイルOSにおけるブリッジAPIが少ないなど、気になる点はあるものの、少なくともこの手の技術としては、開発環境の構築手順が明瞭であり、またトラブル時の資料も公式サイトや公式提供のコマンドラインツールでガイドが適切に示されているため、初学者がとっつきやすそうな環境という印象を持った(※2021年1月2日現在、React Nativeの最新バージョンv0.63の資料も確認したが、DartやFlutterのほうが資料がより見やすいように思えた)。

今回は、Dart, Flutterに関する技術調査と簡単なハンズオンにとどまったが、今後Flutterを本格的に使用する機会がありそうなので、あらためて実際に通信するモバイルアプリを組んでみてから感想を残したいと思う。

Article Tags
mmiyauchi

プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。

Related article

Redux(react-redux)における適切な配列要素の更新

2021年8月23日…

CloudFlareの『SSL/TLS 暗号化モード(HTTPS通信設定)』を使用したとき、『ERR SSL VERSION OR CIPHER MISMATCH』のエラーでChromeで発生し、接続できない場合の対処

英語の記事は見当たっ…

クソコードとは何であるか

そういえば、クソなコ…

Discussion about this post

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Type your search keyword, and press enter to search