モバイル最新トレンド「Flutter」による画面の作り方

この記事は [NTTテクノクロス Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ntt-tx)の25日目(最終日)です。

こんにちは。NTTテクノクロスの神原です。普段は主にモバイル関連の開発や技術支援、講演活動、[ソフト道場研修講師](https://www.ntt-tx.co.jp/products/soft_dojyo/?utm_source=qiita&utm_medium=ac2018&utm_campaign=25)、[社外向け技術ブログ執筆(モバイル関連)](https://www.ntt-tx.co.jp/column/kambara_blog.html?utm_source=qiita&utm_medium=ac2018&utm_campaign=25)、[CSR活動(学生向けIT教育など)](https://www.ntt-tx.co.jp/corporate/csr/?utm_source=qiita&utm_medium=ac2018&utm_campaign=25)などを行なっています。

いよいよクリスマスですね。サンタクロースに最新のIoTデバイスやスマホをおねだりしていた方もたくさんいらっしゃるのではないでしょうか？！

小ネタはさておき、今回は主にモバイル向けクロスプラットフォームの開発技術として注目されている[Flutter](https://flutter.io)について、触れたいと思います。つい先日、バージョン1.0になったこともあり、耳にしたことがあるエンジニアの皆さんも多いのではないでしょうか。

Flutterを用いることで、AndroidとiOS向けのアプリを共通のコードで開発できます。プログラミング言語は、[Dart](https://www.dartlang.org)を利用します。本記事では、Android/iOSのネイティブアプリ開発者の視点から、 **Flutterにおける画面の開発** について、考察したいと思います。

Flutterで画面を開発するときには、一般的に2つのアプローチが存在します。

 - (1)コード(Dart)を用いるアプローチ
 - (2)UIデザイナを用いるアプローチ

それぞれの特徴と具体例を紹介します。


## アプローチ(1)コード(Dart)を用いる方法

Flutterで画面を開発するには、基本的に、コード(Dart)を用いて実装していきます。ネイティブアプリ開発で用いられることが多いレイアウトXMLや画面デザイナは利用しません。ここでは、コードの詳細には触れませんが、このようにコード上で画面を組み立てていくというアプローチです。

![approach1.png](https://qiita-image-store.s3.amazonaws.com/0/34766/70cca339-7db0-898a-4184-8d1462d1a851.png)

このときに役立つのがFlutterの大きな特徴である、 **Hot Reload** です。これを使うことで、エディタでコードを修正後、保存すれば、実機やエミュレータで実行中のアプリに、リアルタイムにその内容が反映されます。これにより、モバイルアプリ開発でありがちな動作確認に時間がかかってしまう問題が解消され、効率的に開発を進めることができます。


## アプローチ(2)UIデザイナを用いる方法

先に紹介した方法は、敷居が割と高そうと感じた方もいらっしゃるかもしれません。続いて、2つの目の方法です。Webアプリとして提供されている **Flutter Studio** を用いるアプローチです。ChromeなどのWebブラウザを用いて、図に記載のURLにアクセスすることで利用できます。

![approach2.png](https://qiita-image-store.s3.amazonaws.com/0/34766/c39f6b42-47c1-192c-4559-bb0f30ca3346.png)

左側のエリアから、GUIコンポーネント(Flutterの世界では、ウィジェットと言います)を、中央のエリアにドラッグ＆ドロップすることで画面を作っていきます。サイズや色などは、右側のエリアにてカスタマイズしていきます。

画面を作成した後は、画面の下の方にある「source code」というタブを押してみましょう。

![approach2s.png](https://qiita-image-store.s3.amazonaws.com/0/34766/ae562245-fa15-c7cc-b893-20626397db72.png)

作成した画面を実現するDartのコードが表示されるはずです。このコードをPC内のAndroid Studioなどの開発環境に取り込むことで、実際にコンパイルして動作させることができます。非常に便利なツールですが、複雑な画面を作りたい場合など、現状はこれだけで自分でイメージした通りの画面を作ったりすることは難しいのではないでしょうか。また、ビジネスロジックは、当然、自分でコードを書いていく必要があります。最初のアプローチ(1)と併用することも可能です。

2つのアプローチを紹介しましたが、現状はDartコードを自分で書くことは必須と考えた方がよいでしょう。自分自身もこれまで、ネイティブアプリ開発をしてきた立場からすると、コードで画面を作っていくのは、最初違和感がありました。ただ、慣れると何とかなるなあという印象を持つようになりました。ぜひ、実際にアプリを1本作ってみるのが一番だと思います。


# おまけ
余談として、Flutterと私のつながりについて、ご紹介したいと思います。私は新しい技術が大好きなこともあり、Flutterについても世の中に登場した頃から触っていまして、実際にアプリを開発したり、得られた知見を元に、社内で関連施策を企画したり、社外勉強会で講演させていただいたりといった活動を実施してきました。これら活動がきっかけとなり、先月末にウクライナで開催された[DEVOXX Ukraine 2018](https://devoxx.org.ua)というイベントでFlutterについて講演させていただきました。こちらが登壇のときの様子です。

![photo.png](https://qiita-image-store.s3.amazonaws.com/0/34766/444a4efd-c5e7-5c4e-59eb-a6a6b4beeddf.png)

現地でモバイル開発者と話をしてみると、新しい技術ということもあり、開発でばりばり使われている方は少なかったものの、今後の動向に興味を持たれている方は多くいらっしゃいました。

Flutterという新しい技術に着目して、社内外で取り組んできたことで、新たな出会いや活動が出てきたりと、振り返ってみると感慨深いなあと思います。そう言えば、Androidに出会った時もそんな感じでした。そのときの話は、[会社ブログ記事(Androidで深まったエンジニアとしての歩み)](https://www.ntt-tx.co.jp/column/kambara_blog/20151224/?utm_source=qiita&utm_medium=ac2018&utm_campaign=25)で書いていますので、よかったらご覧ください。特に新しい技術が大好きなので、これからもFlutterに限らず、色々と面白そうなものに着目していこうと考えています。


# おわりに
今回はモバイル最新トレンドとして注目されている「Flutter」について、ご紹介しました。 Advent Calendar 2018に最後までお付き合いいただき、ありがとうございました！

当社は様々な分野で、多くのエキスパートが活躍しています。興味を持ってくださった方は、[NTTテクノクロス Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ntt-tx)から、気になる記事を読んでいただけると幸いです。若干気が早い気もしますが、皆様、良いお年をお迎えください！