こんにちは。ぽこです!
今回は、アプリ開発で最近登場したFlutterという言語について説明します。
クロスプラットフォーム モバイルアプリケーション開発
モバイルアプリケーションとは
モバイルアプリケーションとは、携帯電話やタブレットといったモバイル端末上で動作するコンピュータプログラムや、ソフトウェアのことを言います。
モバイルアプリを作る、というと簡単に聞こえるかもしれませんが、実際は様々なプラットフォームがあり、とても複雑です。
アンドロイドでもiPhoneでもiPadでも同じアプリが動いているように見えるかもしれませんが、実は新しいデバイスができるたびにプラットフォームは変わっているのです。
クロス プラットフォームができる前は…
クロスプラットフォームができるまで、アプリケーションコードはプラットフォームごとに作らなければいけませんでした。
つまり、iOSのためのコードとアンドロイドのためのコードは別々に作られていたのです。今まではiOSのアプリ開発にはObjective-CかSwiftが、アンドロイドアプリの開発にはJavaかKotlinが使われていました。
そこで発生する問題
- 2つのコードをそろえなければいけない
- 何か変更があったときに、iPhoneのコードとアンドロイドのコードの両方を変えなければいけない。
- 両方の知識を持った開発者を使わなければいけない
- 開発にコストがかかる。
- それぞれのプラットフォームで見え方や動きが異なることがある。
初期の クロスプラットフォーム開発ツール
そのような状態だったので、シリコンバレーではすぐにモバイルアプレケーション開発の共通プラットフォームが必要だと気が付きました。そこで登場したのが大きく分けて2つの開発ツールです。
元のライブラリを使うクロスプラットフォーム開発ツール
これらのツールは、AppleとGoogleによって提供されるSDK上で統一のAPIを作成します。XamarinやAppcelerator,Nativescriptなど、多くのツールは今でも使われています。
しかし、次のような問題もありました。
統一APIは完全にカバーすることができない
このタイプのアプリケーションでは、統一APIはすべてをカバーできず、開発者がプラットフォーム特有のコードを書かなくてはいけない、といった問題があります。
SDKの部品を使っている
さらに、これらのアプリはSDKの部品を使っています。そのため、別のプラットフォームでは別のSDKとなっているので、見え方(表示)が変わってくることがあります。
元のライブラリを使わないクロスプラットフォーム開発ツール
こちらのツールでは、先ほどとはまったく別の方法で共通化を行っています。SDKを使わず、直接プラットフォームのブラウザで動かすコードを作成するのです。
アプリはWeb上で動くため、すでにあるHTML5やJavaScriptの機能を使うことができるという利点があります。
しかし、このツールではスピードが遅いという問題があります。コンパイル済みの機械語で動くわけではなく、裏でWebブラウザに接続しているためです。
CordovaやPhoneGapなどをはじめとする多くのツールは今も使われています。
最新のクロスプラットフォーム開発ツール
そして今では、2つのモバイルアプリ開発ツールができました。
Facebook React Native と Google Flutterです。
React Native
React.JSはモバイルでもモバイルでないwebサイトでも同じように動作するJavaScriptのフレームワークで、長年使われていました。開発者は、レゴブロックのようなコンポーネント・オブジェクトを使ってユーザーインターフェイスを書きます。このコンポーネントは、ユーザーからの入力を受けてインタラクティブなユーザーインターフェイスを作ることができます。
React NativeはReactと似ていますが、webコンポーネントの代わりにネイティブコンポーネントを使用します。
どのように動くか
React Native は、次の2つのパートで動きます
- UI
- UIを表示し、ユーザーの入力を受け取ります
- JavaScript
- JavaScriptで書かれたコードを実行します
この2つのパートが合わさって動いています。
まとめ
React Native はとても優秀なツールです。2015年にできたものなので、これからさらに使いやすくなることも期待できます。さらに、すでにある多くのコンポーネントを使用できるため、とても生産的なツールでもあります。
しかし、実は完全に中でコンパイルしているわけではではありません。大部分はネイティブですが、一部、JavaScriptで埋め込まれたコードが繋がっています。そのため、パフォーマンス面でみると、最適とは言えません。
Google Flutter
Google Flutterは2017年から使えるようになったとても新しいものですが、今までのツールとは全く違うことで関心を集めました。Googleは現在Fuchsiaという、アンドロイドオペレーティングシステムに代わるものに取り組んでおり、それにFlutterが使われています。つまり、FlutterはGoogleにとってとても大事な言語なのです。
さらに、Flutterを使ってアプリ開発を行うと、アンドロイドでもiOSでも同じライブラリを参照するため、まったく同じ見た目のものができるのです。そしてこれはすべてのモバイルプラットフォームに対して同じことが言えます。拡張も可能です。
そのうえ、GooGle’s Dartでアプリケーションを作り、コンパイルを行えば、 React Native より良いパフォーマンスが得られます。これは、ユーザーインターフェイスとアプリケーションコードの接続がないからです。
まとめ
もし今からクロスプラットフォームモバイルWEBアプリの開発を行うなら、一番おすすめなのはFlutterです。