こんにちは。情報新3回のpngnです。皆さん、スマホアプリ開発に興味はありませんか?iOSだとSwift、AndroidだとKotlinを使って開発する、って知ってる人がいるかもしれないですね。しかし、ぶっちゃけた話、iOSとAndroid両方で出すために2言語で書くのは面倒じゃないですか?個人開発するなら特にそうです。そんなめんどくさがりの皆さんにFlutterという選択肢の紹介をしたいと思います。
FlutterとはGoogleによって開発されたフリーかつオープンソースのクロスプラットなモバイルアプリケーションフレームワークの事です。人間のために分かりやすく説明すると、1回コードを書くとandroid, iOS(, いずれはWebやPCでも!)で動くアプリを作る事が可能です。
今までもそのようなライブラリは死ぬほどあったのですが、それらの大半は内部的にブラウザで動いていたため遅いという問題がありました。Flutterはネイティブにコンパイルするため高速に動きます。Flutterの他にもReact Nativeというフレームワークもネイティブにコンパイルするため高速に動くのですが、React Nativeには色々大変な部分があるらしく、より新しかった事もあり僕はFlutterを選びました(実際どうなのかは知りません)。Reactの経験がある人はReact Nativeもいいのかもしれません。
Flutterのいい所
- Googleが出しているのでandroidだとだいたい動くので安心
- ネイティブにコンパイルするため高速
- Hot Reload / Hot Restartのおかげでデバッグの時のビルド時間が短い!デザインの変更を瞬時に更新できるのでデバッグが捗る!
- デザインも全て単一の言語のコードで書く
- とっつきやすい
- Documentが充実している(公式Documentに画像が無い事が多いのだけが難点...)
- 特にWidget of the WeekってYouTubeが分かりやすい
- マイナーな機能を使いたい時部分的に自分でネイティブの言語で書ける
- マテリアルデザインが簡単に書ける
- アニメーションも比較的簡単に作れる
Flutterの悪い所
- iOSアプリっぽさが無くなる
- iOSだとなんかよく分からんエラー吐く事がよくある(これはXcodeが悪い事もあるので一概にFlutterのせいとは言い切れないけど)
- ライブラリが充実していない(カメラとか、最低限のやつはありますが自由度が低いです)
- とても稀に公式のライブラリにバグに当たります
- 情報量が少ない(最近は日本語の情報も増えてきましたがマイナーな事しようすると詰みがち)
- 言語がDartでマイナー(比較的とっつきやすい)
新しい技術だから仕方ないねって感じはあります。ストレス耐性無いときついかも(これは多分iOSネイティブでも変わらん気がする)
その他注意点
- Storeにアップするためにはお金かかる iOS高い
- iOSアプリのbuildにMacがいるよ
- ゲーム作るならUnityが楽だよ これはマジ
(雑談) デザインとロジックは分離すべき?
突然話は変わりますが、Webってhtmlで大枠を作り、CSSでデザインを作り、javascriptでブラウザで動くロジックを組み、phpやnodeとかでサーバー上のロジックを組みますよね。言語によって役割分担がされている一方でFlutterはデザインもロジックも全てDartです。どちらのスタイルがいいのでしょうか?
役割分担がなされている方が保守がしやすいという意見もあると思います。プロジェクトの終盤でデザインを少しいじる時、分離されていた方が間違えてロジックをいじってしまう恐れも無いわけです。
しかし、僕は1つの言語で書く方が長期的に見ると保守しやすいのでは?と考えています。というのは、複雑なコンテンツを作ろうと思うと厳密にロジックとデザインを分離する事が出来ないと考えるからです。また、CSSはhtmlの構造を元に書きますが、それによりhtmlの構造を書き換えるのが困難になる事を経験した事がある人もいると思います。デザインとロジックの境界線が曖昧ならば、境界の糊が不要な単一言語の方がいいのではないかなと思います。
それらは単に僕の技術力が低いのが原因かもしれないです。よく分かりません。そこらへんに興味のある人は意見を下さい。
おわりに
いかがでしたか?最後脱線しまくったのですが、言いたい事はスマホアプリ開発を今から勉強するならFlutterがいいって事です。ソースは無いのですが、Googleが今開発中の新スマホOSのFuchsiaのメイン言語になる感じがあります。将来性があるので、今からスマホアプリ開発する人は候補に入れてみてはいかがでしょうか。