ionicでのハイブリッドアプリ開発のメリット・デメリットについてそろそろまとめとく

3年くらい前からionicを使い始めて良いところと悪いところが少しつつわかってきたのでメモしておく

メリッド

学習コストが低い & 開発リソースが確保しやすい

swiftやjavaなどでの実装となるとそれぞれのプログラム言語の学習する必要がある。言語自体の学習コストよりもiosandroidそれぞれのUIKitというか概念を勉強する必要がありやはり慣れるのにそれなりに時間がかかると思う。その点、ionicだとWebの技術(HTML+CSS+Javascript) がある程度わかっていればなんとなく作れてしまう。またアプリ作り始めてもすごい時間がかかったりすると挫折しがちだがなんとなくでも動くものが作れればあとは慣れなのでこれはメリットかと思う。また、ネイティブだとちょっとしたレイアウト調整や文言変更でもそこそこ経験が必要になるがHTML+CSSだと直感的にもわかりやすく作業できる人が多いのでそういう意味でリソースが確保しやすいと思う。

Webベースなので頑張ればデザインはなんとかなる

CSSは自由度も高い方だと思うのでけっこうなんとかなる。CSSはimportantが量産される可能性はあるが...

1ソース(ほぼ)でiOSAndroidの両OS対応のアプリが作れる

なんといってもこれが1番のメリットだと思う。iOSAndroid別々に作ると各OSで仕様の違うものができあがるなんてこともあると思う。もちろんネイティブの機能を使う必要がある場面はあるかもしれないが、あくまでその部分だけswiftとjavaで書くだけでアプリ全体は1ソースで作れるのでやはり工数的にはだいぶ少なくなる。

デメリット

開発環境のバージョンアップが速い

これはメリットというか良いことだとは思うがあえて辛いところもあるということでデメリットの方に書いた。ionic1から2に上がったとき、angular1も2への変更がありangular1と2は全く別物となっていてバージョンアップ=アプリの作り直し ということとなってしまいやはり辛かった。ionicに加えてcordova自体のバージョンが上がるとプロジェクトのファイル構成も変わってしまい、これらを新しい環境にあわせて継続的に対応させ続けていくとなるのでやはり大変。長く続くアプリでは開発環境のバージョンアップも視野にいれないとならない。Swiftもけっこうバージョンアップしてるがangularやcordovaの変更に伴う修正作業と比べたらだいぶ楽なんじゃないかと、、

WebViewベースのガワアプリの開発が難しい

cordova自体の仕組み上の問題だが、アプリの一部にWebViewを組み込むようなアプリの実装が難しい。例えば画面の下タブはionicのコンポーネントを使い、タブを選択するとWebViewが切り替わるようななんてことなさそうなアプリだがこれが難しい。ionicだけで何ができて何が難しいかというのは判断はある程度慣れだとは思うがこういうのが出てくると大変

XcodeAndroid Studioの操作があると手間

例えば info.plistに値を設定だけとかならionicのconfig.xmlに追記すればいいので問題ない。しかしxcode上でプロジェクトのある設定をいじる必要があったりするとionic platformを作り直すたびにその設定をし直す必要があるので漏れの恐れがある。プラグインやフックスプリトで解決できることがほとんどだとは思うが、xcodeならすぐできるところもそういうのがいくつもあるとやっぱり疲れる

ionicの大きな仕様変更にふりまわされた

OSSなので当然考えられることだが。例えば旧バージョンのionicで開発したアプリを新しいバージョンのionicでアップデートした際に、保存していたローカルストレージやクッキーが引き継げないなんてことがあった。また、内部的にはブラウザ(safariまたはchrome)のエンジンを使っているのでこれらに大きな変更があった場合にもろに影響受ける。ソース自体の修正も必要になる場合もあったりするとやっぱり大変。

結論

何年もメンテし続ける必要があるようなアプリだと最終的にかかる工数もネイティブの方が少なくなるんじゃないかと思う。また、失敗が許されないような案件もネイティブの方が確実だと思う。逆にプロタイプのアプリや、画面数が少ないので開発環境のバージョンアップがあってもサクッと作り直せるアプリだとionicがいいのかなと思う。あと今あげたようなデメリットを許容してくれることもけっこうあると思うのでそういう場合もionicで作るのはありだと思う。ionicもけっこうたつのでだいぶ成熟してきた印象はある。flutterには期待してるけど正直まだ勉強中なのでわからん。

結論、どっちがいいかはケースバイケース。けど趣味でアプリ作るなら自分はionicかも、、以上です