DxShield 猫の巻【番外編】Flutterアプリをのぞいてみよう

こんにちは、新入りDxShielderのyyokotaです!
最近暖かくなり花粉が飛び交う陽気になって参りましたがいかがお過ごしでしょうか?

僕自身は軽度のスギ花粉症で、今まさに鼻をすすりすすり出社しております。。。
薬はちゃんと飲んでいるのですが今年はあまり効かず手強いですね 🙁

みなさま花粉症にはご自愛を!

さてさて、今回はDxShieldの機能紹介からは少し離れまして、少し別のトピックを扱って見ます。
今回扱うのは、新しくiOS、Androidのアプリ開発手法として注目を浴びているFlutterです!

 


Flutterというもの

様々な開発手法のあるAndroid, iOSのアプリ開発ですが、ごく最近になってFlutterというものが新たな手法として注目され始めました。

 

 
Flutter公式
Dart言語によるモバイルアプリ(iOS/Android)開発フレームワークFlutterがベータを開始

Flutterは、iOSやAndroidのアプリ開発において、高い開発効率と実行パフォーマンスをもたらすことを目的として開発されたフレームワーク・ SDKです。

このFlutterのベータ版が2018年2月28日に発表され、話題になっています。

使用する言語はDart言語で、Android StudioやVisual Studio Codeなどの主要なIDEでサポートされています。
開発をする側にとって、これまで使用していたIDEを用いて同じように開発することができるのはとてもありがたいですね!

 


Flutterの特徴と機能

Flutterの特徴として以下のことが挙げられます。

また、機能として以下のようなものが挙げられます。

  • ホットリロード
    • デバッグ中にコードを変更しても、ボタンを押すだけで一瞬で変更が適用可能
  • IDEデバッグ

Googleが推すだけあって、開発の煩わしい部分が改良されている印象がありますね。
特にホットリロードは、コードを直しては試し、直しては試し…を繰り返すにあたって非常に便利です!

 


Flutterアプリの中身はどうなってる?

 

さてさて、そんなFlutterで作るアプリですが、普通のAndroidアプリとはどのように異なるのでしょうか?

サンプルの中にあるHelloWorldアプリをビルドして、できたapkファイルの中身を見てみます。
まず初めにサンプルアプリHelloWorldをビルドしてapkファイルを作成します。


$ cd flutter/examples/hello_world

$ flutter build apk

これを実行するとflutter/examples/hello_world/build/app/outputs/apk/release/にapkファイルが出来上がるので、これをunzipして展開します。

$ unzip flutter/examples/hello_world/build/app/outputs/apk/release/app-release.apk -d rps
$ cd rps

中身をtreeで見てみます。


$ tree

結果は以下の通りです。


.
├── AndroidManifest.xml
├── META-INF
│   ├── CERT.RSA
│   ├── CERT.SF
│   └── MANIFEST.MF
├── assets
│   ├── flutter_assets
│   │   ├── AssetManifest.json
│   │   ├── FontManifest.json
│   │   ├── LICENSE
│   │   └── fonts
│   │   └── MaterialIcons-Regular.ttf
│   ├── icudtl.dat
│   ├── isolate_snapshot_data
│   ├── isolate_snapshot_instr
│   ├── vm_snapshot_data
│   └── vm_snapshot_instr
├── classes.dex
├── lib
│   └── armeabi-v7a
│   └── libflutter.so
├── res
│   ├── mipmap-hdpi-v4
│   │   └── ic_launcher.png
│   ├── mipmap-mdpi-v4
│   │   └── ic_launcher.png
│   ├── mipmap-xhdpi-v4
│   │   └── ic_launcher.png
│   ├── mipmap-xxhdpi-v4
│   │   └── ic_launcher.png
│   └── mipmap-xxxhdpi-v4
│   └── ic_launcher.png
└── resources.arsc

12 directories, 21 files

ちなみに、javaで作ったHelloWorldアプリの構造(第一層)は以下のようになっています。


.
├── AndroidManifest.xml
├── META-INF
├── classes.dex
├── res
└── resources.arsc

フォルダの中身が非常に多いので、ここでは割愛します。
“assets”フォルダと”lib”フォルダが増えていますが、これについてはjavaやKotlinで作ったアプリでも、ネイティブライブラリやアセットが使用されていれば同じように増えるので、こういうものですね。

assetsフォルダ


├── assets
│   ├── flutter_assets
│   │   ├── AssetManifest.json
│   │   ├── FontManifest.json
│   │   ├── LICENSE
│   │   └── fonts
│   │   └── MaterialIcons-Regular.ttf
│   ├── icudtl.dat
│   ├── isolate_snapshot_data
│   ├── isolate_snapshot_instr
│   ├── vm_snapshot_data
│   └── vm_snapshot_instr

こっちはフォントのアセットファイルとか、はたまた仮想環境のスナップショットとかを保存しておくフォルダですね。

libフォルダ


├── lib
│   └── armeabi-v7a
│   └── libflutter.so

libflutter.soというFlutterの共有ライブラリファイルが入っています。
soファイルはライブラリファイルなので主要な関数がぎっしりとつまっていますから、これが書き換えられてしまうと大変なことになってしまうかも??

 


まとめ

iOSとAndroidのクロスプラットフォーム開発が可能で、なおかつ開発過程において多大な改良を加えたFlutterですが、その可能性は未知数です。
アプリ制作をする方々は、色々なものを見て聞いて考えて、新しい技術を得ていく必要がありますね!