Flutter勉強日記: iOSもAndroidも14年間ネイティブコードで開発して来たエンジニアがFlutterの勉強を開始
先月からFlutterの勉強を初めた。
僕はiOS、Androidとも2009年からアプリ開発を初めて、iOSはObjective-CからSwift、AndroidはJavaからKotlinと言語を変えて来たが常にネイティブコードと呼ばれるプラットフォームがメインでサポートしている言語を使ってアプリを作ってきた。
Android, iOS同時にアプリをリリースしたいというクライアントに対してもSwiftとKotlinを同時に使い分けてアプリを開発してきたし、この言語の間を行き来したり、Swiftのコードを読みながら同じロジックや画面遷移をKotlinで同時通訳的に書いたりするのが得意である。
今までマルチプラットフォーム言語を全く使わなかったわけではなく、依頼があったときにAdobe AIRとReact Nativeを触ってみたことは過去にあった。ただ、普段ネイティブコードでアプリを使っている身からするとどちらも当時はクオリティ的に満足できるものではなく、依頼自体をお断りするケースが多かった。
あれからもう何年も経ち、様々なマルチプラットフォーム言語・フレームワークが姿を消していったが、React NativeとFlutterだけは未だ生き残っている様をみて、これらの言語のクオリティはもう十分なところまで上がっているのかもしれないと思ったのである。
今でもiOSアプリ、Androidアプリで最高の品質のものを作るのであればSwiftとKotlinがベストチョイスなのは言うまでもないがいくつかのケースでマルチプラットフォーム言語を使ったほうがいいケースもあるのではないかと考えている。
①Product Market Fitをまだ見つけていないアーリーステージのプロダクト
まだ使ってくれる人がいるかどうかもわからないプロダクトを開発する時は、iOS、Android両方のアプリを同時に開発してリリースするには体力がいる。このような場合まずはマルチプラットフォーム言語で開発して市場で自分たちのアイデアを検証すると失敗したときもダメージが少なくてすむ。
②Bluetoothやカメラ、GPSなどiOSとAndroidで仕様の異なるデバイスに対して高度な使い方をするものではなく、UIでの情報の提示がメインのアプリ
ネイティブ言語で開発するメリットはとにかくiOSならiPhone、AndroidならAndroid端末のデバイスの機能を思う存分使うことができることである。また、デバイスの機能を触るコードを自分で書くためチューニングもしやすい。デバイスというのは使うときにタイミングが肝となるケースが多い。例えばBluetoothなら1秒間にどれくらいのデータが送られてくるか、そのうちすべてのデータを取り込むのか、何ミリ秒に1回だけサンプリングするのか、などなど、こういうタイミングが重要だったりシビアだったりする処理も自分の思いどおりに制御できることがネイティブ言語でプログラムを書く強みであるが、こういう要件が全くないアプリであれば、マルチプラットフォーム言語で開発しても落とし穴に至るリスクは少なくなる。
例えばニュースアプリのようにサーバーから情報を取ってきてUIに提示するアプリ、写真を投稿・共有するアプリのように情報の提示やグラフィカルな機能がメインのアプリであればマルチプラットフォーム言語に向いている。
③キャンペーンやイベント向けなど提供期間が限られたアプリ
②の条件に当てはまっている(つまりデバイスの高度な使い方をしない)のが前提となるが、期間限定のアプリであれば、その後長期的にアプリを進化させる必要がない。今わかっている要件だけが実現できれば良いので、マルチプラットフォーム言語で開発できる見込みがあればその見込みが狂うことはない。このような場合もマルチプラットフォーム言語で開発するメリットは大きいだろう。
このような3つのケースで僕がマルチプラットフォーム言語で開発を行えば弊社に開発を依頼してくれる顧客の方々にメリットがあるのではないかと考え、今回Flutterを勉強して使って見ることにした。
ただ、本当にFlutterがどのレベルまで使えるのか、面倒ではないのかは未だわからない。Objective-C, Swift, Java, KotlinでiOS, Androidアプリを10年以上開発してきた自分の背景から使ってみたFlutterの感想、ネイティブコードを知っているからこそのTips、などなど、勉強しながらnoteで紹介していけたらと思います。
続く。
このブログに関する質問やiOS・Android・Webアプリの開発の相談はこちらから↓↓↓
次回は↓↓↓
この記事が気に入ったらサポートをしてみませんか?