参加してきました。会場はナビタイムジャパンさん。
表参道駅、いつもどの改札から出るとどこに近いのか分からなくなるので、ちょっと苦手です。
Meetupの話
開始15分前ぐらいに着、そのままモニターの接続チェックなんかをしながら開始を待つなど。 Meetupへの参加も4回目になるので、Meetupで知り合った方ともお話することも多くなってきました。 最近はなかなかFlutterを書く時間を確保できないのですが、参加後にモチベーションが上がるので何とか前に進めている気がします。
LTの話
運営時、時間管理は大切だなーと。 LT中はなかなか経過時間など気づきにくいものですが、そこをサポートすることも必要なのだなと学びがありました。
個人的にグッときたのはYasutaka Kawamotoさんの"アプリ内課金プラグインの現状"です。
本日はありがとうございました!資料公開しました!https://t.co/eotEZOmeW0 #flutter_meetup_tokyo
— yasi kawamoto (@kwmt27) 2019年3月26日
5つの同じ機能を実現しようとするプラグインを見比べた時、それぞれの実装の良し悪しが出るなーと考えながら聞いてました。 オープンソースは、こういう時にコードを見比べられるのが嬉しいですよね。
この2つの実装の違いを眺めて、しばらくプラグインの勉強をしようと思いました。
Android App Bundleの話
Flutter 1.2から対応が入ったAndroid App Bundle(AAB)対応の話をしました。
話した内容は下記の感じです。
FlutterでAndroid App Bundleが使えるようになった
Android App Bundleについては下記Blog内の画像を見た後に、公式サイトをみるとわかりやすいかなと思います。
ブログ
android-developers.googleblog.com
公式サイト
使い方
flutter build apk
を flutter build appbundle
にするだけ。
成果物が apk
から aab
に変わり、パスが少し変わるだけで大きな違いはありません。
嬉しいこと
apk
配信から aab
配信に変えると配信時のアプリサイズを抑えることができます。
ところでFlutterのアプリも小さくなるんですかね?
試してみました。 利用したアプリはWebView Checker です。 Play Storeはこちら。
実験結果と考察
minSDK | build apk | build appbundle |
---|---|---|
16 | 5.46MB | 5.40~5.42MB |
21 | 5.47MB | 5.43~5.46MB |
ちょっと小さくなったかな……? といった感じの微妙な結果になっています。
この微妙な感じは下記のような理由によるものではないかなと考えています。
- PNG/JPGなどの画像リソースを含めていない
- NDKを利用するようなライブラリを含めていない
- リソースファイルが少ない
画像リソース
WebView Checker内にはアプリアイコンぐらいしか画像リソースがない、というのが大きな理由になりそうです。
なお、Flutter内の Icon
は下記のコードを見る限り画像リソースではない模様です*1。
このためFlutterらしくアプリを作ると、削減するための画像リソースを含めてアプリ開発する方が難しいのかもしれません。
flutter/icons.dart at master · flutter/flutter · GitHub
flutter/icon_data.dart at master · flutter/flutter · GitHub
ライブラリ
Android App Bundleによるアプリサイズ削減の大きな要素として、プロセッサのアーキテクチャごとにNDKで作られたライブラリ(C++で書かれたライブラリ)を配信することができる点があります。 しかしながら、Flutterの標準的なコードを読む限りこれらのライブラリ要素は見当たりませんでした。
動画やとんでもなく計算量の多い何かをFlutterアプリでさせない限り、これらの問題は発生しないように見えます。 アプリに多くのライブラリを入れていくような開発であれば、効果が期待できるのではないでしょうか。
リソースファイル
WebView Checkerは特に多言語対応をしていないため、どの場合でも英語しか表示されません。 このため、言語リソースの分割配信が行われるアプリではありませんでした。 多言語対応を進めていけば、この問題は発生するのかもしれません。
ただ言語リソースはどれだけ記述してもサイズは大きくならないので、この観点からの削減はあまり期待されるものではなさそうです。
Android App Bundle配信のまとめ
- ビルドの切り替えは簡単
- アプリサイズは小さくなる、ちょっとだけ
- ライブラリ利用やPNG画像をアプリに含めるなどしているなら、取り組む価値はある
裏話
今回の資料を作るにあたり、結構な数のビルドを回してPlay Storeにあげまくりました。
というのも、Android App Bundleの"配信サイズ"はGoogle Play Store上でしか確認できない(さらに厳密にいうと、実際にダウンロードしないとわからない)のです。
appbundle
でビルドするたびにストアへあげ直し、minSDK
を変更すればまたリリースビルドを回し、Store上で別バージョンのアプリと認識させるためにVersionCodeを更新し……といったジミーな作業が続きました。辛かった。
あと、そろそろFlutterでちゃんとしたアプリを作らないとこういったテストもしにくいなーと感じてます。 iOSアプリを作るとなるとプライバシーポリシーもしっかり考えないといけないので若干腰が重いのですが、がっつり作り込みたいですね!
終わりに
次回のFlutter Meetup Tokyoにも参加して、Flutter力を高めていきたいです!! ガンバルゾー!
*1:今回の資料作るために初めて読んで知った